ese519
Dependencies: MRF24J40 mbed-rtos mbed
main.cpp
- Committer:
- Jing_Qiu
- Date:
- 2015-03-21
- Revision:
- 0:ef293aec3a85
File content as of revision 0:ef293aec3a85:
#include "mbed.h" #include "MRF24J40.h" #include "Actuator.h" #include <string> #include <sstream> #include <vector> #include <stdio.h> /* printf, scanf, puts, NULL */ #include <stdlib.h> /* srand, rand */ #include <time.h> #include "rtos.h" DigitalOut myled(LED3); //for vest test DigitalOut led1(LED1); //for RF test PwmOut motor1(p25); PwmOut motor2(p26); PwmOut motor3(p23); PwmOut motor4(p24); PwmOut motor5(p22); PwmOut motor6(p21); Serial pc(USBTX, USBRX); Timeout to1; Timeout to2; Timeout to3; Timeout to4; Timeout to5; Timeout to6; Actuator actuator1(0,1,motor1,to1); Actuator actuator2(0,2,motor2,to2); Actuator actuator3(0,3,motor3,to3); Actuator actuator4(0,4,motor4,to4); Actuator actuator5(0,5,motor5,to5); Actuator actuator6(0,5,motor6,to6); // Timeout for vibration // RF tranceiver to link with handheld. MRF24J40 mrf(p11, p12, p13, p14, p21); char rxBuffer[128]; uint8_t rxLen; uint32_t duration; uint32_t viberation; int rf_receive(char *data, uint8_t maxLength) { uint8_t len = mrf.Receive((uint8_t *)data, maxLength); //pc.printf("data: %s, %d\r\n",data,len); uint8_t header[8]= {1, 8, 0, 0xA1, 0xB2, 0xC3, 0xD4, 0x00}; if(len > 10) { //Remove the header and footer of the message for(uint8_t i = 0; i < len-2; i++) { if(i<8) { //Make sure our header is valid first if(data[i] != header[i]) return 0; } else { data[i-8] = data[i]; } } pc.printf("Received: %s length:%d\r\n", data, ((int)len)-10); } return ((int)len)-10; } std::vector<std::string> split(const std::string &str, char delimiter, std::vector<std::string> extract) { std::stringstream ss(str); std::string item; while (std::getline(ss, item, delimiter)) { extract.push_back(item); } return extract; } void updateMotors(uint32_t dur) { float durinsec = dur/1000.0; if(actuator1.getM()) actuator1.getTo().attach(&actuator1,&Actuator::shot,durinsec); if(actuator2.getM()) actuator2.getTo().attach(&actuator2,&Actuator::shot,durinsec); if(actuator3.getM()) actuator3.getTo().attach(&actuator3,&Actuator::shot,durinsec); if(actuator4.getM()) actuator4.getTo().attach(&actuator4,&Actuator::shot,durinsec); if(actuator5.getM()) actuator5.getTo().attach(&actuator5,&Actuator::shot,durinsec); if(actuator6.getM()) actuator6.getTo().attach(&actuator6,&Actuator::shot,durinsec); } int main() { myled = 0; pc.baud(115200); pc.printf("Client Vest\r\n"); while(1){ // Check if any data was received. rxLen = rf_receive(rxBuffer,64); if(rxLen) { pc.printf("Received string %s \r\n",rxBuffer); std::vector<std::string> msg; /*split the buffer based on the delimiter ',' and save into extract*/ msg = split(std::string(rxBuffer),'/',msg); if(msg[0]=="all"||msg[0]=="vest") { std::vector<std::string> extract; extract = split(msg[3],',',extract); //vest is the second part of the msg if(!extract[0].compare("V")) { if(!extract[1].compare("A")) { const char* control = extract[2].c_str(); duration = std::atoi(extract[3].c_str()); // duration viberation = std::atoi(extract[4].c_str()); // viberation if(strlen(control)==6) { if(control[0]=='1'){ actuator1.setMotor(viberation); actuator1.setM(1); //updateMotors(duration); } if(control[1]=='1'){ actuator2.setMotor(viberation); actuator2.setM(1); //updateMotors(duration); } if(control[2]=='1'){ actuator3.setMotor(viberation); actuator3.setM(1); //updateMotors(duration); } if(control[3]=='1'){ actuator4.setMotor(viberation); actuator4.setM(1); updateMotors(duration); } if(control[4]=='1'){ actuator5.setMotor(viberation); actuator5.setM(1); //updateMotors(duration); } if(control[5]=='1'){ actuator6.setMotor(viberation); actuator6.setM(1); //updateMotors(duration); } updateMotors(duration); } else pc.printf("error!\r\n"); } if(!extract[1].compare("C")){ actuator1.setMotor(0); actuator1.setM(0); actuator2.setMotor(0); actuator2.setM(0); actuator3.setMotor(0); actuator3.setM(0); actuator4.setMotor(0); actuator4.setM(0); actuator5.setMotor(0); actuator5.setM(0); actuator6.setMotor(0); actuator6.setM(0); viberation = 0; updateMotors(duration); } } else{ pc.printf("error!\r\n"); } } } } }