Export for Dan

Dependencies:   mbed MODSERIAL1

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?

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