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.
edge.cpp
00001 /** 00002 * KL25Z UART EDGE 00003 * Temp Sensor test for FRDM-KL25Z and SigFox 00004 *****/ 00005 00006 #include "mbed.h" 00007 00008 #define PIN_AN0 PTB0 00009 #define PIN_AN1 PTB1 00010 #define PIN_AN2 PTB2 00011 #define PIN_AN3 PTB3 00012 00013 #define PIN_LEDR PTB18 00014 #define PIN_LEDG PTB19 00015 #define PIN_LEDB PTD1 00016 00017 #define UART_TX PTE0 00018 #define UART_RX PTE1 00019 #define BAUD_RATE 9600 00020 00021 #define MODE_IDLE 0 00022 #define MODE_ALART 1 00023 #define MODE_DATA 2 00024 #define ACK (0x3E) 00025 // #define ACK (0x06) 00026 #define TILDE '~' 00027 #define CR '\r' 00028 #define DOT '.' 00029 #define SPACE ' ' 00030 00031 // R0=5.0, float R1=4.95, float B=3324, float T0=298.15 00032 #define R0 5.0 00033 #define R1 4.95 00034 #define B 3324 00035 #define T0 298.15 00036 00037 DigitalOut *led_r = 0 ; 00038 DigitalOut *led_g = 0 ; 00039 DigitalOut *led_b = 0 ; 00040 00041 AnalogIn *an[4] = { 0, 0, 0, 0 } ; 00042 #define NUM_ANIN 4 00043 00044 Serial *tty = 0 ; 00045 00046 int mode = MODE_IDLE ; 00047 00048 void init_hardware(void) 00049 { 00050 tty = new Serial(UART_TX, UART_RX, BAUD_RATE) ; 00051 led_r = new DigitalOut(PIN_LEDR, 1) ; 00052 led_g = new DigitalOut(PIN_LEDG, 1) ; 00053 led_b = new DigitalOut(PIN_LEDB, 1) ; 00054 an[0] = new AnalogIn(PIN_AN0) ; 00055 an[1] = new AnalogIn(PIN_AN1) ; 00056 an[2] = new AnalogIn(PIN_AN2) ; 00057 an[3] = new AnalogIn(PIN_AN3) ; 00058 } 00059 00060 void knock(void) 00061 { 00062 uint8_t c = CR ; 00063 printf("Knocking on the host's door\n") ; 00064 printf("Sending 0x%02X\n", c) ; 00065 tty->putc(c) ; 00066 wait(0.5) ; 00067 } 00068 00069 int wait_ack(void) 00070 { 00071 char c = 0xFF ; 00072 printf("Waiting for ACK ") ; 00073 for (int i = 0 ; i < 3 ; i++ ) { 00074 if (tty->readable()) { 00075 c = tty->getc() ; 00076 } else { 00077 printf(".") ; 00078 } 00079 wait(1) ; 00080 } 00081 printf(" ") ; 00082 if (c == ACK) { 00083 printf("ACK received\n") ; 00084 } else { 00085 printf("Unexpected char [0x%02X] received\n", c) ; 00086 } 00087 return( c ) ; 00088 } 00089 00090 float getTemp(int n) 00091 { 00092 float result = 0.0 ; 00093 float f, raw, rr1, t ; 00094 if (an[n]) { 00095 f = an[n]->read() ; 00096 // printf("AN[%d] = %.2f\n",n, f) ; 00097 raw = f * 3.3 ; 00098 rr1 = R1 * raw / (3.3 - raw) ; 00099 t = 1.0 / (log(rr1 / R0) / B + (1/T0)) ; 00100 result = t - 273.15 ; 00101 } 00102 return( result ) ; 00103 } 00104 00105 void send_data(void) 00106 { 00107 int i, dummy ; 00108 float temp[4] ; 00109 int8_t data[10] ; 00110 data[0] = TILDE ; 00111 for (i = 0 ; i < 4 ; i++ ) { 00112 temp[i] = getTemp(i) ; 00113 printf("temp[%d] = %.2f\n", i, temp[i]) ; 00114 dummy = (int)(100.0 * temp[i] + 0.5) ; 00115 data[i * 2 + 1] = (int8_t)(dummy / 100) ; 00116 data[i * 2 + 2] = (int8_t)(dummy % 100) ; 00117 } 00118 data[9] = 0 ; 00119 printf("Sending data ...") ; 00120 for (i = 0 ; i < 10 ; i++ ) { /* data must be 10bytes including the header */ 00121 tty->putc(data[i]) ; 00122 wait(0.1) ; 00123 } 00124 printf("Done\n") ; 00125 } 00126 00127 void doLED(void) 00128 { 00129 switch(mode) { 00130 case MODE_IDLE: *led_r = 1 ; *led_g = 1 ; *led_b = 0 ; break ; 00131 case MODE_ALART: *led_r = 0 ; *led_g = 1 ; *led_b = 1 ; break ; 00132 case MODE_DATA: *led_r = 1 ; *led_g = 0 ; *led_b = 1 ; break ; 00133 default: *led_r = 1 ; *led_g = 1 ; *led_b = 1 ; break ; 00134 } 00135 } 00136 00137 int main() { 00138 init_hardware() ; 00139 printf("Edge Started\n") ; 00140 while(1) { 00141 doLED() ; 00142 switch(mode) { 00143 case MODE_IDLE: 00144 knock() ; 00145 mode = MODE_ALART ; 00146 break ; 00147 case MODE_ALART: 00148 if (wait_ack() == ACK) { 00149 mode = MODE_DATA ; 00150 } else { 00151 mode = MODE_IDLE ; 00152 } 00153 break ; 00154 case MODE_DATA: 00155 send_data() ; 00156 wait_ack() ; 00157 mode = MODE_IDLE ; 00158 printf("Sleeping ...") ; 00159 fflush(stdout) ; 00160 wait(20.0) ; /* minimum 15 sec */ 00161 printf("Done\n") ; 00162 break ; 00163 default: 00164 printf("Unexpected mode [%d]\n", mode) ; 00165 mode = MODE_IDLE ; 00166 break ; 00167 } 00168 wait(0.1) ; 00169 } 00170 }
Generated on Sat Jul 30 2022 14:03:08 by
1.7.2