Transmitter Code

Dependencies:   Watchdog mbed

Committer:
jamesfryar
Date:
Thu Nov 24 15:36:06 2016 +0000
Revision:
0:d4b08f5874fc
24112016

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jamesfryar 0:d4b08f5874fc 1 #include "mbed.h"
jamesfryar 0:d4b08f5874fc 2 #include "SerialBase.h"
jamesfryar 0:d4b08f5874fc 3 #include "Watchdog.h"
jamesfryar 0:d4b08f5874fc 4
jamesfryar 0:d4b08f5874fc 5 Serial pc(USBTX,USBRX);
jamesfryar 0:d4b08f5874fc 6 Serial rf(D1, NC, 4800);
jamesfryar 0:d4b08f5874fc 7 DigitalOut myled(LED1);
jamesfryar 0:d4b08f5874fc 8 AnalogIn ain(A0);
jamesfryar 0:d4b08f5874fc 9 Ticker led_rf_ticker;
jamesfryar 0:d4b08f5874fc 10 Ticker adc_ticker;
jamesfryar 0:d4b08f5874fc 11 Timer t;
jamesfryar 0:d4b08f5874fc 12
jamesfryar 0:d4b08f5874fc 13 int adc_data[1024];
jamesfryar 0:d4b08f5874fc 14 int adc_data_counter = 0;
jamesfryar 0:d4b08f5874fc 15 int current_threshold = 3000;
jamesfryar 0:d4b08f5874fc 16 int time_threshold = 30;
jamesfryar 0:d4b08f5874fc 17 bool data_ready = false;
jamesfryar 0:d4b08f5874fc 18 bool rf_32Asafe = false;
jamesfryar 0:d4b08f5874fc 19
jamesfryar 0:d4b08f5874fc 20 Watchdog wd;
jamesfryar 0:d4b08f5874fc 21
jamesfryar 0:d4b08f5874fc 22 void led_rf_blinky (void)
jamesfryar 0:d4b08f5874fc 23 {
jamesfryar 0:d4b08f5874fc 24 myled = !myled;
jamesfryar 0:d4b08f5874fc 25 if(rf_32Asafe == true)
jamesfryar 0:d4b08f5874fc 26 {
jamesfryar 0:d4b08f5874fc 27 rf.printf("HHHHHHHH");
jamesfryar 0:d4b08f5874fc 28 pc.printf("Transmit: Charge at 32A\r\n");
jamesfryar 0:d4b08f5874fc 29
jamesfryar 0:d4b08f5874fc 30 }
jamesfryar 0:d4b08f5874fc 31 else
jamesfryar 0:d4b08f5874fc 32 {
jamesfryar 0:d4b08f5874fc 33 rf.printf("LLLLLLLL");
jamesfryar 0:d4b08f5874fc 34 pc.printf("Transmit: Charge at 16A\r\n");
jamesfryar 0:d4b08f5874fc 35 }
jamesfryar 0:d4b08f5874fc 36 }
jamesfryar 0:d4b08f5874fc 37
jamesfryar 0:d4b08f5874fc 38 void read_adc (void)
jamesfryar 0:d4b08f5874fc 39 {
jamesfryar 0:d4b08f5874fc 40 if (adc_data_counter < 1024)
jamesfryar 0:d4b08f5874fc 41 {
jamesfryar 0:d4b08f5874fc 42 adc_data[adc_data_counter] = ain.read_u16();
jamesfryar 0:d4b08f5874fc 43 adc_data_counter+=1;
jamesfryar 0:d4b08f5874fc 44 }
jamesfryar 0:d4b08f5874fc 45 else
jamesfryar 0:d4b08f5874fc 46 {
jamesfryar 0:d4b08f5874fc 47 data_ready = true;
jamesfryar 0:d4b08f5874fc 48 }
jamesfryar 0:d4b08f5874fc 49 }
jamesfryar 0:d4b08f5874fc 50
jamesfryar 0:d4b08f5874fc 51 int main()
jamesfryar 0:d4b08f5874fc 52 {
jamesfryar 0:d4b08f5874fc 53 if (wd.WatchdogCausedReset()) pc.printf("Watchdog caused reset\r\n");
jamesfryar 0:d4b08f5874fc 54 wd.Configure(5.0);
jamesfryar 0:d4b08f5874fc 55 float sum;
jamesfryar 0:d4b08f5874fc 56 int i;
jamesfryar 0:d4b08f5874fc 57 led_rf_ticker.attach(&led_rf_blinky, 0.2);
jamesfryar 0:d4b08f5874fc 58 adc_ticker.attach_us(&read_adc, 2000);
jamesfryar 0:d4b08f5874fc 59 t.reset();
jamesfryar 0:d4b08f5874fc 60
jamesfryar 0:d4b08f5874fc 61 while(1)
jamesfryar 0:d4b08f5874fc 62 {
jamesfryar 0:d4b08f5874fc 63 wd.Service();
jamesfryar 0:d4b08f5874fc 64 if (data_ready == true)
jamesfryar 0:d4b08f5874fc 65 {
jamesfryar 0:d4b08f5874fc 66 sum = 0.0;
jamesfryar 0:d4b08f5874fc 67 for(i=0; i<1024; i++)
jamesfryar 0:d4b08f5874fc 68 {
jamesfryar 0:d4b08f5874fc 69 sum = sum + adc_data[i];
jamesfryar 0:d4b08f5874fc 70 }
jamesfryar 0:d4b08f5874fc 71 sum = sum / 1024;
jamesfryar 0:d4b08f5874fc 72
jamesfryar 0:d4b08f5874fc 73 if(sum < current_threshold && t.read()== 0)
jamesfryar 0:d4b08f5874fc 74 {
jamesfryar 0:d4b08f5874fc 75 t.reset();
jamesfryar 0:d4b08f5874fc 76 t.start();
jamesfryar 0:d4b08f5874fc 77 rf_32Asafe = false;
jamesfryar 0:d4b08f5874fc 78 }
jamesfryar 0:d4b08f5874fc 79
jamesfryar 0:d4b08f5874fc 80 if(sum < current_threshold && t.read() > time_threshold)
jamesfryar 0:d4b08f5874fc 81 {
jamesfryar 0:d4b08f5874fc 82 t.stop();
jamesfryar 0:d4b08f5874fc 83 rf_32Asafe = true;
jamesfryar 0:d4b08f5874fc 84 while(1){
jamesfryar 0:d4b08f5874fc 85 }
jamesfryar 0:d4b08f5874fc 86 }
jamesfryar 0:d4b08f5874fc 87
jamesfryar 0:d4b08f5874fc 88 if(sum > current_threshold)
jamesfryar 0:d4b08f5874fc 89 {
jamesfryar 0:d4b08f5874fc 90 t.reset();
jamesfryar 0:d4b08f5874fc 91 rf_32Asafe = false;
jamesfryar 0:d4b08f5874fc 92 }
jamesfryar 0:d4b08f5874fc 93
jamesfryar 0:d4b08f5874fc 94 data_ready = false;
jamesfryar 0:d4b08f5874fc 95 adc_data_counter = 0;
jamesfryar 0:d4b08f5874fc 96 }
jamesfryar 0:d4b08f5874fc 97 }
jamesfryar 0:d4b08f5874fc 98 }