SPI / 雷センサーAS3935 / 雷を待つ

プログラムを用意しておいて、あとはひたすら雷の発生を待つ。
f:id:ti-nspire:20200804104025p:plain:w500
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;
}