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); } }
Revision 12:ac6ba62a31c6, committed 2015-06-24
- 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