Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Wire.h>
- #include <LiquidCrystal.h>
- #include "PWFusion_AS3935_I2C.h"
- // ---------------- BUTTONS ----------------
- #define RECALL_BTN_PIN A0
- #define CLOSEST_BTN_PIN A1
- // ---------------- LCD ----------------
- const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 8;
- LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
- // ---------------- AS3935 ----------------
- #define IRQ_PIN 2
- #define SI_PIN 9
- #define AS3935_ADD 0x03
- #define AS3935_CAPACITANCE 80
- #define AS3935_INDOORS 1
- #define AS3935_DIST_EN 1
- PWF_AS3935_I2C lightning0(IRQ_PIN, SI_PIN, AS3935_ADD);
- // ---------------- LEDS ----------------
- #define YELLOW_LED_PIN 6
- #define RED_LED_PIN 7
- #define KM_15_MILES 24
- #define KM_35_MILES 56
- // ---------------- STATE ----------------
- volatile bool AS3935_ISR_Trig = false;
- float lastStrikeMiles = -1.0;
- float closestStrikeMiles = 9999.0;
- unsigned long ledOffTime = 0;
- unsigned long lcdMessageUntil = 0;
- bool showingMessage = false;
- // ---------------- ISR ----------------
- void AS3935_ISR() {
- AS3935_ISR_Trig = true;
- }
- // ---------------- SETUP ----------------
- void setup() {
- Serial.begin(115200);
- Wire.begin();
- pinMode(RECALL_BTN_PIN, INPUT_PULLUP);
- pinMode(CLOSEST_BTN_PIN, INPUT_PULLUP);
- pinMode(YELLOW_LED_PIN, OUTPUT);
- pinMode(RED_LED_PIN, OUTPUT);
- lcd.begin(16, 2);
- lcd.print("Lightning Det.");
- lcd.setCursor(0, 1);
- lcd.print("Initializing");
- digitalWrite(YELLOW_LED_PIN, LOW);
- digitalWrite(RED_LED_PIN, LOW);
- delay(1000);
- digitalWrite(YELLOW_LED_PIN, HIGH);
- digitalWrite(RED_LED_PIN, HIGH);
- delay(1500);
- lightning0.AS3935_DefInit();
- lightning0.AS3935_ManualCal(
- AS3935_CAPACITANCE,
- AS3935_INDOORS,
- AS3935_DIST_EN
- );
- attachInterrupt(digitalPinToInterrupt(IRQ_PIN), AS3935_ISR, RISING);
- lcd.clear();
- lcd.print("Listening...");
- Serial.println("Listening...");
- }
- // ---------------- LOOP ----------------
- void loop() {
- unsigned long now = millis();
- // ---- LCD AUTO RETURN ----
- if (showingMessage && now > lcdMessageUntil) {
- lcd.clear();
- lcd.print("Listening...");
- showingMessage = false;
- }
- // ---- BUTTON: LAST STRIKE ----
- if (!digitalRead(RECALL_BTN_PIN)) {
- lcd.clear();
- lcd.print("Last Strike:");
- lcd.setCursor(0, 1);
- if (lastStrikeMiles < 0)
- lcd.print("No data");
- else {
- lcd.print(lastStrikeMiles, 1);
- lcd.print(" mi");
- }
- lcdMessageUntil = now + 2000;
- showingMessage = true;
- }
- // ---- BUTTON: CLOSEST ----
- if (!digitalRead(CLOSEST_BTN_PIN)) {
- lcd.clear();
- lcd.print("Closest Strike:");
- lcd.setCursor(0, 1);
- if (closestStrikeMiles > 9000)
- lcd.print("No data");
- else {
- lcd.print(closestStrikeMiles, 1);
- lcd.print(" mi");
- }
- lcdMessageUntil = now + 2000;
- showingMessage = true;
- }
- // ---- AS3935 EVENT ----
- if (AS3935_ISR_Trig) {
- AS3935_ISR_Trig = false;
- uint8_t src = lightning0.AS3935_GetInterruptSrc();
- float miles = -1.0; // <-- DECLARED HERE (fix)
- if (src == 1) {
- uint8_t km = lightning0.AS3935_GetLightningDistKm();
- miles = km * 0.621371;
- lastStrikeMiles = miles;
- if (miles < closestStrikeMiles)
- closestStrikeMiles = miles;
- lcd.clear();
- lcd.print("STRIKE!");
- lcd.setCursor(0, 1);
- lcd.print(miles, 1);
- lcd.print(" mi");
- showingMessage = true;
- lcdMessageUntil = now + 3000;
- // LED logic
- if (km <= KM_15_MILES) {
- digitalWrite(RED_LED_PIN, LOW);
- delay(800);
- digitalWrite(RED_LED_PIN, HIGH);
- }
- else if (km <= KM_35_MILES) {
- digitalWrite(YELLOW_LED_PIN, LOW);
- delay(800);
- digitalWrite(YELLOW_LED_PIN, HIGH);
- }
- ledOffTime = now + 1500;
- Serial.print("Lightning: ");
- Serial.print(miles);
- Serial.println(" mi");
- }
- else if (src == 2) {
- Serial.println("Disturber detected");
- }
- else if (src == 3) {
- lcd.clear();
- lcd.setCursor(0, 0);
- lcd.print("Interference");
- lcd.setCursor(0, 1);
- lcd.print("Move sensor");
- Serial.println("Noise level too high");
- showingMessage = true;
- lcdMessageUntil = now + 2000;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment