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