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:
- 2:3b3b435ca8d9
- Parent:
- 1:f2d9ed33c276
- Child:
- 3:c536a9aa2a1c
diff -r f2d9ed33c276 -r 3b3b435ca8d9 AS3935.cpp --- a/AS3935.cpp Thu Jun 11 15:47:29 2015 +0000 +++ b/AS3935.cpp Thu Jun 11 15:53:51 2015 +0000 @@ -21,18 +21,6 @@ #include "AS3935.h" #include "pinmap.h" -#if 0 -AS3935::AS3935(PinName sda, PinName scl, int adress, int hz): i2c(sda, scl), _adress(adress), m_FREQ(hz) { - - wait_ms(11); - //Configure the SPI bus - m_Spi.format(8, 1); -} - //~AS3935(){ - - //} -#endif -#if 1 AS3935::AS3935(PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name, PinName cd, int hz) : m_Spi(mosi, miso, sclk), m_Cs(cs, 1), m_Cd(cd), m_FREQ(hz) { @@ -42,15 +30,12 @@ //Configure the SPI bus m_Spi.format(8, 1); } -#endif - char AS3935::_SPITransfer2(char high, char low) { m_Cs = 0; m_Spi.write(high); char regval = m_Spi.write(low); - // printf("raw transfer for reg %x is 0x%02x\r\n", high, regval); m_Cs = 1; return regval; } @@ -64,19 +49,12 @@ char AS3935::_ffsz(char mask) { char i = 0; - //char temp; - + while(!(mask & 1)) { - //if (!(mask & 1)) { - mask >>= 1; + mask >>= 1; i++; - //} } - //if (mask){ - // for (i = 1; ~mask & 1 ; i++) { - // mask >>= 1; - // } - // } + return i; } @@ -86,13 +64,7 @@ char regval; regval = _rawRegisterRead(reg); regval &= ~(mask); - //if (mask){ - regval |= (data << (_ffsz(mask))); - // } - //else { - // regval |= data; - // } - + regval |= (data << (_ffsz(mask))); m_Cs = 0; m_Spi.write(reg); m_Spi.write(regval); @@ -140,93 +112,93 @@ } int AS3935::interruptSource() - { +{ return registerRead(AS3935_INT); - } +} void AS3935::disableDisturbers() - { +{ registerWrite(AS3935_MASK_DIST,1); - } +} void AS3935::enableDisturbers() - { +{ registerWrite(AS3935_MASK_DIST,0); - } +} int AS3935::getMinimumLightnings() - { +{ return registerRead(AS3935_MIN_NUM_LIGH); - } +} int AS3935::setMinimumLightnings(int minlightning) - { +{ registerWrite(AS3935_MIN_NUM_LIGH,minlightning); return getMinimumLightnings(); - } +} int AS3935::lightningDistanceKm() - { +{ return registerRead(AS3935_DISTANCE); - } +} void AS3935::setIndoors() - { +{ registerWrite(AS3935_AFE_GB,AS3935_AFE_INDOOR); - } +} void AS3935::setOutdoors() - { +{ registerWrite(AS3935_AFE_GB,AS3935_AFE_OUTDOOR); - } +} int AS3935::getNoiseFloor() - { +{ return registerRead(AS3935_NF_LEV); - } +} int AS3935::setNoiseFloor(int noisefloor) - { +{ registerWrite(AS3935_NF_LEV,noisefloor); return getNoiseFloor(); - } +} int AS3935::getSpikeRejection() - { +{ return registerRead(AS3935_SREJ); - } +} int AS3935::setSpikeRejection(int srej) - { +{ registerWrite(AS3935_SREJ, srej); return getSpikeRejection(); - } +} int AS3935::getWatchdogThreshold() - { +{ return registerRead(AS3935_WDTH); - } +} int AS3935::setWatchdogThreshold(int wdth) - { +{ registerWrite(AS3935_WDTH,wdth); return getWatchdogThreshold(); - } +} int AS3935::getTuneCap() - { +{ return registerRead(AS3935_TUN_CAP); - } +} int AS3935::setTuneCap(int cap) - { +{ registerWrite(AS3935_TUN_CAP,cap); - return getTuneCap(); - } + return getTuneCap(); +} void AS3935::clearStats() - { +{ registerWrite(AS3935_CL_STAT,1); registerWrite(AS3935_CL_STAT,0); registerWrite(AS3935_CL_STAT,1); - } \ No newline at end of file +} \ No newline at end of file