ese519

Dependencies:   MRF24J40 mbed-rtos mbed

Files at this revision

API Documentation at this revision

Comitter:
Jing_Qiu
Date:
Sat Mar 21 02:52:43 2015 +0000
Commit message:
ese519

Changed in this revision

Actuator.cpp Show annotated file Show diff for this revision Revisions of this file
Actuator.h Show annotated file Show diff for this revision Revisions of this file
MRF24J40.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-rtos.lib Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r ef293aec3a85 Actuator.cpp
--- /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);   
+   // }
+    
diff -r 000000000000 -r ef293aec3a85 Actuator.h
--- /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
diff -r 000000000000 -r ef293aec3a85 MRF24J40.lib
--- /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
diff -r 000000000000 -r ef293aec3a85 main.cpp
--- /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");
+                    }
+
+            
+        
+        }
+          
+        }
+    }
+}
diff -r 000000000000 -r ef293aec3a85 mbed-rtos.lib
--- /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
diff -r 000000000000 -r ef293aec3a85 mbed.bld
--- /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