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.
main.cpp@0:d80410b1dfec, 2014-02-20 (annotated)
- Committer:
- shalab
- Date:
- Thu Feb 20 04:55:43 2014 +0000
- Revision:
- 0:d80410b1dfec
- Child:
- 1:8c34bb700858
Initial commit
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| shalab | 0:d80410b1dfec | 1 | #include "mbed.h" |
| shalab | 0:d80410b1dfec | 2 | #include "common.h" |
| shalab | 0:d80410b1dfec | 3 | |
| shalab | 0:d80410b1dfec | 4 | DigitalOut led1(LED1); |
| shalab | 0:d80410b1dfec | 5 | DigitalOut led2(LED2); |
| shalab | 0:d80410b1dfec | 6 | DigitalOut led3(LED3); |
| shalab | 0:d80410b1dfec | 7 | DigitalOut led4(LED4); |
| shalab | 0:d80410b1dfec | 8 | Serial pc(USBTX, USBRX); |
| shalab | 0:d80410b1dfec | 9 | |
| shalab | 0:d80410b1dfec | 10 | typedef union bytes { |
| shalab | 0:d80410b1dfec | 11 | double d ; |
| shalab | 0:d80410b1dfec | 12 | char c[8]; |
| shalab | 0:d80410b1dfec | 13 | }bytes; |
| shalab | 0:d80410b1dfec | 14 | |
| shalab | 0:d80410b1dfec | 15 | void printDoubleToHex(double d){ |
| shalab | 0:d80410b1dfec | 16 | bytes b; |
| shalab | 0:d80410b1dfec | 17 | b.d = d; |
| shalab | 0:d80410b1dfec | 18 | pc.printf("double to hex:\r\n"); |
| shalab | 0:d80410b1dfec | 19 | pc.printf("%f -> %x %x %x %x %x %x %x %x\r\n", b.d, b.c[0], b.c[1], b.c[2], b.c[3], b.c[4], b.c[5], b.c[6], b.c[7]); |
| shalab | 0:d80410b1dfec | 20 | |
| shalab | 0:d80410b1dfec | 21 | } |
| shalab | 0:d80410b1dfec | 22 | |
| shalab | 0:d80410b1dfec | 23 | |
| shalab | 0:d80410b1dfec | 24 | void printHexToDouble(char *arr){ |
| shalab | 0:d80410b1dfec | 25 | bytes b; |
| shalab | 0:d80410b1dfec | 26 | for (int i=0; i<8; ++i) |
| shalab | 0:d80410b1dfec | 27 | b.c[i] = arr[i]; |
| shalab | 0:d80410b1dfec | 28 | pc.printf("received hex: %x %x %x %x %x %x %x %x \r\n", b.c[0], b.c[1], b.c[2], b.c[3], b.c[4], b.c[5], b.c[6], b.c[7]); |
| shalab | 0:d80410b1dfec | 29 | pc.printf("convert to: %f\r\n", b.d); |
| shalab | 0:d80410b1dfec | 30 | |
| shalab | 0:d80410b1dfec | 31 | } |
| shalab | 0:d80410b1dfec | 32 | |
| shalab | 0:d80410b1dfec | 33 | // Serial Interrupt |
| shalab | 0:d80410b1dfec | 34 | const int len = 64; |
| shalab | 0:d80410b1dfec | 35 | char inCmd[len]; |
| shalab | 0:d80410b1dfec | 36 | bool inCmdReady = false; |
| shalab | 0:d80410b1dfec | 37 | |
| shalab | 0:d80410b1dfec | 38 | void rxCallback() { |
| shalab | 0:d80410b1dfec | 39 | static int idx = 0; |
| shalab | 0:d80410b1dfec | 40 | toggle(led2); |
| shalab | 0:d80410b1dfec | 41 | char c = pc.getc(); |
| shalab | 0:d80410b1dfec | 42 | switch (c){ |
| shalab | 0:d80410b1dfec | 43 | case '\n': |
| shalab | 0:d80410b1dfec | 44 | break; |
| shalab | 0:d80410b1dfec | 45 | case '\r': |
| shalab | 0:d80410b1dfec | 46 | inCmd[idx]='\0'; |
| shalab | 0:d80410b1dfec | 47 | idx=0; |
| shalab | 0:d80410b1dfec | 48 | inCmdReady = true; |
| shalab | 0:d80410b1dfec | 49 | break; |
| shalab | 0:d80410b1dfec | 50 | default: |
| shalab | 0:d80410b1dfec | 51 | if(idx<len){ |
| shalab | 0:d80410b1dfec | 52 | inCmd[idx++] = c; |
| shalab | 0:d80410b1dfec | 53 | } |
| shalab | 0:d80410b1dfec | 54 | break; |
| shalab | 0:d80410b1dfec | 55 | } |
| shalab | 0:d80410b1dfec | 56 | } |
| shalab | 0:d80410b1dfec | 57 | |
| shalab | 0:d80410b1dfec | 58 | int main() { |
| shalab | 0:d80410b1dfec | 59 | pc.attach(&rxCallback, Serial::RxIrq); |
| shalab | 0:d80410b1dfec | 60 | pc.printf("\r\n\r\n\r\n"); |
| shalab | 0:d80410b1dfec | 61 | pc.printf("Shalab - Tutorial_BinarySerialCom\r\n"); |
| shalab | 0:d80410b1dfec | 62 | |
| shalab | 0:d80410b1dfec | 63 | while(1) { |
| shalab | 0:d80410b1dfec | 64 | if (inCmdReady) |
| shalab | 0:d80410b1dfec | 65 | { |
| shalab | 0:d80410b1dfec | 66 | toggle(led3); |
| shalab | 0:d80410b1dfec | 67 | printHexToDouble(inCmd); |
| shalab | 0:d80410b1dfec | 68 | inCmdReady = false; |
| shalab | 0:d80410b1dfec | 69 | } |
| shalab | 0:d80410b1dfec | 70 | led1 != led1; |
| shalab | 0:d80410b1dfec | 71 | wait(0.1); |
| shalab | 0:d80410b1dfec | 72 | } |
| shalab | 0:d80410b1dfec | 73 | } |