AS3935 Lightning sensor library
Fork of AS3935 by
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); } }
Diff: AS3935.cpp
- Revision:
- 15:afbf7ba667e7
- Parent:
- 12:ac6ba62a31c6
diff -r 8e5f2cf08318 -r afbf7ba667e7 AS3935.cpp --- 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; }