Export for Dan

Dependencies:   MODSERIAL mbed

Committer:
atravieso
Date:
Tue Nov 03 22:17:02 2015 +0000
Revision:
0:6861a3fd2ef0
Child:
1:26499ae2eda9
kinda works?

Who changed what in which revision?

UserRevisionLine numberNew contents of line
atravieso 0:6861a3fd2ef0 1
atravieso 0:6861a3fd2ef0 2
atravieso 0:6861a3fd2ef0 3 #include "mbed.h"
atravieso 0:6861a3fd2ef0 4 #include "MODSERIAL.h"
atravieso 0:6861a3fd2ef0 5
atravieso 0:6861a3fd2ef0 6 #define MESSAGE_BUFFER_SIZE 100
atravieso 0:6861a3fd2ef0 7
atravieso 0:6861a3fd2ef0 8 DigitalOut led1(LED1);
atravieso 0:6861a3fd2ef0 9 DigitalOut led2(LED2);
atravieso 0:6861a3fd2ef0 10 DigitalOut led3(LED3);
atravieso 0:6861a3fd2ef0 11 DigitalOut led4(LED4);
atravieso 0:6861a3fd2ef0 12
atravieso 0:6861a3fd2ef0 13 MODSERIAL Compass (p9, p10);
atravieso 0:6861a3fd2ef0 14
atravieso 0:6861a3fd2ef0 15 MODSERIAL messageSystem(p13, p14);
atravieso 0:6861a3fd2ef0 16
atravieso 0:6861a3fd2ef0 17 unsigned char messageBufferIncoming[MESSAGE_BUFFER_SIZE];
atravieso 0:6861a3fd2ef0 18 unsigned int hexBufferIncoming[MESSAGE_BUFFER_SIZE];
atravieso 0:6861a3fd2ef0 19 unsigned char messageBufferOutgoing[MESSAGE_BUFFER_SIZE];
atravieso 0:6861a3fd2ef0 20 unsigned int compassMessage[3];
atravieso 0:6861a3fd2ef0 21 int count = 0;
atravieso 0:6861a3fd2ef0 22 int i = 0;
atravieso 0:6861a3fd2ef0 23 bool messageReceived;
atravieso 0:6861a3fd2ef0 24
atravieso 0:6861a3fd2ef0 25
atravieso 0:6861a3fd2ef0 26 void messageReceive(MODSERIAL_IRQ_INFO *q) {
atravieso 0:6861a3fd2ef0 27 // Get the pointer to MODSERIAL object that invoked this callback.
atravieso 0:6861a3fd2ef0 28 led1 = !led1;
atravieso 0:6861a3fd2ef0 29 MODSERIAL *sys = q->serial;
atravieso 0:6861a3fd2ef0 30
atravieso 0:6861a3fd2ef0 31 //dereference rxGetLasChar() of sys object
atravieso 0:6861a3fd2ef0 32 unsigned int c = sys->rxGetLastChar(); // Returns the last byte to pass through the RX interrupt handler.
atravieso 0:6861a3fd2ef0 33
atravieso 0:6861a3fd2ef0 34 //add the character that triggered the interrupt to the incoming buffers
atravieso 0:6861a3fd2ef0 35 //I'm adding to an in buffer and a char buffer, but using the int buffer to determine which message it is
atravieso 0:6861a3fd2ef0 36 //if I want to use the char buffer to determine, then I need to use strcmp instead of =
atravieso 0:6861a3fd2ef0 37 if(i <=MESSAGE_BUFFER_SIZE){
atravieso 0:6861a3fd2ef0 38 messageBufferIncoming[i] = c;
atravieso 0:6861a3fd2ef0 39 hexBufferIncoming[i] = c;
atravieso 0:6861a3fd2ef0 40 messageSystem.printf("%x", hexBufferIncoming[i]);
atravieso 0:6861a3fd2ef0 41 i++;
atravieso 0:6861a3fd2ef0 42 }
atravieso 0:6861a3fd2ef0 43 count++;
atravieso 0:6861a3fd2ef0 44
atravieso 0:6861a3fd2ef0 45 /*if (count == 3){ //send to compass and read the compasses response
atravieso 0:6861a3fd2ef0 46 led3 = !led3;
atravieso 0:6861a3fd2ef0 47 if (hexBufferIncoming[0] == 0xA4){ //Start Calibration
atravieso 0:6861a3fd2ef0 48 if (hexBufferIncoming[1] == 0x01){
atravieso 0:6861a3fd2ef0 49 if (hexBufferIncoming[2] == 0xA0){
atravieso 0:6861a3fd2ef0 50 led1 = !led1;
atravieso 0:6861a3fd2ef0 51 messageSystem.printf("%c", hexBufferIncoming[0]);
atravieso 0:6861a3fd2ef0 52 messageSystem.printf("%c", hexBufferIncoming[1]);
atravieso 0:6861a3fd2ef0 53 messageSystem.printf("%c", hexBufferIncoming[2]);
atravieso 0:6861a3fd2ef0 54
atravieso 0:6861a3fd2ef0 55
atravieso 0:6861a3fd2ef0 56 }
atravieso 0:6861a3fd2ef0 57 }
atravieso 0:6861a3fd2ef0 58 }
atravieso 0:6861a3fd2ef0 59 }
atravieso 0:6861a3fd2ef0 60
atravieso 0:6861a3fd2ef0 61 */
atravieso 0:6861a3fd2ef0 62
atravieso 0:6861a3fd2ef0 63
atravieso 0:6861a3fd2ef0 64 memset(messageBufferIncoming, '\0', sizeof(messageBufferIncoming));
atravieso 0:6861a3fd2ef0 65 memset(hexBufferIncoming, '\0', sizeof(hexBufferIncoming));
atravieso 0:6861a3fd2ef0 66 memset(messageBufferOutgoing, '\0', sizeof(messageBufferOutgoing));
atravieso 0:6861a3fd2ef0 67 i = 0;
atravieso 0:6861a3fd2ef0 68 messageReceived = true;
atravieso 0:6861a3fd2ef0 69 count = 0;
atravieso 0:6861a3fd2ef0 70 //} //end of if count == 4
atravieso 0:6861a3fd2ef0 71
atravieso 0:6861a3fd2ef0 72
atravieso 0:6861a3fd2ef0 73 return;
atravieso 0:6861a3fd2ef0 74 }
atravieso 0:6861a3fd2ef0 75
atravieso 0:6861a3fd2ef0 76 void messageProcess(void) {
atravieso 0:6861a3fd2ef0 77 // led1 = !led1;
atravieso 0:6861a3fd2ef0 78 messageReceived = false;
atravieso 0:6861a3fd2ef0 79 }
atravieso 0:6861a3fd2ef0 80
atravieso 0:6861a3fd2ef0 81
atravieso 0:6861a3fd2ef0 82
atravieso 0:6861a3fd2ef0 83
atravieso 0:6861a3fd2ef0 84
atravieso 0:6861a3fd2ef0 85 int main() {
atravieso 0:6861a3fd2ef0 86
atravieso 0:6861a3fd2ef0 87 messageReceived = false;
atravieso 0:6861a3fd2ef0 88 memset(messageBufferIncoming, '\0', sizeof(messageBufferIncoming));
atravieso 0:6861a3fd2ef0 89 memset(hexBufferIncoming, '\0', sizeof(hexBufferIncoming));
atravieso 0:6861a3fd2ef0 90 memset(messageBufferOutgoing, '\0', sizeof(messageBufferOutgoing));
atravieso 0:6861a3fd2ef0 91 messageSystem.baud(9600);
atravieso 0:6861a3fd2ef0 92 Compass.attach(&messageReceive, MODSERIAL::RxIrq); //Attach a C++ type object/method pointer as the callback.
atravieso 0:6861a3fd2ef0 93
atravieso 0:6861a3fd2ef0 94
atravieso 0:6861a3fd2ef0 95
atravieso 0:6861a3fd2ef0 96 // Fix Mbed library bug, see http://mbed.org/forum/bugs-suggestions/topic/1498
atravieso 0:6861a3fd2ef0 97 LPC_GPIOINT->IO2IntClr = (1UL << 5) | (1UL << 4) | (1UL << 3) | (1UL << 2);
atravieso 0:6861a3fd2ef0 98 \
atravieso 0:6861a3fd2ef0 99 while(1) {
atravieso 0:6861a3fd2ef0 100 //led1 = !led1;
atravieso 0:6861a3fd2ef0 101 wait(.05);
atravieso 0:6861a3fd2ef0 102 compassMessage[0] = 0xA3;
atravieso 0:6861a3fd2ef0 103 // compassMessage[1] = 0x02;
atravieso 0:6861a3fd2ef0 104 compassMessage[2] = 0xA1;
atravieso 0:6861a3fd2ef0 105 Compass.printf("%x", compassMessage[0]);
atravieso 0:6861a3fd2ef0 106 Compass.printf("%x", compassMessage[1]);
atravieso 0:6861a3fd2ef0 107 Compass.printf("%x", compassMessage[2]);
atravieso 0:6861a3fd2ef0 108
atravieso 0:6861a3fd2ef0 109 if (messageReceived)
atravieso 0:6861a3fd2ef0 110 {
atravieso 0:6861a3fd2ef0 111 //led2 = !led2;
atravieso 0:6861a3fd2ef0 112 messageProcess();
atravieso 0:6861a3fd2ef0 113 }
atravieso 0:6861a3fd2ef0 114 }
atravieso 0:6861a3fd2ef0 115 }