shalab shalab / Mbed 2 deprecated Tutorial02_BinarySerialCom

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }