![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Export for Dan
main.cpp@4:810c3971bb3e, 2015-10-29 (annotated)
- Committer:
- atravieso
- Date:
- Thu Oct 29 20:18:49 2015 +0000
- Revision:
- 4:810c3971bb3e
- Parent:
- 3:4039b6c8da2e
- Child:
- 5:14a21c3812ed
Sending and Receiving data on pins 13 and 14 via RS232 level shifter to the PC.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
atravieso | 0:4b4c18724370 | 1 | |
atravieso | 0:4b4c18724370 | 2 | |
atravieso | 0:4b4c18724370 | 3 | #include "mbed.h" |
atravieso | 0:4b4c18724370 | 4 | #include "MODSERIAL.h" |
atravieso | 0:4b4c18724370 | 5 | |
atravieso | 1:66e3217ec4ec | 6 | #define MESSAGE_BUFFER_SIZE 100 |
atravieso | 0:4b4c18724370 | 7 | |
atravieso | 0:4b4c18724370 | 8 | DigitalOut led1(LED1); |
atravieso | 0:4b4c18724370 | 9 | DigitalOut led2(LED2); |
atravieso | 0:4b4c18724370 | 10 | DigitalOut led3(LED3); |
atravieso | 0:4b4c18724370 | 11 | DigitalOut led4(LED4); |
atravieso | 0:4b4c18724370 | 12 | |
atravieso | 4:810c3971bb3e | 13 | MODSERIAL messageSystem(p13, p14); |
atravieso | 0:4b4c18724370 | 14 | |
atravieso | 4:810c3971bb3e | 15 | //char messageBufferIncoming[MESSAGE_BUFFER_SIZE]; |
atravieso | 3:4039b6c8da2e | 16 | int hexBufferIncoming[MESSAGE_BUFFER_SIZE]; |
atravieso | 4:810c3971bb3e | 17 | unsigned char messageBufferOutgoing[MESSAGE_BUFFER_SIZE]; |
atravieso | 1:66e3217ec4ec | 18 | int count = 0; |
atravieso | 1:66e3217ec4ec | 19 | int i = 0; |
atravieso | 0:4b4c18724370 | 20 | bool messageReceived; |
atravieso | 0:4b4c18724370 | 21 | |
atravieso | 1:66e3217ec4ec | 22 | |
atravieso | 0:4b4c18724370 | 23 | void messageReceive(MODSERIAL_IRQ_INFO *q) { |
atravieso | 1:66e3217ec4ec | 24 | // Get the pointer to MODSERIAL object that invoked this callback. |
atravieso | 0:4b4c18724370 | 25 | MODSERIAL *sys = q->serial; |
atravieso | 3:4039b6c8da2e | 26 | |
atravieso | 3:4039b6c8da2e | 27 | //dereference rxGetLasChar() of sys object |
atravieso | 4:810c3971bb3e | 28 | unsigned int c = sys->rxGetLastChar(); // Returns the last byte to pass through the RX interrupt handler. |
atravieso | 3:4039b6c8da2e | 29 | |
atravieso | 1:66e3217ec4ec | 30 | //add char c to messageBufferIncoming |
atravieso | 1:66e3217ec4ec | 31 | if(i <=MESSAGE_BUFFER_SIZE){ |
atravieso | 4:810c3971bb3e | 32 | // messageBufferIncoming[i] = c; |
atravieso | 3:4039b6c8da2e | 33 | hexBufferIncoming[i] = c; |
atravieso | 3:4039b6c8da2e | 34 | |
atravieso | 3:4039b6c8da2e | 35 | // if (c == 0xAA) led4 = !led4; |
atravieso | 3:4039b6c8da2e | 36 | // led3 = !led3; |
atravieso | 1:66e3217ec4ec | 37 | i++; |
atravieso | 3:4039b6c8da2e | 38 | |
atravieso | 1:66e3217ec4ec | 39 | } |
atravieso | 3:4039b6c8da2e | 40 | |
atravieso | 1:66e3217ec4ec | 41 | count++; |
atravieso | 3:4039b6c8da2e | 42 | if (count == 4){ //Need to be able to find the string anywhere in the buffer |
atravieso | 4:810c3971bb3e | 43 | //led4 = !led4; |
atravieso | 4:810c3971bb3e | 44 | wait(.05); |
atravieso | 3:4039b6c8da2e | 45 | |
atravieso | 4:810c3971bb3e | 46 | if (hexBufferIncoming[0] == 0xAA){ //Start Calibration |
atravieso | 4:810c3971bb3e | 47 | // led1 = !led1; |
atravieso | 3:4039b6c8da2e | 48 | if (hexBufferIncoming[1] == 0x55){ |
atravieso | 4:810c3971bb3e | 49 | // led2 = !led2; |
atravieso | 3:4039b6c8da2e | 50 | if (hexBufferIncoming[2] == 0xFF){ |
atravieso | 4:810c3971bb3e | 51 | // led3 = !led3; |
atravieso | 3:4039b6c8da2e | 52 | if (hexBufferIncoming[3] == 0x00){ |
atravieso | 3:4039b6c8da2e | 53 | led1 = !led1; |
atravieso | 4:810c3971bb3e | 54 | //Add disable interrupt?? |
atravieso | 4:810c3971bb3e | 55 | messageSystem.printf("%c", messageBufferOutgoing[0]= 0xAB); |
atravieso | 4:810c3971bb3e | 56 | messageSystem.printf("%c", messageBufferOutgoing[1] = 0x54); |
atravieso | 4:810c3971bb3e | 57 | messageSystem.printf("%c", messageBufferOutgoing[2] = 0xFF); |
atravieso | 4:810c3971bb3e | 58 | messageSystem.printf("%c", messageBufferOutgoing[3] = 0x00); |
atravieso | 4:810c3971bb3e | 59 | |
atravieso | 3:4039b6c8da2e | 60 | } |
atravieso | 3:4039b6c8da2e | 61 | } |
atravieso | 3:4039b6c8da2e | 62 | } |
atravieso | 3:4039b6c8da2e | 63 | } |
atravieso | 3:4039b6c8da2e | 64 | |
atravieso | 4:810c3971bb3e | 65 | else if (hexBufferIncoming[0] == 0xBB){ //Stop Calibration |
atravieso | 3:4039b6c8da2e | 66 | if (hexBufferIncoming[1] == 0x44){ |
atravieso | 3:4039b6c8da2e | 67 | if (hexBufferIncoming[2] == 0xFF){ |
atravieso | 3:4039b6c8da2e | 68 | if (hexBufferIncoming[3] == 0x00){ |
atravieso | 3:4039b6c8da2e | 69 | led2 = !led2; |
atravieso | 4:810c3971bb3e | 70 | messageSystem.printf("%c", messageBufferOutgoing[0]= 0xBC); |
atravieso | 4:810c3971bb3e | 71 | messageSystem.printf("%c", messageBufferOutgoing[1]= 0x43); |
atravieso | 4:810c3971bb3e | 72 | messageSystem.printf("%c", messageBufferOutgoing[2]= 0xFF); |
atravieso | 4:810c3971bb3e | 73 | messageSystem.printf("%c", messageBufferOutgoing[3]= 0x00); |
atravieso | 3:4039b6c8da2e | 74 | } |
atravieso | 3:4039b6c8da2e | 75 | } |
atravieso | 3:4039b6c8da2e | 76 | } |
atravieso | 3:4039b6c8da2e | 77 | } |
atravieso | 3:4039b6c8da2e | 78 | |
atravieso | 4:810c3971bb3e | 79 | else if (hexBufferIncoming[0] == 0xCC){ //Get Calibration Value Leave room for data bits |
atravieso | 3:4039b6c8da2e | 80 | if (hexBufferIncoming[1] == 0x33){ |
atravieso | 3:4039b6c8da2e | 81 | if (hexBufferIncoming[2] == 0xFF){ |
atravieso | 3:4039b6c8da2e | 82 | if (hexBufferIncoming[3] == 0x00){ |
atravieso | 3:4039b6c8da2e | 83 | led3 = !led3; |
atravieso | 4:810c3971bb3e | 84 | messageSystem.printf("%c", messageBufferOutgoing[0]= 0xCD); |
atravieso | 4:810c3971bb3e | 85 | messageSystem.printf("%c", messageBufferOutgoing[1]= 0x32); |
atravieso | 4:810c3971bb3e | 86 | messageSystem.printf("%c", messageBufferOutgoing[2]= 0xFF); |
atravieso | 4:810c3971bb3e | 87 | messageSystem.printf("%c", messageBufferOutgoing[3]= 0x00); |
atravieso | 3:4039b6c8da2e | 88 | } |
atravieso | 3:4039b6c8da2e | 89 | } |
atravieso | 3:4039b6c8da2e | 90 | } |
atravieso | 3:4039b6c8da2e | 91 | } |
atravieso | 4:810c3971bb3e | 92 | else if (hexBufferIncoming[0] == 0xDD){ //Get Dynamic Data Leave room for data bits |
atravieso | 3:4039b6c8da2e | 93 | if (hexBufferIncoming[1] == 0x22){ |
atravieso | 3:4039b6c8da2e | 94 | if (hexBufferIncoming[2] == 0xFF){ |
atravieso | 3:4039b6c8da2e | 95 | if (hexBufferIncoming[3] == 0x00){ |
atravieso | 3:4039b6c8da2e | 96 | led4 = !led4; |
atravieso | 4:810c3971bb3e | 97 | messageSystem.printf("%c", messageBufferOutgoing[0]= 0xDE); |
atravieso | 4:810c3971bb3e | 98 | messageSystem.printf("%c", messageBufferOutgoing[1]= 0x21); |
atravieso | 4:810c3971bb3e | 99 | messageSystem.printf("%c", messageBufferOutgoing[2]= 0xFF); |
atravieso | 4:810c3971bb3e | 100 | messageSystem.printf("%c", messageBufferOutgoing[3]= 0x00); |
atravieso | 3:4039b6c8da2e | 101 | } |
atravieso | 3:4039b6c8da2e | 102 | } |
atravieso | 3:4039b6c8da2e | 103 | } |
atravieso | 3:4039b6c8da2e | 104 | } |
atravieso | 4:810c3971bb3e | 105 | else if (hexBufferIncoming[0] == 0xDB){ //Get Heading //Add space for responses |
atravieso | 3:4039b6c8da2e | 106 | if (hexBufferIncoming[1] == 0x24){ |
atravieso | 3:4039b6c8da2e | 107 | if (hexBufferIncoming[2] == 0xFF){ |
atravieso | 3:4039b6c8da2e | 108 | if (hexBufferIncoming[3] == 0x00){ |
atravieso | 3:4039b6c8da2e | 109 | led1 = !led1; |
atravieso | 4:810c3971bb3e | 110 | messageSystem.printf("%c", messageBufferOutgoing[0]= 0xDC); |
atravieso | 4:810c3971bb3e | 111 | messageSystem.printf("%c", messageBufferOutgoing[1]= 0x23); |
atravieso | 4:810c3971bb3e | 112 | messageSystem.printf("%c", messageBufferOutgoing[2]= 0x00); |
atravieso | 4:810c3971bb3e | 113 | messageSystem.printf("%c", messageBufferOutgoing[3]= 0x00); |
atravieso | 3:4039b6c8da2e | 114 | } |
atravieso | 3:4039b6c8da2e | 115 | } |
atravieso | 3:4039b6c8da2e | 116 | } |
atravieso | 3:4039b6c8da2e | 117 | } |
atravieso | 4:810c3971bb3e | 118 | else if (hexBufferIncoming[0] == 0xD9){ //Get Temperature //Add space for response |
atravieso | 3:4039b6c8da2e | 119 | if (hexBufferIncoming[1] == 0x26){ |
atravieso | 3:4039b6c8da2e | 120 | if (hexBufferIncoming[2] == 0xFF){ |
atravieso | 3:4039b6c8da2e | 121 | if (hexBufferIncoming[3] == 0x00){ |
atravieso | 3:4039b6c8da2e | 122 | led2 = !led2; |
atravieso | 4:810c3971bb3e | 123 | messageSystem.printf("%c", messageBufferOutgoing[0]= 0xDA); |
atravieso | 4:810c3971bb3e | 124 | messageSystem.printf("%c", messageBufferOutgoing[1]= 0x25); |
atravieso | 4:810c3971bb3e | 125 | messageSystem.printf("%c", messageBufferOutgoing[2]= 0x00); |
atravieso | 4:810c3971bb3e | 126 | messageSystem.printf("%c", messageBufferOutgoing[3]= 0x00); |
atravieso | 3:4039b6c8da2e | 127 | } |
atravieso | 3:4039b6c8da2e | 128 | } |
atravieso | 3:4039b6c8da2e | 129 | } |
atravieso | 3:4039b6c8da2e | 130 | } |
atravieso | 4:810c3971bb3e | 131 | else if (hexBufferIncoming[0] == 0xEE){ //Get Elapsed Time On //Add space for response |
atravieso | 3:4039b6c8da2e | 132 | if (hexBufferIncoming[1] == 0x11){ |
atravieso | 3:4039b6c8da2e | 133 | if (hexBufferIncoming[2] == 0x00){ |
atravieso | 3:4039b6c8da2e | 134 | if (hexBufferIncoming[3] == 0x01){ |
atravieso | 3:4039b6c8da2e | 135 | led3 = !led3; |
atravieso | 4:810c3971bb3e | 136 | messageSystem.printf("%c", messageBufferOutgoing[0]= 0xEF); |
atravieso | 4:810c3971bb3e | 137 | messageSystem.printf("%c", messageBufferOutgoing[1]= 0x10); |
atravieso | 4:810c3971bb3e | 138 | messageSystem.printf("%c", messageBufferOutgoing[2]= 0x00); |
atravieso | 4:810c3971bb3e | 139 | messageSystem.printf("%c", messageBufferOutgoing[3]= 0x00); |
atravieso | 3:4039b6c8da2e | 140 | } |
atravieso | 3:4039b6c8da2e | 141 | } |
atravieso | 3:4039b6c8da2e | 142 | } |
atravieso | 3:4039b6c8da2e | 143 | } |
atravieso | 4:810c3971bb3e | 144 | // memset(messageBufferIncoming, '\0', sizeof(messageBufferIncoming)); |
atravieso | 4:810c3971bb3e | 145 | memset(hexBufferIncoming, '\0', sizeof(hexBufferIncoming)); |
atravieso | 4:810c3971bb3e | 146 | memset(messageBufferOutgoing, '\0', sizeof(messageBufferOutgoing)); |
atravieso | 1:66e3217ec4ec | 147 | i = 0; |
atravieso | 1:66e3217ec4ec | 148 | messageReceived = true; |
atravieso | 1:66e3217ec4ec | 149 | count = 0; |
atravieso | 1:66e3217ec4ec | 150 | } |
atravieso | 0:4b4c18724370 | 151 | return; |
atravieso | 0:4b4c18724370 | 152 | } |
atravieso | 0:4b4c18724370 | 153 | |
atravieso | 1:66e3217ec4ec | 154 | void messageProcess(void) { |
atravieso | 3:4039b6c8da2e | 155 | // led1 = !led1; |
atravieso | 3:4039b6c8da2e | 156 | |
atravieso | 0:4b4c18724370 | 157 | messageReceived = false; |
atravieso | 0:4b4c18724370 | 158 | } |
atravieso | 0:4b4c18724370 | 159 | |
atravieso | 0:4b4c18724370 | 160 | |
atravieso | 0:4b4c18724370 | 161 | int main() { |
atravieso | 0:4b4c18724370 | 162 | |
atravieso | 0:4b4c18724370 | 163 | messageReceived = false; |
atravieso | 4:810c3971bb3e | 164 | // memset(messageBufferIncoming, '\0', sizeof(messageBufferIncoming)); |
atravieso | 4:810c3971bb3e | 165 | memset(hexBufferIncoming, '\0', sizeof(hexBufferIncoming)); |
atravieso | 4:810c3971bb3e | 166 | memset(messageBufferOutgoing, '\0', sizeof(messageBufferOutgoing)); |
atravieso | 0:4b4c18724370 | 167 | messageSystem.baud(9600); |
atravieso | 3:4039b6c8da2e | 168 | messageSystem.attach(&messageReceive, MODSERIAL::RxIrq); //Attach a C++ type object/method pointer as the callback. |
atravieso | 1:66e3217ec4ec | 169 | |
atravieso | 0:4b4c18724370 | 170 | // Fix Mbed library bug, see http://mbed.org/forum/bugs-suggestions/topic/1498 |
atravieso | 0:4b4c18724370 | 171 | LPC_GPIOINT->IO2IntClr = (1UL << 5) | (1UL << 4) | (1UL << 3) | (1UL << 2); |
atravieso | 0:4b4c18724370 | 172 | \ |
atravieso | 0:4b4c18724370 | 173 | while(1) { |
atravieso | 4:810c3971bb3e | 174 | //led1 = !led1; |
atravieso | 4:810c3971bb3e | 175 | wait(.05); |
atravieso | 0:4b4c18724370 | 176 | if (messageReceived) |
atravieso | 0:4b4c18724370 | 177 | { |
atravieso | 4:810c3971bb3e | 178 | //led2 = !led2; |
atravieso | 4:810c3971bb3e | 179 | wait(.05); |
atravieso | 0:4b4c18724370 | 180 | messageProcess(); |
atravieso | 0:4b4c18724370 | 181 | } |
atravieso | 0:4b4c18724370 | 182 | } |
atravieso | 0:4b4c18724370 | 183 | } |