basic lightning detector with gps and sd card logging

Dependencies:   AS3935 AdafruitGPS SDFileSystem TSI mbed ConfigFile

Committer:
cmkachur
Date:
Wed Jun 24 18:18:43 2015 +0000
Revision:
5:1d4fd419cfb7
Parent:
4:4d26ba1ae0f7
Child:
6:96b0dbe76357
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.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ftagius 0:3328df4c3116 1 #include "mbed.h"
ftagius 0:3328df4c3116 2 #include "GPS.h"
ftagius 0:3328df4c3116 3 #include "main.h"
ftagius 0:3328df4c3116 4 #include "TSISensor.h"
ftagius 0:3328df4c3116 5 #include "SDFileSystem.h"
ftagius 0:3328df4c3116 6 #include "AS3935.h"
ftagius 0:3328df4c3116 7
cmkachur 5:1d4fd419cfb7 8 #define FW_VER 2
cmkachur 4:4d26ba1ae0f7 9
ftagius 3:e3974328d808 10 // frdm-kl25z as3935 connections for spi1
ftagius 0:3328df4c3116 11 // ------------------------------------------------
ftagius 0:3328df4c3116 12 // Header -- kl25z -- SD/MMC
ftagius 0:3328df4c3116 13 // J2-20 -- PTE1 -- MOSI
ftagius 0:3328df4c3116 14 // J9-13 -- PTE4 -- CS
ftagius 0:3328df4c3116 15 // J2-14 -- GND -- Vss (GND)
ftagius 0:3328df4c3116 16 // J9-9 -- PTE2 -- SCK
ftagius 0:3328df4c3116 17 // J9-11 -- PTE3 -- MISO
ftagius 0:3328df4c3116 18
ftagius 0:3328df4c3116 19 AS3935 ld(PTE1, PTE3, PTE2, PTE4, "ld", 1000000); // MOSI, MISO, SCK, CS, SPI bus freq (hz)
ftagius 0:3328df4c3116 20 InterruptIn IntLightning(PTA12); //IRQ AS3935
ftagius 0:3328df4c3116 21
ftagius 0:3328df4c3116 22
ftagius 0:3328df4c3116 23 // frdm-kl25z sd card connections spi0
ftagius 0:3328df4c3116 24 // ------------------------------------------------
ftagius 0:3328df4c3116 25 // Header -- kl25z -- SPI
ftagius 0:3328df4c3116 26 // J2-8 -- PTD2 -- MOSI
ftagius 0:3328df4c3116 27 // J2-6 -- PTD0 -- CS
ftagius 0:3328df4c3116 28 // J9-12 -- GND -- Vss (GND)
ftagius 0:3328df4c3116 29 // J9-4 -- P3V3 -- Vdd (+3.3v)
ftagius 0:3328df4c3116 30 // J2-12 -- PTD1 -- SCK
ftagius 0:3328df4c3116 31 // J9-14 -- GND -- Vss (GND)
ftagius 0:3328df4c3116 32 // J2-10 -- PTD3 -- MISO
ftagius 0:3328df4c3116 33
ftagius 0:3328df4c3116 34 SDFileSystem sd(PTD2, PTD3, PTD1, PTD0, "sd"); // MOSI, MISO, SCK, CS
ftagius 0:3328df4c3116 35
ftagius 0:3328df4c3116 36 Serial pc(USBTX, USBRX);
ftagius 0:3328df4c3116 37 GPS gpsd(PTE20, PTE21);
ftagius 0:3328df4c3116 38 DigitalOut red(LED_RED);
ftagius 0:3328df4c3116 39 DigitalOut green(LED_GREEN);
ftagius 0:3328df4c3116 40 //DigitalOut blue(LED_BLUE); don't use the blue led, due to a board error, writing to the blue led kills spi
ftagius 3:e3974328d808 41 bool debug=false;
ftagius 0:3328df4c3116 42 int day, month,year,hour,minute,seconds;
cmkachur 2:3edb129c60b2 43 void writeLogFile(int interruptSource, int distance, long energy);
ftagius 1:10d2a051285e 44 char logName[]="lightning_data.csv";
ftagius 1:10d2a051285e 45 int rdistance, rinterrupt;
ftagius 1:10d2a051285e 46 char directory[]="/sd/lightning_data";
ftagius 3:e3974328d808 47 int OriginInt=-1;
ftagius 3:e3974328d808 48 int distance=-1;
ftagius 3:e3974328d808 49 long energy=-1;
ftagius 0:3328df4c3116 50
ftagius 0:3328df4c3116 51 void DetectLightning()
ftagius 0:3328df4c3116 52 {
ftagius 0:3328df4c3116 53 OriginInt = ld.interruptSource();
ftagius 3:e3974328d808 54 distance = ld.lightningDistanceKm();
ftagius 3:e3974328d808 55 energy = ld.getEnergy();
ftagius 0:3328df4c3116 56 }
ftagius 0:3328df4c3116 57
cmkachur 2:3edb129c60b2 58 void writeLogFile(int interruptSource, int distance, long energy)
ftagius 0:3328df4c3116 59 {
ftagius 1:10d2a051285e 60 char logFilePath[128];
ftagius 0:3328df4c3116 61 static bool header=false;
ftagius 0:3328df4c3116 62 FILE *fp;
ftagius 1:10d2a051285e 63
ftagius 1:10d2a051285e 64 sprintf(logFilePath, "%s/%s", directory,logName);
ftagius 0:3328df4c3116 65 sd.mount();
ftagius 1:10d2a051285e 66 fp = fopen(logFilePath, "a");
ftagius 0:3328df4c3116 67 if(fp == NULL) {
ftagius 0:3328df4c3116 68 // retry
ftagius 3:e3974328d808 69 wait_ms(200);
ftagius 1:10d2a051285e 70 fp = fopen(logFilePath, "a");
ftagius 0:3328df4c3116 71 if (fp == NULL)
ftagius 0:3328df4c3116 72 {
ftagius 1:10d2a051285e 73 printf("Could not open file %s for writing\r\n",logFilePath);
ftagius 0:3328df4c3116 74 sd.unmount();
ftagius 1:10d2a051285e 75 printf("unmount sd card \r\n");
ftagius 0:3328df4c3116 76 return;
ftagius 0:3328df4c3116 77 }
ftagius 0:3328df4c3116 78 }
ftagius 3:e3974328d808 79 if (debug)
ftagius 3:e3974328d808 80 pc.printf("Opened log file %s\r\n",logFilePath);
ftagius 0:3328df4c3116 81 // write the log file header
ftagius 0:3328df4c3116 82 if (header == false)
ftagius 0:3328df4c3116 83 {
cmkachur 2:3edb129c60b2 84 fprintf(fp,"# date,time,raw timestamp,latitude,longitude,distance,interrupt,energy\r\n");
ftagius 0:3328df4c3116 85 header = true;
ftagius 0:3328df4c3116 86 }
ftagius 0:3328df4c3116 87 // write to the current log file
ftagius 0:3328df4c3116 88 fprintf(fp,"%02d/%02d/20%02d,", gpsd.month, gpsd.day, gpsd.year);
ftagius 0:3328df4c3116 89 fprintf(fp,"%02d:%02d:%02d,", gpsd.hour, gpsd.minute, gpsd.seconds);
ftagius 0:3328df4c3116 90 fprintf(fp,"%7.0f,",gpsd.timef);
ftagius 0:3328df4c3116 91 fprintf(fp,"%5.7f,%5.7f,", gpsd.lat_deg, gpsd.lon_deg);
ftagius 1:10d2a051285e 92 fprintf(fp,"%d,",distance);
cmkachur 2:3edb129c60b2 93 fprintf(fp,"%d,",interruptSource);
cmkachur 2:3edb129c60b2 94 fprintf(fp,"%ld",energy);
ftagius 0:3328df4c3116 95 fprintf(fp,"\r\n");
ftagius 0:3328df4c3116 96 fflush(fp);
ftagius 0:3328df4c3116 97 f_sync((FIL*)fp);
ftagius 0:3328df4c3116 98 fclose(fp);
ftagius 0:3328df4c3116 99 sd.unmount();
ftagius 3:e3974328d808 100 pc.printf("Event: ");
ftagius 3:e3974328d808 101 switch (interruptSource)
ftagius 3:e3974328d808 102 {
ftagius 3:e3974328d808 103 case 1:
ftagius 3:e3974328d808 104 pc.printf("Noise level too high\r\n");
ftagius 3:e3974328d808 105 break;
ftagius 3:e3974328d808 106 case 4:
ftagius 3:e3974328d808 107 pc.printf("Disturber\r\n");
ftagius 3:e3974328d808 108 break;
ftagius 3:e3974328d808 109 case 8:
ftagius 3:e3974328d808 110 pc.printf("Lightning detection, distance=%dkm energy=%ld\r\n", distance, energy);
ftagius 3:e3974328d808 111 ld.clearStats();
ftagius 3:e3974328d808 112 break;
ftagius 3:e3974328d808 113 default:
ftagius 3:e3974328d808 114 pc.printf("Unknown interrupt %d\r\n", OriginInt);
ftagius 3:e3974328d808 115
ftagius 3:e3974328d808 116 }
ftagius 3:e3974328d808 117
ftagius 3:e3974328d808 118 if (debug)
ftagius 3:e3974328d808 119 pc.printf("Closed log file %s\r\n",logFilePath);
ftagius 0:3328df4c3116 120 }
ftagius 0:3328df4c3116 121
cmkachur 4:4d26ba1ae0f7 122
cmkachur 4:4d26ba1ae0f7 123 void writeCfgFile(unsigned char *pBuff, unsigned char buffLen, unsigned char fwVer)
cmkachur 4:4d26ba1ae0f7 124 {
cmkachur 4:4d26ba1ae0f7 125 char cfgFilePath[128];
cmkachur 4:4d26ba1ae0f7 126 FILE *fp;
cmkachur 4:4d26ba1ae0f7 127 unsigned char cnt = 0;
cmkachur 4:4d26ba1ae0f7 128
cmkachur 4:4d26ba1ae0f7 129 sprintf(cfgFilePath, "%s/%s", directory, "config_data.csv");
cmkachur 4:4d26ba1ae0f7 130 sd.mount();
cmkachur 4:4d26ba1ae0f7 131 fp = fopen(cfgFilePath, "w");
cmkachur 4:4d26ba1ae0f7 132 if(fp == NULL) {
cmkachur 4:4d26ba1ae0f7 133 // retry
cmkachur 4:4d26ba1ae0f7 134 wait_ms(200);
cmkachur 4:4d26ba1ae0f7 135 fp = fopen(cfgFilePath, "w");
cmkachur 4:4d26ba1ae0f7 136 if (fp == NULL)
cmkachur 4:4d26ba1ae0f7 137 {
cmkachur 4:4d26ba1ae0f7 138 printf("Could not open file %s for writing\r\n",cfgFilePath);
cmkachur 4:4d26ba1ae0f7 139 sd.unmount();
cmkachur 4:4d26ba1ae0f7 140 printf("unmount sd card \r\n");
cmkachur 4:4d26ba1ae0f7 141 return;
cmkachur 4:4d26ba1ae0f7 142 }
cmkachur 4:4d26ba1ae0f7 143 }
cmkachur 4:4d26ba1ae0f7 144 if (debug)
cmkachur 4:4d26ba1ae0f7 145 pc.printf("Opened log file %s\r\n",cfgFilePath);
cmkachur 4:4d26ba1ae0f7 146
cmkachur 4:4d26ba1ae0f7 147 // write the header
cmkachur 4:4d26ba1ae0f7 148 fprintf(fp,"# FW_VER,REG0,REG1,REG2,REG3,REG4,REG5,REG6,REG7,REG8\r\n");
cmkachur 4:4d26ba1ae0f7 149
cmkachur 4:4d26ba1ae0f7 150 // write the firmware version
cmkachur 4:4d26ba1ae0f7 151 fprintf(fp,"%d,", fwVer);
cmkachur 4:4d26ba1ae0f7 152
cmkachur 4:4d26ba1ae0f7 153 // write all the configuration registers
cmkachur 4:4d26ba1ae0f7 154 for (cnt = 0; cnt < buffLen && cnt < MAX_CONFIG_REGS; ++cnt)
cmkachur 4:4d26ba1ae0f7 155 fprintf(fp,"0x%x,", pBuff[cnt]);
cmkachur 4:4d26ba1ae0f7 156
cmkachur 4:4d26ba1ae0f7 157 fflush(fp);
cmkachur 4:4d26ba1ae0f7 158 f_sync((FIL*)fp);
cmkachur 4:4d26ba1ae0f7 159 fclose(fp);
cmkachur 4:4d26ba1ae0f7 160 sd.unmount();
cmkachur 4:4d26ba1ae0f7 161
cmkachur 4:4d26ba1ae0f7 162 if (debug)
cmkachur 4:4d26ba1ae0f7 163 pc.printf("Closed cfg file %s\r\n",cfgFilePath);
cmkachur 4:4d26ba1ae0f7 164 }
cmkachur 4:4d26ba1ae0f7 165
cmkachur 4:4d26ba1ae0f7 166
cmkachur 4:4d26ba1ae0f7 167
ftagius 0:3328df4c3116 168 int main()
ftagius 0:3328df4c3116 169 {
cmkachur 4:4d26ba1ae0f7 170 unsigned char regBuff[MAX_CONFIG_REGS];
ftagius 0:3328df4c3116 171 char c;
ftagius 0:3328df4c3116 172 Timer refresh_Timer; //sets up a timer for use in loop; how often do we print GPS info?
ftagius 0:3328df4c3116 173 const int refresh_Time = 1000; //refresh time in ms
ftagius 0:3328df4c3116 174 TSISensor tsi; // touch slider
ftagius 0:3328df4c3116 175 unsigned long measFreq;
ftagius 1:10d2a051285e 176 rdistance=-1;
ftagius 1:10d2a051285e 177 rinterrupt=-1;
ftagius 0:3328df4c3116 178 pc.baud(9600);
ftagius 0:3328df4c3116 179 // initializations for gps
ftagius 0:3328df4c3116 180 green = 1;
ftagius 0:3328df4c3116 181 gpsd.setBaud(9600);
ftagius 0:3328df4c3116 182 gpsd.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
ftagius 0:3328df4c3116 183 gpsd.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);
ftagius 0:3328df4c3116 184 gpsd.sendCommand(PGCMD_ANTENNA);
ftagius 0:3328df4c3116 185 gpsd.day=01;
ftagius 0:3328df4c3116 186 gpsd.month=01;
ftagius 0:3328df4c3116 187 gpsd.year=15;
ftagius 0:3328df4c3116 188 gpsd.hour=1;
ftagius 0:3328df4c3116 189 gpsd.minute=1;
ftagius 0:3328df4c3116 190 gpsd.seconds=1;
ftagius 0:3328df4c3116 191 red = 1;
ftagius 0:3328df4c3116 192 green = 1;
ftagius 3:e3974328d808 193 pc.printf("Touch slider to start lightning detector application\r\n");
ftagius 0:3328df4c3116 194 while(1) {
ftagius 0:3328df4c3116 195 green = 1; // turn led off
ftagius 0:3328df4c3116 196 wait_ms(200);
ftagius 0:3328df4c3116 197 if (tsi.readPercentage())
ftagius 0:3328df4c3116 198 break;
ftagius 0:3328df4c3116 199 green = 0; // turn led on
ftagius 0:3328df4c3116 200 wait_ms(200);
ftagius 0:3328df4c3116 201 if (tsi.readPercentage())
ftagius 0:3328df4c3116 202 break;
ftagius 0:3328df4c3116 203 }
ftagius 0:3328df4c3116 204
ftagius 3:e3974328d808 205 pc.printf("\r\nInitialize lightning detector\r\n");
ftagius 0:3328df4c3116 206 //initializations for lightning detector
ftagius 0:3328df4c3116 207 ld.init();
ftagius 0:3328df4c3116 208 ld.clearStats();
ftagius 1:10d2a051285e 209
cmkachur 5:1d4fd419cfb7 210 /* The precision of the calibration will depend on the
cmkachur 5:1d4fd419cfb7 211 accuracy of the resonance frequency of the antenna. It is
cmkachur 5:1d4fd419cfb7 212 recommended to first trim the receiver antenna before the
cmkachur 5:1d4fd419cfb7 213 calibration of both oscillators is done.
cmkachur 5:1d4fd419cfb7 214 */
cmkachur 5:1d4fd419cfb7 215 measFreq = ld.tuneAntenna(IntLightning);
cmkachur 2:3edb129c60b2 216 ld.calibrateRCOs(IntLightning);
ftagius 1:10d2a051285e 217
ftagius 1:10d2a051285e 218 ld.setOutdoors();
ftagius 0:3328df4c3116 219 ld.setMinimumLightnings(0);
ftagius 0:3328df4c3116 220 ld.setSpikeRejection(2);
ftagius 0:3328df4c3116 221 ld.setNoiseFloor(2);
cmkachur 4:4d26ba1ae0f7 222
ftagius 0:3328df4c3116 223 ld.enableDisturbers();
ftagius 0:3328df4c3116 224 ld.setWatchdogThreshold(4);
ftagius 0:3328df4c3116 225 IntLightning.rise(&DetectLightning);
ftagius 0:3328df4c3116 226 int MinBlysk = ld.getMinimumLightnings();
ftagius 0:3328df4c3116 227 int Noise = ld.getNoiseFloor();
ftagius 0:3328df4c3116 228 int TuneCap = ld.getTuneCap();
ftagius 0:3328df4c3116 229 int SpikeRej = ld.getSpikeRejection();
ftagius 0:3328df4c3116 230 int WatchDog = ld.getWatchdogThreshold();
ftagius 0:3328df4c3116 231
ftagius 3:e3974328d808 232 pc.printf("\r\n Min wylad: %i", MinBlysk);
ftagius 0:3328df4c3116 233 pc.printf("\r\n");
ftagius 0:3328df4c3116 234 pc.printf(" Gain: 0x%02x\r\n",ld.getGain());
ftagius 0:3328df4c3116 235 pc.printf(" Noise: %i", Noise);
ftagius 0:3328df4c3116 236 pc.printf("\r\n");
ftagius 0:3328df4c3116 237 pc.printf(" Tune CAP: %i", TuneCap);
ftagius 0:3328df4c3116 238 pc.printf("\r\n");
ftagius 0:3328df4c3116 239 pc.printf(" Spike rej: %i", SpikeRej);
ftagius 0:3328df4c3116 240 pc.printf("\r\n");
ftagius 0:3328df4c3116 241 pc.printf(" Watchdog: %i", WatchDog);
ftagius 0:3328df4c3116 242 pc.printf("\r\n");
ftagius 0:3328df4c3116 243 pc.printf(" LCO calibration: %ld Hz\n\r", measFreq);
ftagius 0:3328df4c3116 244
ftagius 0:3328df4c3116 245
ftagius 0:3328df4c3116 246 refresh_Timer.start(); //starts the clock on the timer
ftagius 0:3328df4c3116 247 //Mount the filesystem
ftagius 0:3328df4c3116 248 sd.mount();
ftagius 0:3328df4c3116 249 mkdir(directory, 0777);
ftagius 1:10d2a051285e 250 sd.unmount();
cmkachur 4:4d26ba1ae0f7 251
cmkachur 4:4d26ba1ae0f7 252 // get a copy of all config registers
cmkachur 4:4d26ba1ae0f7 253 ld.getConfigRegisters(regBuff, sizeof(regBuff));
cmkachur 4:4d26ba1ae0f7 254
cmkachur 4:4d26ba1ae0f7 255 // write to the config file
cmkachur 4:4d26ba1ae0f7 256 writeCfgFile(regBuff, sizeof(regBuff), FW_VER);
ftagius 1:10d2a051285e 257
ftagius 0:3328df4c3116 258 bool gpsFix=false;
ftagius 0:3328df4c3116 259 while (1)
ftagius 0:3328df4c3116 260 {
ftagius 3:e3974328d808 261 if (OriginInt != -1)
ftagius 3:e3974328d808 262 {
ftagius 3:e3974328d808 263 // the ld detector generated an interrupt, log the event
ftagius 3:e3974328d808 264 IntLightning.disable_irq();
ftagius 3:e3974328d808 265 writeLogFile(OriginInt,distance, energy);
ftagius 3:e3974328d808 266 ld.clearStats();
ftagius 3:e3974328d808 267 OriginInt = -1;
ftagius 3:e3974328d808 268 distance = -1;
ftagius 3:e3974328d808 269 energy = -1;
ftagius 3:e3974328d808 270 IntLightning.enable_irq();
ftagius 3:e3974328d808 271 }
ftagius 3:e3974328d808 272
ftagius 0:3328df4c3116 273 c = gpsd.read(); //queries the GPS
ftagius 0:3328df4c3116 274 if (debug)
ftagius 0:3328df4c3116 275 {
ftagius 0:3328df4c3116 276 if (c) {
ftagius 0:3328df4c3116 277 printf("%c", c); //this line will echo the GPS data if not paused
ftagius 0:3328df4c3116 278 continue;
ftagius 0:3328df4c3116 279 }
ftagius 0:3328df4c3116 280 }
ftagius 0:3328df4c3116 281
ftagius 0:3328df4c3116 282 //check if we recieved a new message from GPS, if so, attempt to parse it,
ftagius 0:3328df4c3116 283 if ( gpsd.newNMEAreceived() ) {
ftagius 0:3328df4c3116 284 if ( !gpsd.parse(gpsd.lastNMEA()) ) {
ftagius 0:3328df4c3116 285 continue;
ftagius 0:3328df4c3116 286 }
ftagius 0:3328df4c3116 287 }
ftagius 0:3328df4c3116 288
ftagius 0:3328df4c3116 289 // update globals with the lastest gps time stamp
ftagius 0:3328df4c3116 290 day=gpsd.day;
ftagius 0:3328df4c3116 291 month=gpsd.month;
ftagius 0:3328df4c3116 292 year=gpsd.year;
ftagius 0:3328df4c3116 293 hour=gpsd.hour;
ftagius 0:3328df4c3116 294 minute=gpsd.minute;
ftagius 0:3328df4c3116 295 seconds=gpsd.seconds;
ftagius 0:3328df4c3116 296
ftagius 0:3328df4c3116 297 //check if enough time has passed to warrant printing GPS info to screen
ftagius 0:3328df4c3116 298 //note if refresh_Time is too low or pc.baud is too low, GPS data may be lost during printing
ftagius 0:3328df4c3116 299 if (refresh_Timer.read_ms() >= refresh_Time)
ftagius 0:3328df4c3116 300 {
ftagius 0:3328df4c3116 301 if (gpsd.fix) {
ftagius 0:3328df4c3116 302 // got a gps fix
ftagius 0:3328df4c3116 303 if (gpsFix == false)
ftagius 0:3328df4c3116 304 {
ftagius 0:3328df4c3116 305 // first time fix obtained
ftagius 0:3328df4c3116 306 gpsFix = true;
ftagius 0:3328df4c3116 307 pc.printf("GPS fix obtained on %02d/%02d/20%02d_%02d:%02d:%02d (UTC)\r\n",gpsd.month,gpsd.day,gpsd.year,gpsd.hour,gpsd.minute,gpsd.seconds);
ftagius 1:10d2a051285e 308 //pc.printf("Touch slider to suspend application\r\n");
ftagius 0:3328df4c3116 309 pc.printf("Waiting for lighting detection...\r\n");
ftagius 0:3328df4c3116 310 }
ftagius 0:3328df4c3116 311
ftagius 0:3328df4c3116 312 //red = 1; // turn led off
ftagius 0:3328df4c3116 313 //pc.printf("turn green on\r\n");
ftagius 0:3328df4c3116 314 green = 0; // turn led on
ftagius 0:3328df4c3116 315 wait_ms(50);
ftagius 0:3328df4c3116 316 }
ftagius 0:3328df4c3116 317 else
ftagius 0:3328df4c3116 318 {
ftagius 3:e3974328d808 319 gpsFix = false;
ftagius 0:3328df4c3116 320 pc.printf("Waiting for GPS FIX\r\n");
ftagius 0:3328df4c3116 321 red = 0; // turn led on
ftagius 0:3328df4c3116 322 }
ftagius 0:3328df4c3116 323
ftagius 0:3328df4c3116 324 // restart the timer for the gps print loop
ftagius 0:3328df4c3116 325 // writeLogFile(-2);
ftagius 0:3328df4c3116 326 refresh_Timer.reset();
ftagius 0:3328df4c3116 327 }
ftagius 0:3328df4c3116 328 else
ftagius 0:3328df4c3116 329 {
ftagius 0:3328df4c3116 330 //red = 0; // turn led on
ftagius 0:3328df4c3116 331 //pc.printf("turn green off\r\n");
ftagius 0:3328df4c3116 332 green = 1; // turn green led off
ftagius 0:3328df4c3116 333 } // end else refresh timer
ftagius 0:3328df4c3116 334 }
ftagius 0:3328df4c3116 335
ftagius 0:3328df4c3116 336 }