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:
Mon Dec 14 22:18:11 2015 +0000
Parent:
14:8e5f2cf08318
Commit message:
Read energy registers per the data sheet.

Changed in this revision

AS3935.cpp Show annotated file Show diff for this revision Revisions of this file
AS3935.h Show annotated file Show diff for this revision Revisions of this file
--- a/AS3935.cpp	Tue Sep 22 23:05:39 2015 +0000
+++ b/AS3935.cpp	Mon Dec 14 22:18:11 2015 +0000
@@ -309,16 +309,36 @@
     return measFreqBest; 
 }
 
+
+void AS3935::_rawRegisterRead(unsigned char reg, unsigned char mask, unsigned char *rxBuff, unsigned char numBytes)
+{
+    mask = mask; // unused 
+    
+    m_Cs = 0;
+    m_Spi.write((reg & 0x3F) | 0x40);
+    
+    for (unsigned char idx = 0; idx < numBytes; ++idx) 
+    {
+        rxBuff[idx] = m_Spi.write(0);
+    }
+    m_Cs = 1;
+}
+
 unsigned long AS3935::getEnergy(void)
 {
     unsigned long retVal; 
     unsigned char rxBuff[3];
     
+    #if 0 
     rxBuff[0] = registerRead(AS3935_S_LIG_L); 
     rxBuff[1] = registerRead(AS3935_S_LIG_M); 
     rxBuff[2] = registerRead(AS3935_S_LIG_MM); 
+    #else 
+    _rawRegisterRead(AS3935_S_LIG_L, rxBuff, 3); 
+    #endif 
     
     retVal = ((unsigned long)rxBuff[2] << 16) | ((unsigned long)rxBuff[1] << 8) | (unsigned long)rxBuff[0]; 
+    retVal &= 0x001fffff; 
     return retVal; 
 }
 
--- a/AS3935.h	Tue Sep 22 23:05:39 2015 +0000
+++ b/AS3935.h	Mon Dec 14 22:18:11 2015 +0000
@@ -197,6 +197,7 @@
     int _adress;
     FunctionPointer _func;
     char _rawRegisterRead(char reg);
+    void _rawRegisterRead(unsigned char reg, unsigned char mask, unsigned char *rxBuff, unsigned char numBytes);
     char _SPITransfer2(char high, char low);
     char _ffsz(char mask);