Motoo Tanaka
/
KL25Z_UART_EDGE_180116
Test Program for Multi Adapter
edge.cpp@0:4c6961cb6ccf, 2018-01-15 (annotated)
- Committer:
- Rhyme
- Date:
- Mon Jan 15 07:53:03 2018 +0000
- Revision:
- 0:4c6961cb6ccf
- Child:
- 1:b97b4f4e5adb
data[0] = TILDE, data[1]..data[9] = data
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Rhyme | 0:4c6961cb6ccf | 1 | /** |
Rhyme | 0:4c6961cb6ccf | 2 | * KL25Z UART EDGE |
Rhyme | 0:4c6961cb6ccf | 3 | * Temp Sensor test for FRDM-KL25Z and SigFox |
Rhyme | 0:4c6961cb6ccf | 4 | *****/ |
Rhyme | 0:4c6961cb6ccf | 5 | |
Rhyme | 0:4c6961cb6ccf | 6 | #include "mbed.h" |
Rhyme | 0:4c6961cb6ccf | 7 | |
Rhyme | 0:4c6961cb6ccf | 8 | #define PIN_AN0 PTB0 |
Rhyme | 0:4c6961cb6ccf | 9 | #define PIN_AN1 PTB1 |
Rhyme | 0:4c6961cb6ccf | 10 | #define PIN_AN2 PTB2 |
Rhyme | 0:4c6961cb6ccf | 11 | #define PIN_AN3 PTB3 |
Rhyme | 0:4c6961cb6ccf | 12 | |
Rhyme | 0:4c6961cb6ccf | 13 | #define PIN_LEDR PTB18 |
Rhyme | 0:4c6961cb6ccf | 14 | #define PIN_LEDG PTB19 |
Rhyme | 0:4c6961cb6ccf | 15 | #define PIN_LEDB PTD1 |
Rhyme | 0:4c6961cb6ccf | 16 | |
Rhyme | 0:4c6961cb6ccf | 17 | #define UART_TX PTE0 |
Rhyme | 0:4c6961cb6ccf | 18 | #define UART_RX PTE1 |
Rhyme | 0:4c6961cb6ccf | 19 | #define BAUD_RATE 9600 |
Rhyme | 0:4c6961cb6ccf | 20 | |
Rhyme | 0:4c6961cb6ccf | 21 | #define MODE_IDLE 0 |
Rhyme | 0:4c6961cb6ccf | 22 | #define MODE_ALART 1 |
Rhyme | 0:4c6961cb6ccf | 23 | #define MODE_DATA 2 |
Rhyme | 0:4c6961cb6ccf | 24 | #define ACK (0x3E) |
Rhyme | 0:4c6961cb6ccf | 25 | // #define ACK (0x06) |
Rhyme | 0:4c6961cb6ccf | 26 | #define TILDE '~' |
Rhyme | 0:4c6961cb6ccf | 27 | |
Rhyme | 0:4c6961cb6ccf | 28 | // R0=5.0, float R1=4.95, float B=3324, float T0=298.15 |
Rhyme | 0:4c6961cb6ccf | 29 | #define R0 5.0 |
Rhyme | 0:4c6961cb6ccf | 30 | #define R1 4.95 |
Rhyme | 0:4c6961cb6ccf | 31 | #define B 3324 |
Rhyme | 0:4c6961cb6ccf | 32 | #define T0 298.15 |
Rhyme | 0:4c6961cb6ccf | 33 | |
Rhyme | 0:4c6961cb6ccf | 34 | DigitalOut *led_r = 0 ; |
Rhyme | 0:4c6961cb6ccf | 35 | DigitalOut *led_g = 0 ; |
Rhyme | 0:4c6961cb6ccf | 36 | DigitalOut *led_b = 0 ; |
Rhyme | 0:4c6961cb6ccf | 37 | |
Rhyme | 0:4c6961cb6ccf | 38 | AnalogIn *an[4] = { 0, 0, 0, 0 } ; |
Rhyme | 0:4c6961cb6ccf | 39 | #define NUM_ANIN 4 |
Rhyme | 0:4c6961cb6ccf | 40 | |
Rhyme | 0:4c6961cb6ccf | 41 | Serial *tty = 0 ; |
Rhyme | 0:4c6961cb6ccf | 42 | |
Rhyme | 0:4c6961cb6ccf | 43 | int mode = MODE_IDLE ; |
Rhyme | 0:4c6961cb6ccf | 44 | |
Rhyme | 0:4c6961cb6ccf | 45 | void init_hardware(void) |
Rhyme | 0:4c6961cb6ccf | 46 | { |
Rhyme | 0:4c6961cb6ccf | 47 | tty = new Serial(UART_TX, UART_RX, BAUD_RATE) ; |
Rhyme | 0:4c6961cb6ccf | 48 | led_r = new DigitalOut(PIN_LEDR, 1) ; |
Rhyme | 0:4c6961cb6ccf | 49 | led_g = new DigitalOut(PIN_LEDG, 1) ; |
Rhyme | 0:4c6961cb6ccf | 50 | led_b = new DigitalOut(PIN_LEDB, 1) ; |
Rhyme | 0:4c6961cb6ccf | 51 | an[0] = new AnalogIn(PIN_AN0) ; |
Rhyme | 0:4c6961cb6ccf | 52 | an[1] = new AnalogIn(PIN_AN1) ; |
Rhyme | 0:4c6961cb6ccf | 53 | an[2] = new AnalogIn(PIN_AN2) ; |
Rhyme | 0:4c6961cb6ccf | 54 | an[3] = new AnalogIn(PIN_AN3) ; |
Rhyme | 0:4c6961cb6ccf | 55 | } |
Rhyme | 0:4c6961cb6ccf | 56 | |
Rhyme | 0:4c6961cb6ccf | 57 | void knock(void) |
Rhyme | 0:4c6961cb6ccf | 58 | { |
Rhyme | 0:4c6961cb6ccf | 59 | uint8_t c = '\r' ; |
Rhyme | 0:4c6961cb6ccf | 60 | printf("Knocking on the host's door\n") ; |
Rhyme | 0:4c6961cb6ccf | 61 | printf("Sending 0x%02X\n", c) ; |
Rhyme | 0:4c6961cb6ccf | 62 | // tty->putc('A') ; |
Rhyme | 0:4c6961cb6ccf | 63 | tty->putc(c) ; |
Rhyme | 0:4c6961cb6ccf | 64 | wait(0.5) ; |
Rhyme | 0:4c6961cb6ccf | 65 | } |
Rhyme | 0:4c6961cb6ccf | 66 | |
Rhyme | 0:4c6961cb6ccf | 67 | int wait_ack(void) |
Rhyme | 0:4c6961cb6ccf | 68 | { |
Rhyme | 0:4c6961cb6ccf | 69 | char c ; |
Rhyme | 0:4c6961cb6ccf | 70 | printf("Waiting for ACK\n") ; |
Rhyme | 0:4c6961cb6ccf | 71 | c = tty->getc() ; |
Rhyme | 0:4c6961cb6ccf | 72 | if (c == ACK) { |
Rhyme | 0:4c6961cb6ccf | 73 | printf("ACK received\n") ; |
Rhyme | 0:4c6961cb6ccf | 74 | } else { |
Rhyme | 0:4c6961cb6ccf | 75 | printf("Unexpected char [0x%02X] received\n", c) ; |
Rhyme | 0:4c6961cb6ccf | 76 | } |
Rhyme | 0:4c6961cb6ccf | 77 | return( c ) ; |
Rhyme | 0:4c6961cb6ccf | 78 | } |
Rhyme | 0:4c6961cb6ccf | 79 | |
Rhyme | 0:4c6961cb6ccf | 80 | float getTemp(int n) |
Rhyme | 0:4c6961cb6ccf | 81 | { |
Rhyme | 0:4c6961cb6ccf | 82 | float result = 0.0 ; |
Rhyme | 0:4c6961cb6ccf | 83 | float f, raw, rr1, t ; |
Rhyme | 0:4c6961cb6ccf | 84 | if (an[n]) { |
Rhyme | 0:4c6961cb6ccf | 85 | f = an[n]->read() ; |
Rhyme | 0:4c6961cb6ccf | 86 | raw = f * 3.3 ; |
Rhyme | 0:4c6961cb6ccf | 87 | rr1 = R1 * raw / (3.3 - raw) ; |
Rhyme | 0:4c6961cb6ccf | 88 | t = 1.0 / (log(rr1 / R0) / B + (1/T0)) ; |
Rhyme | 0:4c6961cb6ccf | 89 | result = t - 273.15 ; |
Rhyme | 0:4c6961cb6ccf | 90 | } |
Rhyme | 0:4c6961cb6ccf | 91 | return( result ) ; |
Rhyme | 0:4c6961cb6ccf | 92 | } |
Rhyme | 0:4c6961cb6ccf | 93 | |
Rhyme | 0:4c6961cb6ccf | 94 | void send_data(void) |
Rhyme | 0:4c6961cb6ccf | 95 | { |
Rhyme | 0:4c6961cb6ccf | 96 | int i, dummy ; |
Rhyme | 0:4c6961cb6ccf | 97 | float temp[4] ; |
Rhyme | 0:4c6961cb6ccf | 98 | int8_t data[10] ; |
Rhyme | 0:4c6961cb6ccf | 99 | data[0] = TILDE ; |
Rhyme | 0:4c6961cb6ccf | 100 | for (i = 0 ; i < 4 ; i++ ) { |
Rhyme | 0:4c6961cb6ccf | 101 | temp[i] = getTemp(i) ; |
Rhyme | 0:4c6961cb6ccf | 102 | printf("temp[%d] = %.2f\n", i, temp[i]) ; |
Rhyme | 0:4c6961cb6ccf | 103 | dummy = 100 * temp[i] ; |
Rhyme | 0:4c6961cb6ccf | 104 | data[i * 2+1] = (int8_t)(dummy / 100) ; |
Rhyme | 0:4c6961cb6ccf | 105 | data[i * 2 + 2] = (int8_t)(dummy % 100) ; |
Rhyme | 0:4c6961cb6ccf | 106 | } |
Rhyme | 0:4c6961cb6ccf | 107 | data[9] = 0 ; |
Rhyme | 0:4c6961cb6ccf | 108 | printf("Sending data ...") ; |
Rhyme | 0:4c6961cb6ccf | 109 | for (i = 0 ; i < 10 ; i++ ) { /* data must be 10bytes including the header */ |
Rhyme | 0:4c6961cb6ccf | 110 | tty->putc(data[i]) ; |
Rhyme | 0:4c6961cb6ccf | 111 | wait(0.1) ; |
Rhyme | 0:4c6961cb6ccf | 112 | } |
Rhyme | 0:4c6961cb6ccf | 113 | printf("Done\n") ; |
Rhyme | 0:4c6961cb6ccf | 114 | } |
Rhyme | 0:4c6961cb6ccf | 115 | |
Rhyme | 0:4c6961cb6ccf | 116 | void doLED(void) |
Rhyme | 0:4c6961cb6ccf | 117 | { |
Rhyme | 0:4c6961cb6ccf | 118 | switch(mode) { |
Rhyme | 0:4c6961cb6ccf | 119 | case MODE_IDLE: *led_r = 1 ; *led_g = 1 ; *led_b = 0 ; break ; |
Rhyme | 0:4c6961cb6ccf | 120 | case MODE_ALART: *led_r = 0 ; *led_g = 1 ; *led_b = 1 ; break ; |
Rhyme | 0:4c6961cb6ccf | 121 | case MODE_DATA: *led_r = 1 ; *led_g = 0 ; *led_b = 1 ; break ; |
Rhyme | 0:4c6961cb6ccf | 122 | default: *led_r = 1 ; *led_g = 1 ; *led_b = 1 ; break ; |
Rhyme | 0:4c6961cb6ccf | 123 | } |
Rhyme | 0:4c6961cb6ccf | 124 | } |
Rhyme | 0:4c6961cb6ccf | 125 | |
Rhyme | 0:4c6961cb6ccf | 126 | int main() { |
Rhyme | 0:4c6961cb6ccf | 127 | init_hardware() ; |
Rhyme | 0:4c6961cb6ccf | 128 | printf("Edge Started\n") ; |
Rhyme | 0:4c6961cb6ccf | 129 | while(1) { |
Rhyme | 0:4c6961cb6ccf | 130 | doLED() ; |
Rhyme | 0:4c6961cb6ccf | 131 | switch(mode) { |
Rhyme | 0:4c6961cb6ccf | 132 | case MODE_IDLE: |
Rhyme | 0:4c6961cb6ccf | 133 | knock() ; |
Rhyme | 0:4c6961cb6ccf | 134 | mode = MODE_ALART ; |
Rhyme | 0:4c6961cb6ccf | 135 | break ; |
Rhyme | 0:4c6961cb6ccf | 136 | case MODE_ALART: |
Rhyme | 0:4c6961cb6ccf | 137 | if (wait_ack() == ACK) { |
Rhyme | 0:4c6961cb6ccf | 138 | mode = MODE_DATA ; |
Rhyme | 0:4c6961cb6ccf | 139 | } else { |
Rhyme | 0:4c6961cb6ccf | 140 | mode = MODE_IDLE ; |
Rhyme | 0:4c6961cb6ccf | 141 | } |
Rhyme | 0:4c6961cb6ccf | 142 | break ; |
Rhyme | 0:4c6961cb6ccf | 143 | case MODE_DATA: |
Rhyme | 0:4c6961cb6ccf | 144 | send_data() ; |
Rhyme | 0:4c6961cb6ccf | 145 | wait_ack() ; |
Rhyme | 0:4c6961cb6ccf | 146 | mode = MODE_IDLE ; |
Rhyme | 0:4c6961cb6ccf | 147 | printf("Sleeping ...") ; |
Rhyme | 0:4c6961cb6ccf | 148 | fflush(stdout) ; |
Rhyme | 0:4c6961cb6ccf | 149 | wait(20.0) ; /* minimum 15 sec */ |
Rhyme | 0:4c6961cb6ccf | 150 | printf("Done\n") ; |
Rhyme | 0:4c6961cb6ccf | 151 | break ; |
Rhyme | 0:4c6961cb6ccf | 152 | default: |
Rhyme | 0:4c6961cb6ccf | 153 | printf("Unexpected mode [%d]\n", mode) ; |
Rhyme | 0:4c6961cb6ccf | 154 | mode = MODE_IDLE ; |
Rhyme | 0:4c6961cb6ccf | 155 | break ; |
Rhyme | 0:4c6961cb6ccf | 156 | } |
Rhyme | 0:4c6961cb6ccf | 157 | wait(0.1) ; |
Rhyme | 0:4c6961cb6ccf | 158 | } |
Rhyme | 0:4c6961cb6ccf | 159 | } |