parent
fe7f222abb
commit
33f486acb4
@ -0,0 +1,140 @@ |
||||
/*!
|
||||
file DFRobot_AS3935_lightning_sensor.ino |
||||
|
||||
SEN0290 Lightning Sensor |
||||
This sensor can detect lightning and display the distance and intensity of the lightning within 40 km |
||||
It can be set as indoor or outdoor mode. |
||||
The module has three I2C, these addresses are: |
||||
AS3935_ADD1 0x01 A0 = High A1 = Low |
||||
AS3935_ADD3 0x03 A0 = High A1 = High |
||||
AS3935_ADD2 0x02 A0 = Low A1 = High |
||||
|
||||
Copyright [DFRobot](http://www.dfrobot.com), 2018
|
||||
Copyright GNU Lesser General Public License |
||||
|
||||
version V0.4 |
||||
date 2018-11-15 |
||||
*/ |
||||
|
||||
#include "Lib_I2C.h" |
||||
#include "DFRobot_AS3935_I2C.h" |
||||
|
||||
volatile int8_t AS3935IsrTrig = 0; |
||||
|
||||
#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_ADD2 |
||||
|
||||
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!"); |
||||
|
||||
// Setup for the the I2C library: (enable pullups, set speed to 400kHz)
|
||||
I2c.begin(); |
||||
I2c.pullup(true); |
||||
I2c.setSpeed(1); |
||||
delay(2); |
||||
|
||||
lightning0.setI2CAddress(AS3935_ADD3); |
||||
// Set registers to default
|
||||
lightning0.defInit(); |
||||
// Configure sensor
|
||||
lightning0.manualCal(AS3935_CAPACITANCE, AS3935_MODE, AS3935_DIST); |
||||
|
||||
//set indoors or outdoors models
|
||||
lightning0.setIndoors(); |
||||
//lightning0.setOutdoors();
|
||||
|
||||
//disturber detection
|
||||
lightning0.disturberEn(); |
||||
//lightning0.disturberDis();
|
||||
|
||||
// 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,use a default value greater than 7
|
||||
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(0); |
||||
//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();
|
||||
|
||||
attachInterrupt(0, AS3935_ISR, RISING); |
||||
|
||||
} |
||||
|
||||
void loop() |
||||
{ |
||||
// It does nothing until an interrupt is detected on the IRQ pin.
|
||||
while (AS3935IsrTrig == 0) {} |
||||
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
|
||||
void AS3935_ISR() |
||||
{ |
||||
AS3935IsrTrig = 1; |
||||
} |
||||
|
Loading…
Reference in new issue