プログラムを用意しておいて、あとはひたすら雷の発生を待つ。
https://github.com/ti-nspire/AVR/tree/master/AS3935%232/test_C
#define F_CPU 8000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include "USARTClass.h" #include "AS3935SPI_Class.h" AS3935SPI_Class lightning("PB2"); // 雷センサーAS3935のCS端子をPB2に接続して実体化する。 void set_print_Val(const Registers something, uint8_t val){ lightning.setRegister(something, val); usart.printString(something.NAME); usart.printString(": "); usart.printByte(lightning.getRegister(something)); usart.printString("\n"); } volatile uint8_t detected = 0; ISR(INT0_vect){ detected = 1; } int main(){ usart.init(); lightning.initINT0(); // マイコンの外部割り込みを有効にして、 lightning.undisplayOsc(); // 念のため、INT (IRQ)端子から発振器出力が出ないようにして、 lightning.calibrateRCO(); // 内蔵発振器を較正する。 if(lightning.getCalibrationResult()==0b1010){ usart.printString("Calibration OK.\n"); } else{ usart.printString("Calibration Result: "); usart.printBinaryNibble(lightning.getCalibrationResult()); usart.printString("\n"); usart.printString("Something wrong. The program will terminate.\n"); return 0; } set_print_Val(AFE_GB, INDOOR); // 0-31。デフォルトINDOOR (18)。 set_print_Val(NF_LEV, 4); // 0-7。デフォルト2。 set_print_Val(WDTH,8); // 0-15。デフォルト2。 set_print_Val(SREJ,8); // 0-15。デフォルト2。 set_print_Val(MIN_NUM_LIGH,1); // 0-3 (1,5,9,16回)。デフォルト0 (1回)。 while(1){ if(detected){ // 何かが検出されたら、 detected = 0; lightning.stopINT0(); _delay_ms(3); // 少し待ってから、 usart.printString("INT Source: "); usart.printString(INT_NAMES[lightning.getRegister(INT)]); // 割り込み要因を表示して、 usart.printString("; "); usart.printString("Distance (km): "); usart.printByte(lightning.getRegister(DISTANCE)); // 推定距離(km)を表示する。 usart.printString("\n"); lightning.initINT0(); } } return 0; }