Amanda Travieso
/
Compass
Export for Dan
DC-4E.cpp@0:6861a3fd2ef0, 2015-11-03 (annotated)
- 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?
User | Revision | Line number | New 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 | } |