test code
Fork of FRDM_serial_pc_board_pass_through by
main.cpp@1:4d30bb984196, 2014-05-01 (annotated)
- Committer:
- subtask
- Date:
- Thu May 01 02:07:51 2014 +0000
- Revision:
- 1:4d30bb984196
- Parent:
- 0:bab6dd4a9c11
test code
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| felipeM | 0:bab6dd4a9c11 | 1 | #include "mbed.h" |
| subtask | 1:4d30bb984196 | 2 | #include "rtos.h" |
| felipeM | 0:bab6dd4a9c11 | 3 | |
| felipeM | 0:bab6dd4a9c11 | 4 | Serial pc(USBTX, USBRX); |
| felipeM | 0:bab6dd4a9c11 | 5 | //TX RX pins, see https://mbed.org/handbook/mbed-FRDM-KL25Z |
| subtask | 1:4d30bb984196 | 6 | Serial uart(p9, p10); |
| felipeM | 0:bab6dd4a9c11 | 7 | //to test is you can use a hard bridge (piece of cable) between PTC4 and PTC3 open a terminal and write something :) |
| felipeM | 0:bab6dd4a9c11 | 8 | //you can integrate this to improve some interesting aplicattions like this: |
| felipeM | 0:bab6dd4a9c11 | 9 | //http://www.instructables.com/id/Temperature-sensor--weatherstation/http://www.instructables.com/id/Temperature-sensor--weatherstation/ |
| felipeM | 0:bab6dd4a9c11 | 10 | DigitalOut pc_activity(LED1); |
| felipeM | 0:bab6dd4a9c11 | 11 | DigitalOut uart_activity(LED2); |
| subtask | 1:4d30bb984196 | 12 | DigitalIn receive(p10); |
| subtask | 1:4d30bb984196 | 13 | |
| subtask | 1:4d30bb984196 | 14 | Timer t; |
| subtask | 1:4d30bb984196 | 15 | int state = 0; |
| subtask | 1:4d30bb984196 | 16 | int period = 0; |
| subtask | 1:4d30bb984196 | 17 | int baud_rate = 0; |
| felipeM | 0:bab6dd4a9c11 | 18 | |
| subtask | 1:4d30bb984196 | 19 | void baud_thread(void const *args) { |
| subtask | 1:4d30bb984196 | 20 | while (true) { |
| subtask | 1:4d30bb984196 | 21 | uart.putc(0x55); |
| subtask | 1:4d30bb984196 | 22 | Thread::wait(1000); |
| subtask | 1:4d30bb984196 | 23 | if (period) |
| subtask | 1:4d30bb984196 | 24 | pc.printf("baud rate %d ", baud_rate); |
| subtask | 1:4d30bb984196 | 25 | } |
| subtask | 1:4d30bb984196 | 26 | } |
| subtask | 1:4d30bb984196 | 27 | |
| subtask | 1:4d30bb984196 | 28 | void get_rate(int *baud_rate) { |
| subtask | 1:4d30bb984196 | 29 | if (*baud_rate > 90000 && *baud_rate < (int)(125200)) |
| subtask | 1:4d30bb984196 | 30 | *baud_rate = 115200; |
| subtask | 1:4d30bb984196 | 31 | else if (*baud_rate > (int)0.9*9600 && *baud_rate < (int)1.1*9600) |
| subtask | 1:4d30bb984196 | 32 | *baud_rate = 9600; |
| subtask | 1:4d30bb984196 | 33 | else |
| subtask | 1:4d30bb984196 | 34 | *baud_rate = 0; |
| subtask | 1:4d30bb984196 | 35 | } |
| subtask | 1:4d30bb984196 | 36 | |
| subtask | 1:4d30bb984196 | 37 | |
| felipeM | 0:bab6dd4a9c11 | 38 | int main() { |
| subtask | 1:4d30bb984196 | 39 | |
| subtask | 1:4d30bb984196 | 40 | int stop = 0; |
| subtask | 1:4d30bb984196 | 41 | int counter = 0; |
| subtask | 1:4d30bb984196 | 42 | uart.baud(115200); |
| subtask | 1:4d30bb984196 | 43 | Thread thread(baud_thread); |
| subtask | 1:4d30bb984196 | 44 | |
| subtask | 1:4d30bb984196 | 45 | pc.printf("started \n"); |
| felipeM | 0:bab6dd4a9c11 | 46 | while(1) { |
| subtask | 1:4d30bb984196 | 47 | if (state == 0) |
| subtask | 1:4d30bb984196 | 48 | if(receive) { |
| subtask | 1:4d30bb984196 | 49 | state = 1; |
| subtask | 1:4d30bb984196 | 50 | } |
| subtask | 1:4d30bb984196 | 51 | |
| subtask | 1:4d30bb984196 | 52 | if (state == 1) |
| subtask | 1:4d30bb984196 | 53 | if(!receive) { |
| subtask | 1:4d30bb984196 | 54 | t.start(); |
| subtask | 1:4d30bb984196 | 55 | state = 2; |
| subtask | 1:4d30bb984196 | 56 | } |
| subtask | 1:4d30bb984196 | 57 | |
| subtask | 1:4d30bb984196 | 58 | if (state == 2) |
| subtask | 1:4d30bb984196 | 59 | if(receive) { |
| subtask | 1:4d30bb984196 | 60 | t.stop(); |
| subtask | 1:4d30bb984196 | 61 | period = t.read_us(); |
| subtask | 1:4d30bb984196 | 62 | baud_rate = (int)(1.0/((float)t.read_us()/1000000.0)); |
| subtask | 1:4d30bb984196 | 63 | get_rate(&baud_rate); |
| subtask | 1:4d30bb984196 | 64 | uart.putc(0xAA); |
| subtask | 1:4d30bb984196 | 65 | t.reset(); |
| subtask | 1:4d30bb984196 | 66 | state = 0; |
| subtask | 1:4d30bb984196 | 67 | } |
| subtask | 1:4d30bb984196 | 68 | |
| felipeM | 0:bab6dd4a9c11 | 69 | if(pc.readable()) { |
| felipeM | 0:bab6dd4a9c11 | 70 | uart.putc(pc.getc()); |
| felipeM | 0:bab6dd4a9c11 | 71 | pc_activity = !pc_activity; |
| felipeM | 0:bab6dd4a9c11 | 72 | } |
| subtask | 1:4d30bb984196 | 73 | |
| felipeM | 0:bab6dd4a9c11 | 74 | if(uart.readable()) { |
| felipeM | 0:bab6dd4a9c11 | 75 | pc.putc(uart.getc()); |
| felipeM | 0:bab6dd4a9c11 | 76 | uart_activity = !uart_activity; |
| felipeM | 0:bab6dd4a9c11 | 77 | } |
| felipeM | 0:bab6dd4a9c11 | 78 | } |
| felipeM | 0:bab6dd4a9c11 | 79 | } |
