Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: NetworkServices W5500Interface
main.cpp@0:9d0945119ba4, 2017-02-13 (annotated)
- Committer:
- amccartney
- Date:
- Mon Feb 13 19:50:38 2017 +0000
- Revision:
- 0:9d0945119ba4
- Child:
- 1:f857c10c3cd2
Everything working including auto-tune for attenna
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| amccartney | 0:9d0945119ba4 | 1 | #include "mbed.h" |
| amccartney | 0:9d0945119ba4 | 2 | #include "Oled_C.h" |
| amccartney | 0:9d0945119ba4 | 3 | #include "AS3935.h" |
| amccartney | 0:9d0945119ba4 | 4 | |
| amccartney | 0:9d0945119ba4 | 5 | Serial pc(USBTX, USBRX); |
| amccartney | 0:9d0945119ba4 | 6 | InterruptIn AS3935(PTB16); // AS3935 INT pin |
| amccartney | 0:9d0945119ba4 | 7 | DigitalIn sw2(SW2); |
| amccartney | 0:9d0945119ba4 | 8 | DigitalIn sw3(SW3); |
| amccartney | 0:9d0945119ba4 | 9 | //InterruptIn AS3935(PTC1); //SW2 |
| amccartney | 0:9d0945119ba4 | 10 | |
| amccartney | 0:9d0945119ba4 | 11 | char inOutSetting = 0; |
| amccartney | 0:9d0945119ba4 | 12 | char detectFlag = 0; |
| amccartney | 0:9d0945119ba4 | 13 | |
| amccartney | 0:9d0945119ba4 | 14 | void check_sw3(void) |
| amccartney | 0:9d0945119ba4 | 15 | { |
| amccartney | 0:9d0945119ba4 | 16 | if (sw3 == 0) { |
| amccartney | 0:9d0945119ba4 | 17 | wait(1); |
| amccartney | 0:9d0945119ba4 | 18 | if (inOutSetting == 0) { |
| amccartney | 0:9d0945119ba4 | 19 | AS3935setOutdoors(); |
| amccartney | 0:9d0945119ba4 | 20 | AS3935checkInOut(); |
| amccartney | 0:9d0945119ba4 | 21 | inOutSetting = 1; |
| amccartney | 0:9d0945119ba4 | 22 | } else if (inOutSetting == 1) { |
| amccartney | 0:9d0945119ba4 | 23 | AS3935setIndoors(); |
| amccartney | 0:9d0945119ba4 | 24 | AS3935checkInOut(); |
| amccartney | 0:9d0945119ba4 | 25 | inOutSetting = 0; |
| amccartney | 0:9d0945119ba4 | 26 | } |
| amccartney | 0:9d0945119ba4 | 27 | } |
| amccartney | 0:9d0945119ba4 | 28 | } |
| amccartney | 0:9d0945119ba4 | 29 | |
| amccartney | 0:9d0945119ba4 | 30 | void AS3935IntSrv(void) //Interrupt handler for the AS3935 |
| amccartney | 0:9d0945119ba4 | 31 | { |
| amccartney | 0:9d0945119ba4 | 32 | AS3935.disable_irq(); |
| amccartney | 0:9d0945119ba4 | 33 | detectFlag = 1; |
| amccartney | 0:9d0945119ba4 | 34 | } |
| amccartney | 0:9d0945119ba4 | 35 | |
| amccartney | 0:9d0945119ba4 | 36 | int main() |
| amccartney | 0:9d0945119ba4 | 37 | { |
| amccartney | 0:9d0945119ba4 | 38 | char returnVal; |
| amccartney | 0:9d0945119ba4 | 39 | char outStringTemp[256]; |
| amccartney | 0:9d0945119ba4 | 40 | char intVal = 0; |
| amccartney | 0:9d0945119ba4 | 41 | char display = 0; |
| amccartney | 0:9d0945119ba4 | 42 | char distance; |
| amccartney | 0:9d0945119ba4 | 43 | long int energy; |
| amccartney | 0:9d0945119ba4 | 44 | float LCOfreq; |
| amccartney | 0:9d0945119ba4 | 45 | int i = 1; |
| amccartney | 0:9d0945119ba4 | 46 | |
| amccartney | 0:9d0945119ba4 | 47 | InitMCU(); |
| amccartney | 0:9d0945119ba4 | 48 | pc.baud(115200); |
| amccartney | 0:9d0945119ba4 | 49 | pc.printf("\n\nFRDM-K22F board AS3935 Test.\n"); |
| amccartney | 0:9d0945119ba4 | 50 | |
| amccartney | 0:9d0945119ba4 | 51 | OLED_C_Init(); |
| amccartney | 0:9d0945119ba4 | 52 | Black_Background(); |
| amccartney | 0:9d0945119ba4 | 53 | OLED_C_Image(lightning,0,0,94,94); |
| amccartney | 0:9d0945119ba4 | 54 | wait(1); |
| amccartney | 0:9d0945119ba4 | 55 | White_Background(); |
| amccartney | 0:9d0945119ba4 | 56 | OLED_C_Image(logo,0,80,95,14); |
| amccartney | 0:9d0945119ba4 | 57 | strConstRamCpy(CRam1,"Powervar"); |
| amccartney | 0:9d0945119ba4 | 58 | Draw_Text(CRam1,1,77,0x0418,1); |
| amccartney | 0:9d0945119ba4 | 59 | Draw_line(0, 65, 95, 65, 0x8410); |
| amccartney | 0:9d0945119ba4 | 60 | |
| amccartney | 0:9d0945119ba4 | 61 | AS3935spiInit(); |
| amccartney | 0:9d0945119ba4 | 62 | LCOfreq = AS3935MeasureLCOFreq(); |
| amccartney | 0:9d0945119ba4 | 63 | pc.printf("LCO freq: %.0f Hz\n",LCOfreq); |
| amccartney | 0:9d0945119ba4 | 64 | if (LCOfreq > 500000) { |
| amccartney | 0:9d0945119ba4 | 65 | while (LCOfreq > 500000) { |
| amccartney | 0:9d0945119ba4 | 66 | returnVal = AS3935setTuneCap(i); |
| amccartney | 0:9d0945119ba4 | 67 | LCOfreq = AS3935MeasureLCOFreq(); |
| amccartney | 0:9d0945119ba4 | 68 | pc.printf("Capacitor Value: %dpF\n",i*8); |
| amccartney | 0:9d0945119ba4 | 69 | pc.printf("LCO freq: %.0f Hz\n\n",LCOfreq); |
| amccartney | 0:9d0945119ba4 | 70 | i++; |
| amccartney | 0:9d0945119ba4 | 71 | } |
| amccartney | 0:9d0945119ba4 | 72 | } else { |
| amccartney | 0:9d0945119ba4 | 73 | while (LCOfreq < 500000) { |
| amccartney | 0:9d0945119ba4 | 74 | returnVal = AS3935setTuneCap(i); |
| amccartney | 0:9d0945119ba4 | 75 | LCOfreq = AS3935MeasureLCOFreq(); |
| amccartney | 0:9d0945119ba4 | 76 | pc.printf("Capacitor Value: %dpF\n",i*8); |
| amccartney | 0:9d0945119ba4 | 77 | pc.printf("LCO freq: %.0f Hz\n\n",LCOfreq); |
| amccartney | 0:9d0945119ba4 | 78 | i++; |
| amccartney | 0:9d0945119ba4 | 79 | } |
| amccartney | 0:9d0945119ba4 | 80 | } |
| amccartney | 0:9d0945119ba4 | 81 | wait(1); |
| amccartney | 0:9d0945119ba4 | 82 | AS3935powerUp(); |
| amccartney | 0:9d0945119ba4 | 83 | AS3935enableDisturbers(); |
| amccartney | 0:9d0945119ba4 | 84 | AS3935setIndoors(); |
| amccartney | 0:9d0945119ba4 | 85 | //AS3935setOutdoors(); |
| amccartney | 0:9d0945119ba4 | 86 | returnVal = AS3935setNoiseFloor(2); |
| amccartney | 0:9d0945119ba4 | 87 | returnVal = AS3935setSpikeRejection(2); |
| amccartney | 0:9d0945119ba4 | 88 | returnVal = AS3935setWatchdogThreshold(4); |
| amccartney | 0:9d0945119ba4 | 89 | returnVal = AS3935getMinimumLightnings(); |
| amccartney | 0:9d0945119ba4 | 90 | AS3935checkInOut(); |
| amccartney | 0:9d0945119ba4 | 91 | pc.printf("Minimum Lightnings: %x\n",returnVal); |
| amccartney | 0:9d0945119ba4 | 92 | returnVal = AS3935getNoiseFloor(); |
| amccartney | 0:9d0945119ba4 | 93 | pc.printf("Noise Floor: %x\n",returnVal); |
| amccartney | 0:9d0945119ba4 | 94 | returnVal = AS3935getSpikeRejection(); |
| amccartney | 0:9d0945119ba4 | 95 | pc.printf("Spike Rejection: %x\n",returnVal); |
| amccartney | 0:9d0945119ba4 | 96 | returnVal = AS3935getWatchdogThreshold(); |
| amccartney | 0:9d0945119ba4 | 97 | pc.printf("Watchdog Threshold: %x\n",returnVal); |
| amccartney | 0:9d0945119ba4 | 98 | AS3935IntSrv(); //make sure the the int bit is cleared |
| amccartney | 0:9d0945119ba4 | 99 | returnVal = AS3935getTuneCap(); |
| amccartney | 0:9d0945119ba4 | 100 | pc.printf("Capacitor Value: %dpF\n",returnVal*8); |
| amccartney | 0:9d0945119ba4 | 101 | |
| amccartney | 0:9d0945119ba4 | 102 | wait(1); |
| amccartney | 0:9d0945119ba4 | 103 | // DDRAM_access(); |
| amccartney | 0:9d0945119ba4 | 104 | |
| amccartney | 0:9d0945119ba4 | 105 | |
| amccartney | 0:9d0945119ba4 | 106 | //wait(1); |
| amccartney | 0:9d0945119ba4 | 107 | //AS3935registerWrite(AS3935_LCO_FDIV,0); |
| amccartney | 0:9d0945119ba4 | 108 | //AS3935registerWrite(AS3935_DISP_LCO,1); |
| amccartney | 0:9d0945119ba4 | 109 | //pc.printf("\nLCO on INT pin\n"); |
| amccartney | 0:9d0945119ba4 | 110 | //wait(5); |
| amccartney | 0:9d0945119ba4 | 111 | //while (sw3 == 1) { |
| amccartney | 0:9d0945119ba4 | 112 | // |
| amccartney | 0:9d0945119ba4 | 113 | // } |
| amccartney | 0:9d0945119ba4 | 114 | //AS3935registerWrite(AS3935_DISP_LCO,0); |
| amccartney | 0:9d0945119ba4 | 115 | AS3935.rise(&AS3935IntSrv); |
| amccartney | 0:9d0945119ba4 | 116 | AS3935.enable_irq(); |
| amccartney | 0:9d0945119ba4 | 117 | pc.printf("\nNormal Operation Started\n"); |
| amccartney | 0:9d0945119ba4 | 118 | while (true) { |
| amccartney | 0:9d0945119ba4 | 119 | intVal = AS3935.read(); |
| amccartney | 0:9d0945119ba4 | 120 | if (detectFlag == 1) { |
| amccartney | 0:9d0945119ba4 | 121 | detectFlag = 0; |
| amccartney | 0:9d0945119ba4 | 122 | wait(0.005); |
| amccartney | 0:9d0945119ba4 | 123 | source = AS3935interruptSource(); |
| amccartney | 0:9d0945119ba4 | 124 | source = source & 0x0F; |
| amccartney | 0:9d0945119ba4 | 125 | pc.printf("Source: 0x%02X\n",source); |
| amccartney | 0:9d0945119ba4 | 126 | if (source == 0x08) { |
| amccartney | 0:9d0945119ba4 | 127 | display = 3; |
| amccartney | 0:9d0945119ba4 | 128 | distance = AS3935lightningDistanceKm(); |
| amccartney | 0:9d0945119ba4 | 129 | energy = Thunder_Read_Energy(); |
| amccartney | 0:9d0945119ba4 | 130 | pc.printf("Lightning Detected!!!\n"); |
| amccartney | 0:9d0945119ba4 | 131 | pc.printf("Distance: %d\n",distance); |
| amccartney | 0:9d0945119ba4 | 132 | pc.printf("Energy: %lu\n",energy); |
| amccartney | 0:9d0945119ba4 | 133 | OLED_C_Image(strike,0,25,19,19); |
| amccartney | 0:9d0945119ba4 | 134 | strConstRamCpy(CRam1,"Lightning"); |
| amccartney | 0:9d0945119ba4 | 135 | Draw_Text(CRam1,20,45,0x0000,1); |
| amccartney | 0:9d0945119ba4 | 136 | snprintf( outStringTemp, 256, "@ %d km ", distance); |
| amccartney | 0:9d0945119ba4 | 137 | strConstRamCpy(CRam1,outStringTemp); |
| amccartney | 0:9d0945119ba4 | 138 | Draw_Text(CRam1,20,35,0x0000,1); |
| amccartney | 0:9d0945119ba4 | 139 | snprintf( outStringTemp, 256, "Energy %lu", energy); |
| amccartney | 0:9d0945119ba4 | 140 | strConstRamCpy(CRam1,outStringTemp); |
| amccartney | 0:9d0945119ba4 | 141 | Draw_Text(CRam1,10,25,0x0000,1); |
| amccartney | 0:9d0945119ba4 | 142 | } else if (source == 0x01) { |
| amccartney | 0:9d0945119ba4 | 143 | pc.printf("Noise Detected\n"); |
| amccartney | 0:9d0945119ba4 | 144 | strConstRamCpy(CRam1,"Noise Det."); |
| amccartney | 0:9d0945119ba4 | 145 | Draw_Text(CRam1,21,10,0x0000,1); |
| amccartney | 0:9d0945119ba4 | 146 | } else if (source == 0x00) { |
| amccartney | 0:9d0945119ba4 | 147 | distance = AS3935lightningDistanceKm(); |
| amccartney | 0:9d0945119ba4 | 148 | pc.printf("Distance updated: %d\n",distance); |
| amccartney | 0:9d0945119ba4 | 149 | } else if (source == 0x04) { |
| amccartney | 0:9d0945119ba4 | 150 | pc.printf("Disturber Detected\n"); |
| amccartney | 0:9d0945119ba4 | 151 | } |
| amccartney | 0:9d0945119ba4 | 152 | AS3935.enable_irq(); |
| amccartney | 0:9d0945119ba4 | 153 | } |
| amccartney | 0:9d0945119ba4 | 154 | check_sw3(); |
| amccartney | 0:9d0945119ba4 | 155 | strConstRamCpy(CRam1,"*"); |
| amccartney | 0:9d0945119ba4 | 156 | Draw_Text(CRam1,1,10,0x0000,1); |
| amccartney | 0:9d0945119ba4 | 157 | wait(0.5); |
| amccartney | 0:9d0945119ba4 | 158 | // intVal = AS3935.read(); |
| amccartney | 0:9d0945119ba4 | 159 | // if (intVal == 1) { |
| amccartney | 0:9d0945119ba4 | 160 | // source = AS3935interruptSource(); //Likely we missed an interrupt |
| amccartney | 0:9d0945119ba4 | 161 | // pc.printf("Missed Interrupt\n"); |
| amccartney | 0:9d0945119ba4 | 162 | // AS3935.enable_irq(); |
| amccartney | 0:9d0945119ba4 | 163 | // } |
| amccartney | 0:9d0945119ba4 | 164 | check_sw3(); |
| amccartney | 0:9d0945119ba4 | 165 | strConstRamCpy(CRam1," "); |
| amccartney | 0:9d0945119ba4 | 166 | Draw_Text(CRam1,1,10,0x0000,1); |
| amccartney | 0:9d0945119ba4 | 167 | wait(0.5); |
| amccartney | 0:9d0945119ba4 | 168 | if (display == 0){ |
| amccartney | 0:9d0945119ba4 | 169 | OLED_C_Image(listening,0,25,19,19); |
| amccartney | 0:9d0945119ba4 | 170 | strConstRamCpy(CRam1," "); |
| amccartney | 0:9d0945119ba4 | 171 | Draw_Text(CRam1,20,45,0x0000,1); |
| amccartney | 0:9d0945119ba4 | 172 | snprintf( outStringTemp, 256, "Listening..."); |
| amccartney | 0:9d0945119ba4 | 173 | strConstRamCpy(CRam1,outStringTemp); |
| amccartney | 0:9d0945119ba4 | 174 | Draw_Text(CRam1,20,35,0x0000,1); |
| amccartney | 0:9d0945119ba4 | 175 | snprintf( outStringTemp, 256, " "); |
| amccartney | 0:9d0945119ba4 | 176 | strConstRamCpy(CRam1,outStringTemp); |
| amccartney | 0:9d0945119ba4 | 177 | Draw_Text(CRam1,10,25,0x0000,1); |
| amccartney | 0:9d0945119ba4 | 178 | } else { --display;} |
| amccartney | 0:9d0945119ba4 | 179 | strConstRamCpy(CRam1," "); |
| amccartney | 0:9d0945119ba4 | 180 | Draw_Text(CRam1,21,10,0x0000,1); |
| amccartney | 0:9d0945119ba4 | 181 | //AS3935registerWrite(AS3935_DISP_LCO,1); |
| amccartney | 0:9d0945119ba4 | 182 | } |
| amccartney | 0:9d0945119ba4 | 183 | |
| amccartney | 0:9d0945119ba4 | 184 | } |