/*! * @file DFRobot_AS3935_lightning_sensor_ordinary.ino * @brief SEN0290 Lightning Sensor * @n This sensor can detect lightning and display the distance and intensity of the lightning within 40 km * @n It can be set as indoor or outdoor mode. * @n The module has three I2C, these addresses are: * @n AS3935_ADD1 0x01 A0 = 1 A1 = 0 * @n AS3935_ADD2 0x02 A0 = 0 A1 = 1 * @n AS3935_ADD3 0x03 A0 = 1 A1 = 1 * @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com) * @license The MIT License (MIT) * @author [TangJie](jie.tang@dfrobot.com) * @version V1.0.2 * @date 2019-09-28 * @url https://github.com/DFRobot/DFRobot_AS3935 */ #include "DFRobot_AS3935_I2C.h" volatile int8_t AS3935IsrTrig = 0; // Connect the license sensor's IRQ pin to a GPIO pin on the microcontroller // then replace the number below with the GPIO pin number #define IRQ_PIN 2 // Antenna tuning capcitance (must be integer multiple of 8, 8 - 120 pf) #define AS3935_CAPACITANCE 96 // Indoor/outdoor mode selection #define AS3935_INDOORS 0 #define AS3935_OUTDOORS 1 #define AS3935_MODE AS3935_INDOORS // Enable/disable disturber detection #define AS3935_DIST_DIS 0 #define AS3935_DIST_EN 1 #define AS3935_DIST AS3935_DIST_EN // I2C address #define AS3935_I2C_ADDR AS3935_ADD3 void AS3935_ISR(); DFRobot_AS3935_I2C lightning0((uint8_t)IRQ_PIN, (uint8_t)AS3935_I2C_ADDR); void setup() { Serial.begin(115200); Serial.println("DFRobot AS3935 lightning sensor begin!"); while (lightning0.begin() != 0){ Serial.print("."); } lightning0.defInit(); #if defined(ESP32) || defined(ESP8266) attachInterrupt(digitalPinToInterrupt(IRQ_PIN),AS3935_ISR,RISING); #else attachInterrupt(/*Interrupt No*/0,AS3935_ISR,RISING); #endif // Configure sensor lightning0.manualCal(AS3935_CAPACITANCE, AS3935_MODE, AS3935_DIST); // Enable interrupt (connect IRQ pin IRQ_PIN: 2, default) // Connect the IRQ and GND pin to the oscilloscope. // uncomment the following sentences to fine tune the antenna for better performance. // This displays the antenna's resonance frequency/16 on IRQ pin (The resonance // frequency will be divided by 16 on this pin) // Tuning AS3935_CAPACITANCE to make the frequency within 500/16 kHz ± 3.5% // lightning0.setLcoFdiv(0); // lightning0.setIRQOutputSource(3); } void loop() { // It does nothing until an interrupt is detected on the IRQ pin. while (AS3935IsrTrig == 0) {delay(1);} delay(5); // Reset interrupt flag AS3935IsrTrig = 0; // Get interrupt source uint8_t intSrc = lightning0.getInterruptSrc(); if (intSrc == 1){ // Get rid of non-distance data uint8_t lightningDistKm = lightning0.getLightningDistKm(); Serial.println("Lightning occurs!"); Serial.print("Distance: "); Serial.print(lightningDistKm); Serial.println(" km"); // Get lightning energy intensity uint32_t lightningEnergyVal = lightning0.getStrikeEnergyRaw(); Serial.print("Intensity: "); Serial.print(lightningEnergyVal); Serial.println(""); }else if (intSrc == 2){ Serial.println("Disturber discovered!"); }else if (intSrc == 3){ Serial.println("Noise level too high!"); } } //IRQ handler for AS3935 interrupts #if defined(ESP32) || defined(ESP8266) void IRAM_ATTR AS3935_ISR() #else void AS3935_ISR() #endif { AS3935IsrTrig = 1; }