parent
566461b9a1
commit
81571da1eb
@ -1,111 +0,0 @@ |
|||||||
/*!
|
|
||||||
* file DFRobot_AS3935_lightning_I2c.ino |
|
||||||
* |
|
||||||
* On The Lightning Sensor
|
|
||||||
* This sensor can detect lightning and display the distance and intensity of the lightning without the |
|
||||||
* disturbance of electric arc and noise.It can be set as indoor or outdoor mode. |
|
||||||
* The module has three I2C, the addresses are: |
|
||||||
* 0x03 A0-High A1-High |
|
||||||
* 0x02 A0-Low A1-High
|
|
||||||
* 0x01 A0-High A1-Low |
|
||||||
* |
|
||||||
* Copyright [DFRobot](http://www.dfrobot.com), 2018
|
|
||||||
* Copyright GNU Lesser General Public License |
|
||||||
*
|
|
||||||
* version V0.1 |
|
||||||
* date 2018-9-6 |
|
||||||
*/ |
|
||||||
|
|
||||||
#include "I2C.h" |
|
||||||
#include "DFRobot_AS3935_I2C.h" |
|
||||||
|
|
||||||
volatile int8_t AS3935_ISR_Trig = 0; |
|
||||||
|
|
||||||
#define SI_PIN 9 |
|
||||||
#define IRQ_PIN 2 |
|
||||||
|
|
||||||
#define AS3935_CAPACITANCE 72 |
|
||||||
|
|
||||||
#define AS3935_INDOORS 0 |
|
||||||
#define AS3935_OUTDOORS 1 |
|
||||||
#define AS3935_DIST_DIS 0 |
|
||||||
#define AS3935_DIST_EN 1 |
|
||||||
|
|
||||||
void AS3935_ISR(); |
|
||||||
|
|
||||||
DF_AS3935_I2C lightning0((uint8_t)IRQ_PIN, (uint8_t)SI_PIN, (uint8_t)AS3935_ADD3); |
|
||||||
|
|
||||||
void setup() |
|
||||||
{ |
|
||||||
|
|
||||||
Serial.begin(115200); |
|
||||||
Serial.println("Playing With DFRobot: AS3935 Lightning Sensor"); |
|
||||||
Serial.println("beginning boot procedure...."); |
|
||||||
|
|
||||||
// Setup for the the I2C library: (enable pullups, set speed to 400kHz)
|
|
||||||
I2c.begin(); |
|
||||||
I2c.pullup(true); |
|
||||||
I2c.setSpeed(1);
|
|
||||||
delay(2); |
|
||||||
|
|
||||||
//lightning0.AS3935_I2CAddress(AS3935_ADD1); // x01 - A0->high A1->low
|
|
||||||
//lightning0.AS3935_I2CAddress(AS3935_ADD2); // x02 - A0->low A1->high
|
|
||||||
//lightning0.AS3935_I2CAddress(AS3935_ADD3); // x03 - A0->high A1->high
|
|
||||||
lightning0.AS3935_SetI2CAddress(AS3935_ADD3); |
|
||||||
|
|
||||||
// Set registers to default
|
|
||||||
lightning0.AS3935_DefInit();
|
|
||||||
// Now update sensor cal for your application and power up chip
|
|
||||||
lightning0.AS3935_ManualCal(AS3935_CAPACITANCE, AS3935_INDOORS, AS3935_DIST_EN); |
|
||||||
// Enable interrupt (hook IRQ pin to Arduino Uno/Mega interrupt input: 0 -> pin 2, 1 -> pin 3 )
|
|
||||||
attachInterrupt(0, AS3935_ISR, RISING); |
|
||||||
// For debug, view register data
|
|
||||||
lightning0.AS3935_PrintAllRegs(); |
|
||||||
// Clear trigger
|
|
||||||
AS3935_ISR_Trig = 0;
|
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
void loop() |
|
||||||
{ |
|
||||||
// It does nothing until an interrupt is detected on the IRQ pin.
|
|
||||||
while(0 == AS3935_ISR_Trig){} |
|
||||||
delay(5); |
|
||||||
|
|
||||||
// Reset interrupt flag
|
|
||||||
AS3935_ISR_Trig = 0; |
|
||||||
|
|
||||||
// Now get interrupt source
|
|
||||||
uint8_t int_src = lightning0.AS3935_GetInterruptSrc(); |
|
||||||
if(1 == int_src) |
|
||||||
{ |
|
||||||
// Get rid of non-distance data
|
|
||||||
uint8_t lightning_dist_km = lightning0.AS3935_GetLightningDistKm(); |
|
||||||
Serial.print("发生闪电啦! 闪电发生距离: "); |
|
||||||
Serial.print(lightning_dist_km); |
|
||||||
Serial.println(" km"); |
|
||||||
// Get lightning energy intensity
|
|
||||||
uint32_t lightning_energy_val = lightning0.AS3935_GetStrikeEnergyRaw(); |
|
||||||
Serial.print("雷电强度:"); |
|
||||||
Serial.print(lightning_energy_val); |
|
||||||
Serial.println(""); |
|
||||||
} |
|
||||||
else if(2 == int_src) |
|
||||||
{ |
|
||||||
Serial.println("发现干扰源"); |
|
||||||
} |
|
||||||
else if(3 == int_src) |
|
||||||
{ |
|
||||||
Serial.println("噪音强度过高"); |
|
||||||
} |
|
||||||
lightning0.AS3935_PrintAllRegs();
|
|
||||||
Serial.println(""); |
|
||||||
} |
|
||||||
|
|
||||||
// This is irq handler for AS3935 interrupts, has to return void and take no arguments
|
|
||||||
// always make code in interrupt handlers fast and short
|
|
||||||
void AS3935_ISR() |
|
||||||
{ |
|
||||||
AS3935_ISR_Trig = 1; |
|
||||||
} |
|
||||||
|
|
@ -0,0 +1,117 @@ |
|||||||
|
/*!
|
||||||
|
file DFRobot_AS3935_lightning_I2c.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.2 |
||||||
|
date 2018-10-08 |
||||||
|
*/ |
||||||
|
|
||||||
|
#include "Lib_I2C.h" |
||||||
|
#include "DFRobot_AS3935_I2C.h" |
||||||
|
|
||||||
|
volatile int8_t AS3935_ISR_Trig = 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_ADD3 |
||||||
|
|
||||||
|
void AS3935_ISR(); |
||||||
|
|
||||||
|
DF_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); |
||||||
|
|
||||||
|
// Set registers to default
|
||||||
|
lightning0.AS3935_DefInit(); |
||||||
|
// Configure sensor
|
||||||
|
lightning0.AS3935_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 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.AS3935_SetLCO_FDIV(0);
|
||||||
|
// lightning0.AS3935_SetIRQ_Output_Source(3);
|
||||||
|
|
||||||
|
attachInterrupt(0, AS3935_ISR, RISING); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void loop() |
||||||
|
{ |
||||||
|
// It does nothing until an interrupt is detected on the IRQ pin.
|
||||||
|
while (AS3935_ISR_Trig == 0) {} |
||||||
|
delay(5); |
||||||
|
|
||||||
|
// Reset interrupt flag
|
||||||
|
AS3935_ISR_Trig = 0; |
||||||
|
|
||||||
|
// Get interrupt source
|
||||||
|
uint8_t int_src = lightning0.AS3935_GetInterruptSrc(); |
||||||
|
if (int_src == 1) |
||||||
|
{ |
||||||
|
// Get rid of non-distance data
|
||||||
|
uint8_t lightning_dist_km = lightning0.AS3935_GetLightningDistKm(); |
||||||
|
Serial.println("Lightning occurs!"); |
||||||
|
Serial.print("Distance: "); |
||||||
|
Serial.print(lightning_dist_km); |
||||||
|
Serial.println(" km"); |
||||||
|
|
||||||
|
// Get lightning energy intensity
|
||||||
|
uint32_t lightning_energy_val = lightning0.AS3935_GetStrikeEnergyRaw(); |
||||||
|
Serial.print("Intensity: "); |
||||||
|
Serial.print(lightning_energy_val); |
||||||
|
Serial.println(""); |
||||||
|
} |
||||||
|
else if (int_src == 2) |
||||||
|
{ |
||||||
|
Serial.println("Disturber discovered!"); |
||||||
|
} |
||||||
|
else if (int_src == 3) |
||||||
|
{ |
||||||
|
Serial.println("Noise level too high!"); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
//IRQ handler for AS3935 interrupts
|
||||||
|
void AS3935_ISR() |
||||||
|
{ |
||||||
|
AS3935_ISR_Trig = 1; |
||||||
|
} |
||||||
|
|
Loading…
Reference in new issue