CECS 490B RTOS
/
LOC_slave_firmware_042816_v01
April 28, 2016 1441 rev 0.1
main.cpp@0:c04153e0a141, 2016-04-28 (annotated)
- Committer:
- lhinh3431
- Date:
- Thu Apr 28 21:42:02 2016 +0000
- Revision:
- 0:c04153e0a141
April 28, 2016 1441 rev 0.1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lhinh3431 | 0:c04153e0a141 | 1 | #include "mbed.h" |
lhinh3431 | 0:c04153e0a141 | 2 | #include "cmsis_os.h" |
lhinh3431 | 0:c04153e0a141 | 3 | #include <stdlib.h> |
lhinh3431 | 0:c04153e0a141 | 4 | #include <stdio.h> |
lhinh3431 | 0:c04153e0a141 | 5 | #include <iostream> |
lhinh3431 | 0:c04153e0a141 | 6 | #include <string> |
lhinh3431 | 0:c04153e0a141 | 7 | #include <ctype.h> |
lhinh3431 | 0:c04153e0a141 | 8 | |
lhinh3431 | 0:c04153e0a141 | 9 | RawSerial pc(USBTX,USBRX); |
lhinh3431 | 0:c04153e0a141 | 10 | RawSerial XBEE(p37,p31); |
lhinh3431 | 0:c04153e0a141 | 11 | PwmOut pwm(p27); |
lhinh3431 | 0:c04153e0a141 | 12 | AnalogIn pot(p15); |
lhinh3431 | 0:c04153e0a141 | 13 | |
lhinh3431 | 0:c04153e0a141 | 14 | #define ZERO (float)0.01 |
lhinh3431 | 0:c04153e0a141 | 15 | #define BAUD_RATE (int)115200 |
lhinh3431 | 0:c04153e0a141 | 16 | |
lhinh3431 | 0:c04153e0a141 | 17 | float pot_value = 0.0; |
lhinh3431 | 0:c04153e0a141 | 18 | bool slave_manual = false; |
lhinh3431 | 0:c04153e0a141 | 19 | bool xbee_read_done = false; |
lhinh3431 | 0:c04153e0a141 | 20 | bool xbee_decode_done = false; |
lhinh3431 | 0:c04153e0a141 | 21 | //string received = ""; // May need to delete |
lhinh3431 | 0:c04153e0a141 | 22 | string sent = ""; |
lhinh3431 | 0:c04153e0a141 | 23 | string slaveMode = ""; |
lhinh3431 | 0:c04153e0a141 | 24 | char xbeeBuffer [8] = {}; |
lhinh3431 | 0:c04153e0a141 | 25 | int sDimAmt = 0; |
lhinh3431 | 0:c04153e0a141 | 26 | int sTemp = 0; |
lhinh3431 | 0:c04153e0a141 | 27 | int data [6] = {}; |
lhinh3431 | 0:c04153e0a141 | 28 | |
lhinh3431 | 0:c04153e0a141 | 29 | // XBEE Receive thread |
lhinh3431 | 0:c04153e0a141 | 30 | void xbee_receive(void const *args) |
lhinh3431 | 0:c04153e0a141 | 31 | { |
lhinh3431 | 0:c04153e0a141 | 32 | while(1) |
lhinh3431 | 0:c04153e0a141 | 33 | { |
lhinh3431 | 0:c04153e0a141 | 34 | while(XBEE.readable()) |
lhinh3431 | 0:c04153e0a141 | 35 | { |
lhinh3431 | 0:c04153e0a141 | 36 | int i = 0; |
lhinh3431 | 0:c04153e0a141 | 37 | char temp; |
lhinh3431 | 0:c04153e0a141 | 38 | temp = XBEE.getc(); |
lhinh3431 | 0:c04153e0a141 | 39 | xbeeBuffer[i] = temp; |
lhinh3431 | 0:c04153e0a141 | 40 | i = i+1; |
lhinh3431 | 0:c04153e0a141 | 41 | osDelay(10); |
lhinh3431 | 0:c04153e0a141 | 42 | } |
lhinh3431 | 0:c04153e0a141 | 43 | xbee_read_done = true; |
lhinh3431 | 0:c04153e0a141 | 44 | pc.printf(xbeeBuffer); // DEBUG |
lhinh3431 | 0:c04153e0a141 | 45 | } |
lhinh3431 | 0:c04153e0a141 | 46 | } |
lhinh3431 | 0:c04153e0a141 | 47 | |
lhinh3431 | 0:c04153e0a141 | 48 | // XBEE Decode thread |
lhinh3431 | 0:c04153e0a141 | 49 | void xbee_decode(void const *args) |
lhinh3431 | 0:c04153e0a141 | 50 | { |
lhinh3431 | 0:c04153e0a141 | 51 | while(1) |
lhinh3431 | 0:c04153e0a141 | 52 | { |
lhinh3431 | 0:c04153e0a141 | 53 | if(xbee_read_done) |
lhinh3431 | 0:c04153e0a141 | 54 | { |
lhinh3431 | 0:c04153e0a141 | 55 | xbee_read_done = false; // Reset flag |
lhinh3431 | 0:c04153e0a141 | 56 | |
lhinh3431 | 0:c04153e0a141 | 57 | for (int i = 0; i < 6; i++) |
lhinh3431 | 0:c04153e0a141 | 58 | { |
lhinh3431 | 0:c04153e0a141 | 59 | data[i] = (int)xbeeBuffer[i+2]-48; |
lhinh3431 | 0:c04153e0a141 | 60 | } |
lhinh3431 | 0:c04153e0a141 | 61 | |
lhinh3431 | 0:c04153e0a141 | 62 | sDimAmt = (data[0]*100)+(data[1]*10)+(data[2]); //Data 0:2 is the 3 digit percentiloe for Master |
lhinh3431 | 0:c04153e0a141 | 63 | sTemp = (data[3]*100)+(data[4]*10)+(data[5]); |
lhinh3431 | 0:c04153e0a141 | 64 | pc.printf("SLave dim amount: %03d\n\r", sDimAmt); |
lhinh3431 | 0:c04153e0a141 | 65 | xbee_decode_done = true; |
lhinh3431 | 0:c04153e0a141 | 66 | } |
lhinh3431 | 0:c04153e0a141 | 67 | osDelay(10); |
lhinh3431 | 0:c04153e0a141 | 68 | } |
lhinh3431 | 0:c04153e0a141 | 69 | } |
lhinh3431 | 0:c04153e0a141 | 70 | |
lhinh3431 | 0:c04153e0a141 | 71 | // XBEE Action thread |
lhinh3431 | 0:c04153e0a141 | 72 | void xbee_action(void const *args) |
lhinh3431 | 0:c04153e0a141 | 73 | { |
lhinh3431 | 0:c04153e0a141 | 74 | while(1) |
lhinh3431 | 0:c04153e0a141 | 75 | { |
lhinh3431 | 0:c04153e0a141 | 76 | pot_value = pot.read(); |
lhinh3431 | 0:c04153e0a141 | 77 | if(pot_value > ZERO) |
lhinh3431 | 0:c04153e0a141 | 78 | { |
lhinh3431 | 0:c04153e0a141 | 79 | slave_manual = true; |
lhinh3431 | 0:c04153e0a141 | 80 | pwm.write(pot_value); |
lhinh3431 | 0:c04153e0a141 | 81 | slaveMode = "M"; |
lhinh3431 | 0:c04153e0a141 | 82 | } |
lhinh3431 | 0:c04153e0a141 | 83 | else if (pot_value < ZERO) |
lhinh3431 | 0:c04153e0a141 | 84 | { |
lhinh3431 | 0:c04153e0a141 | 85 | slave_manual = false; |
lhinh3431 | 0:c04153e0a141 | 86 | slaveMode = "A"; |
lhinh3431 | 0:c04153e0a141 | 87 | } |
lhinh3431 | 0:c04153e0a141 | 88 | |
lhinh3431 | 0:c04153e0a141 | 89 | if(xbee_decode_done) |
lhinh3431 | 0:c04153e0a141 | 90 | { |
lhinh3431 | 0:c04153e0a141 | 91 | xbee_decode_done = false; |
lhinh3431 | 0:c04153e0a141 | 92 | sent = "S" + slaveMode; |
lhinh3431 | 0:c04153e0a141 | 93 | for(int i = 0; i < 6; i++) |
lhinh3431 | 0:c04153e0a141 | 94 | { |
lhinh3431 | 0:c04153e0a141 | 95 | sent += xbeeBuffer[i+2]-48; |
lhinh3431 | 0:c04153e0a141 | 96 | } |
lhinh3431 | 0:c04153e0a141 | 97 | pc.printf("%s", sent); |
lhinh3431 | 0:c04153e0a141 | 98 | } |
lhinh3431 | 0:c04153e0a141 | 99 | osDelay(10); |
lhinh3431 | 0:c04153e0a141 | 100 | } |
lhinh3431 | 0:c04153e0a141 | 101 | } |
lhinh3431 | 0:c04153e0a141 | 102 | |
lhinh3431 | 0:c04153e0a141 | 103 | osThreadDef(xbee_receive, osPriorityNormal, DEFAULT_STACK_SIZE); |
lhinh3431 | 0:c04153e0a141 | 104 | osThreadDef(xbee_decode, osPriorityNormal, DEFAULT_STACK_SIZE); |
lhinh3431 | 0:c04153e0a141 | 105 | osThreadDef(xbee_action, osPriorityNormal, DEFAULT_STACK_SIZE); |
lhinh3431 | 0:c04153e0a141 | 106 | |
lhinh3431 | 0:c04153e0a141 | 107 | int main () |
lhinh3431 | 0:c04153e0a141 | 108 | { |
lhinh3431 | 0:c04153e0a141 | 109 | osThreadCreate(osThread(xbee_receive),NULL); |
lhinh3431 | 0:c04153e0a141 | 110 | osThreadCreate(osThread(xbee_decode),NULL); |
lhinh3431 | 0:c04153e0a141 | 111 | osThreadCreate(osThread(xbee_action),NULL); |
lhinh3431 | 0:c04153e0a141 | 112 | pc.baud(BAUD_RATE); |
lhinh3431 | 0:c04153e0a141 | 113 | XBEE.baud(BAUD_RATE); |
lhinh3431 | 0:c04153e0a141 | 114 | while(1) |
lhinh3431 | 0:c04153e0a141 | 115 | { |
lhinh3431 | 0:c04153e0a141 | 116 | osDelay(30); |
lhinh3431 | 0:c04153e0a141 | 117 | } |
lhinh3431 | 0:c04153e0a141 | 118 | } |
lhinh3431 | 0:c04153e0a141 | 119 |