ese519
Dependencies: MRF24J40 mbed-rtos mbed
Revision 0:ef293aec3a85, committed 2015-03-21
- Comitter:
- Jing_Qiu
- Date:
- Sat Mar 21 02:52:43 2015 +0000
- Commit message:
- ese519
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Actuator.cpp Sat Mar 21 02:52:43 2015 +0000 @@ -0,0 +1,49 @@ +#include "Actuator.h" + + + Actuator::Actuator(int m_, int index_, PwmOut motor_, Timeout to_):m(m_),index(index_), motor(motor_), to(to_){} + Actuator::~Actuator(){} + int Actuator::getM(){ + return m; + } + + int Actuator::getIndex(){ + return index; + } + + PwmOut Actuator::getMotor() + { + return motor; + } + + Timeout Actuator::getTo() + { + return to; + } + + void Actuator::setM(int m_) + { + m = m_; + + } + void Actuator::setIndex(int idx) + { + index = idx; + } + + void Actuator::setMotor(double pw) + { + motor = pw; + } + + void Actuator::shot() + { + setM(0); + setMotor(0); + } + + //void Actuator::updateMotor() + //{ + // if(getM()) getTo().attach(this,&Actuator::shot,0.2); + // } +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Actuator.h Sat Mar 21 02:52:43 2015 +0000 @@ -0,0 +1,23 @@ +#include "mbed.h" +class Actuator{ + private: + int m; + int index; + PwmOut motor; + Timeout to; + + public: + Actuator(int m_, int index_, PwmOut motor_, Timeout to_); + virtual ~Actuator(); + int getM(); + int getIndex(); + PwmOut getMotor(); + Timeout getTo(); + void setM(int m); + void setIndex(int idx); + void setMotor(double pw); + + void shot(); + //void updateMotor(); + + }; \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MRF24J40.lib Sat Mar 21 02:52:43 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/hilgo/code/MRF24J40/#55d2672c4708
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sat Mar 21 02:52:43 2015 +0000 @@ -0,0 +1,185 @@ +#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"); + } + + + + } + + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-rtos.lib Sat Mar 21 02:52:43 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed-rtos/#9387d4c49609
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Sat Mar 21 02:52:43 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/9327015d4013 \ No newline at end of file