AS3935 Lightning sensor library

Dependents:   zeus

Fork of AS3935 by valentin spanu

include the mbed library with this snippet

#include "mbed.h"
#include "AS3935.h"

 // frdm-kl25z sd card connections for spi1 
 // ------------------------------------------------
 // Header -- kl25z -- SD/MMC          
 // J2-20  -- PTE1  -- MOSI
 // J9-13  -- PTE4  -- CS
 // J2-14  -- GND   -- Vss (GND) 
 // J9-9   -- PTE2  -- SCK
 // J9-11  -- PTE3  -- MISO
 
AS3935 ld(PTE1, PTE3, PTE2, PTE4, "ld", 100000); // MOSI, MISO, SCK, CS, SPI bus freq (hz) 
InterruptIn IntLightning(PTA12); //IRQ AS3935
DigitalOut led1(LED_RED);
Serial pc(USBTX, USBRX);

void DetectLightning()
{
    char OriginInt;
     wait_ms(2); 
    OriginInt = ld.interruptSource();
    if (OriginInt == 1) { //
        pc.printf(" Noise level too high\r\n");
        }
    if (OriginInt == 4) { //
        pc.printf(" Disturber\r\n");
        }
    if (OriginInt == 8) { // detection
        // pc.printf(" Lightning detection\r\n");
        pc.printf(" Lightning detection, distance=%dkm\r\n", ld.lightningDistanceKm());
        ld.clearStats();

        }
}

 
int main() {
    pc.baud(9600);
    pc.printf("\r\nstart lightning detector\r\n");
    
    //initialisations
    ld.reset();
    ld.setTuneCap(5); // 500kHz
    ld.powerUp();
    ld.setIndoors();  
    ld.setMinimumLightnings(1);
    //ld.setSpikeRejection(2);
    ld.setNoiseFloor(2);
    ld.disableDisturbers();
    //ld.enableDisturbers();
    ld.setWatchdogThreshold(2);
    wait_ms(10);
    IntLightning.rise(&DetectLightning);
    int MinBlysk = ld.getMinimumLightnings();
    int Noise = ld.getNoiseFloor();
    int TuneCap = ld.getTuneCap();
    int SpikeRej = ld.getSpikeRejection();
    int WatchDog = ld.getWatchdogThreshold();
     
    pc.printf(" Min wylad: %i", MinBlysk);
    pc.printf("\r\n");
    pc.printf(" Noise: %i", Noise);
    pc.printf("\r\n");
    pc.printf(" Tune CAP: %i", TuneCap);
    pc.printf("\r\n");
    pc.printf(" Spike rej: %i", SpikeRej);
    pc.printf("\r\n");
    pc.printf(" Watchdog: %i", WatchDog);
    pc.printf("\r\n");
    while(1) {
        led1 = ! led1;
        wait(0.2);
     }
    
 
 }

Files at this revision

API Documentation at this revision

Comitter:
cmkachur
Date:
Wed Jun 24 18:18:37 2015 +0000
Parent:
11:ee2e7a573227
Child:
13:e180d3e79c58
Commit message:
Tune the antenna before calibrating the RCO per the data sheet. The calibrateRCO() method was modified to not overwrite the value of the tuning capacitor from the antenna tune method.

Changed in this revision

AS3935.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/AS3935.cpp	Wed Jun 24 16:36:47 2015 +0000
+++ b/AS3935.cpp	Wed Jun 24 18:18:37 2015 +0000
@@ -222,7 +222,7 @@
     intrIn.rise(intrPulseCntr); 
     
     _SPITransfer2(0x3D, 0x96);                        // send command to calibrate the internal RC oscillators           
-    _SPITransfer2(8, 0x20);                           // put TRCO on the IRQ line for measurement   
+    registerWrite(AS3935_DISP_TRCO, 1);               // put TRCO on the IRQ line for measurement   
     wait_ms(20);                                      // wait for the chip to output the frequency, ususally ~2 ms 
     
     pulseTimer.reset(); 
@@ -234,13 +234,14 @@
     {
       timeNow = pulseTimer.read_ms(); 
     }
-    _SPITransfer2(8, 0);                              // stop the output of the frequncy on IRQ line       
+    
+    registerWrite(AS3935_DISP_TRCO, 0);               // stop the output of the frequncy on IRQ line       
     measFreq = sgIntrPulseCount << 1;                 // calculate the measure frequency based upon period of capture and freq scaler
 
     printf("timer RCO: %ld Hz\n\r", measFreq);
     
-    trco=registerRead(0x3A, 0x80);                      // Read out Calibration of TRCO done
-    srco=registerRead(0x3B, 0x80);                      // Readout Calibration of SRCO done
+    trco=registerRead(0x3A, 0x80);                    // Read out Calibration of TRCO done
+    srco=registerRead(0x3B, 0x80);                    // Readout Calibration of SRCO done
     if(trco != 0x00 && srco != 0x00)
     {
         rc = 1;
@@ -285,6 +286,7 @@
       {
         timeNow = pulseTimer.read_ms(); 
       }
+      
       _SPITransfer2(8, 0x00);                           // stop the output of the frequncy on IRQ line 
       
       measFreq = sgIntrPulseCount << 7;                 // calulate the measure frequency based upon period of capture and freq scaler