April 28, 2016 1441 rev 0.1

Dependencies:   mbed-rtos mbed

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?

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