You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
DFRobot_AS393DFRobot_AS39355/examples/DFRobotAS3935LightningSenso.../DFRobotAS3935LightningSenso...

137 lines
4.1 KiB

/*!
* @file DFRobot_AS3935_lightning_sensor_detailed.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;
// The Arduino UNO can only use IO2 or IO3 as interrupt pins, whereas the
// ESP32 can use all pins as interrupt pins. Connect the lightning sensor's
// IRQ pin to a GPIO pin on the microcontroller then replace the number
// below with the connected GPIO pin.
#define IRQ_PIN 2
// Antenna tuning capcitance (must be integer multiple of 8, 8 - 120 pf)
#define AS3935_CAPACITANCE 96
// I2C address
#define AS3935_I2C_ADDR AS3935_ADD3
void AS3935_ISR();
DFRobot_AS3935_I2C lightning0((uint8_t)IRQ_PIN);
void setup()
{
Serial.begin(115200);
Serial.println("DFRobot AS3935 lightning sensor begin!");
lightning0.setI2CAddress(AS3935_ADD3);
while (lightning0.begin() != 0){
Serial.print(".");
}
lightning0.defInit();
// Configure sensor
lightning0.powerUp();
//set indoors or outdoors models
lightning0.setIndoors();
//lightning0.setOutdoors();
//disturber detection
lightning0.disturberEn();
//lightning0.disturberDis();
lightning0.setIRQOutputSource(0);
#if defined(ESP32) || defined(ESP8266)
attachInterrupt(digitalPinToInterrupt(IRQ_PIN),AS3935_ISR,RISING);
#else
attachInterrupt(/*Interrupt No*/0,AS3935_ISR,RISING);
#endif
delay(500);
//set capacitance
lightning0.setTuningCaps(AS3935_CAPACITANCE);
Serial.println("AS3935 manual cal complete");
// 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 will dispaly 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);
// Set the noise level,more than 7 will use the default value:2
lightning0.setNoiseFloorLvl(2);
//uint8_t noiseLv = lightning0.getNoiseFloorLvl();
//used to modify WDTH,alues should only be between 0x00 and 0x0F (0 and 7)
lightning0.setWatchdogThreshold(2);
//uint8_t wtdgThreshold = lightning0.getWatchdogThreshold();
//used to modify SREJ (spike rejection),values should only be between 0x00 and 0x0F (0 and 7)
lightning0.setSpikeRejection(2);
//uint8_t spikeRejection = lightning0.getSpikeRejection();
}
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!");
}
//View register data
//lightning0.printAllRegs();
}
//IRQ handler for AS3935 interrupts
#if defined(ESP32) || defined(ESP8266)
void IRAM_ATTR AS3935_ISR()
#else
void AS3935_ISR()
#endif
{
AS3935IsrTrig = 1;
}