Ping Pong robot

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
JKleinRot
Date:
Mon Oct 13 13:30:59 2014 +0000
Parent:
1:7066a6113fbe
Child:
3:d36d3cc7ee23
Commit message:
14-10-13 eerste poging filters, eerste poging ticker, comments compleet

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Mon Oct 13 07:10:34 2014 +0000
+++ b/main.cpp	Mon Oct 13 13:30:59 2014 +0000
@@ -2,70 +2,104 @@
 #include "MODSERIAL.h"          //MODSERIAL bibliotheek inladen, communicatie met PC
 #include "encoder.h"            //Encoder bibliotheek inladen, communicatie met encoder
 
-#define BLABLA      waarde      //Constanten definiëren en een waarde toekennen
+#define SAMPLETIME_EMG  0.005   //Constanten definiëren en een waarde toekennen
+#define A1              2
+#define A2              -157.9
+#define B0              1
+#define B1              -1.964
+#define B2              0.9651
+#define C1              1.158
+#define C2              -0.4112
+#define D0              1
+#define D1              -1.709
+#define D2              0.9625
 
 //Pinverdeling en naamgeving variabelen
-Encoder motor_arm1(
-Encoder motor_arm2(             //
+Encoder motor_arm1(             //Encoder motor arm 1
+Encoder motor_arm2(             //Encoder motor arm 2   
 
-PwmOut pwm_motor_arm1
-PwmOut pwm_motor_arm2
+PwmOut pwm_motor_arm1(          //PWM naar motor arm 1
+PwmOut pwm_motor_arm2(          //PWM naar motor arm 2
 
-DigitalOut dir_motor_arm1
-DigitalOut dir_motor_arm2
+DigitalOut dir_motor_arm1(      //Richting motor arm 1
+DigitalOut dir_motor_arm2(      //Richting motor arm 2
 
-AnalogIn emg_bi
-AnalogIn emg_tri
+AnalogIn emg_bi(                //EMG signalen biceps 
+AnalogIn emg_tri(               //EMG signalen triceps
 
-Ticker sample_EMG
+Ticker ticker_sample_EMG(              //Uitlezen EMG iedere zoveel seconden
 
-//Floats, bools
+
+//Gedefinieerde datatypes en variabelen
 bool rust = false
 bool kalibratie_positie = false
 bool kalibratie_EMG = false
 char lcd_r1 = new char[16];     //LCD regel 1, 16 karakters
 char lcd_r2 = new char[16];     //LCD regel 2, 16 karakters
+void sample_bi_EMG              //Acties voor inladen EMG
+void sample_tri_EMG             //Acties voor inladen EMG
+float xbk                       //x(n) biceps
+float xbk1                      //x(n-1) biceps
+float xbk2                      //x(n-2) biceps
+float ybk                       //y(n) biceps
+float ybk1                      //y(n-1) biceps
+float ybk2                      //y(n-2) biceps
+
+float xtk                       //x(n) triceps
+float xtk1                      //x(n-1) triceps
+float xtk2                      //x(n-2) triceps
+float ytk                       //y(n) triceps
+float ytk1                      //y(n-1) triceps
+float ytk2                      //y(n-2) triceps    
+
 
 //Beginwaarden voor variabelen
 
+xbk1 = 0                        //xbk(n-1) = 0
+xbk2 = 0                        //xbk(n-2) = 0
+ybk1 = 0                        //ybk(n-1) = 0
+ybk2 = 0                        //ybk(n-2) = 0
+
+xtk1 = 0                        //xtk(n-1) = 0
+xtk2 = 0                        //xtk(n-2) = 0
+ytk1 = 0                        //ytk(n-1) = 0
+ytk2 = 0                        //ytk(n-2) = 0
+
+
+   //PC baud rate
+   pc.baud(38400)
+
 int main{
-   //pc baudrate
-   pc.baud(//opzoeken!!)
-   
-   //ticker maken die iedere zoveel seconden de EMG data inlaadt
-   sample_EMG.attach(setsample_EMGflag,0.005);
-   
-   while (1){                   //Oneindige while loop
+       
        if (rust = false && kalibratie_positie = false && kalibratie_EMG = false){
             lcd_r1 = " BMT M9   GR. 4 ";    //Tekst in LCD scherm
             lcd_r2 = "Hoi! Ik ben PIPO";    //Tekst in LCD scherm  
             wait(2);                        //2 seconden wachten
             rust = true
-       }
-         
+       } 
     
        if (rust = true && kalibratie_positie = false && kalibratie_EMG = false){
             wait(1);                        //1 seconde wachten
         
-            pwm_motor_arm1 = 0.02036        //Dutycycle/100
-            dir_motor_arm1 = // 1 of 0      //Richting motor
+            pwm_motor_arm1 = 0.02036        //Dutycycle motor arm 1/100
+            dir_motor_arm1 = // 1 of 0      //Draairichting motor arm 1
         
-            while(motor_arm1 < 363){        //Zolang aantal encoderpulsen < 363 --> PWM motor1 blijft gelijk
+            while(motor_arm1 < 363){        //Zolang aantal encoderpulsen < 363 --> PWM motor arm 1 blijft gelijk
                 pwm_motor_arm1 = 0.02036
             }
         
-            pwm_motor_arm1 = 0              //Na while loop PWM motor1 op nul
+            pwm_motor_arm1 = 0              //Na while loop PWM motor arm 1 op nul
             motor_arm1 = 0                  //Encoderpulsen op nul zetten
         
-            pwm_motor_arm2 = 0.02398
-            dir_motor_arm2 = // 1 of 0
+            pwm_motor_arm2 = 0.02398        //Dutycycle motor arm 2/100
+            dir_motor_arm2 = // 1 of 0      //Draairichting motor arm 2
         
-            while(motor_arm_2 < 787){
+            while(motor_arm_2 < 787){       //Zolang aantal encoderpulsen < 787 --> PWM motor arm 3 blijft gelijk
                 pwm_motor_arm2 = 0.02398
             }
         
-            pwm_motor_arm2 = 0
-            motor_arm2 = 0
+            pwm_motor_arm2 = 0              //Na while loop PWM motor arm 2 op nul
+            motor_arm2 = 0                  //Encoderpulsen op nul zetten
         
             lcd_r1 = "  Beginpositie  "     //Tekst in LCD scherm
             lcd_r2 = "    ingesteld   "     //Tekst in LCD scherm   
@@ -75,14 +109,48 @@
     
        if (rust = true && kalibratie_positie = true && kalibratie_EMG = false){
             wait(1);                        //1 seconde wachten
-        
-            ybk = emg_bi.read();            
-            ytk = emg_tri.read();
+            
+            //EMG inladen
+            void sample_EMG{
+                xbk = emg_bi.read();            //Uitlezen EMG signaal biceps
+                xtk = emg_tri.read();           //Uitlezen EMG signaal triceps
+            }
+            
+            ticker_sample_EMG.attach(sample_EMG,SAMPLETIME_EMG)     //Ticker gaat de void sample_EMG uitvoeren en dus de EMG uitlezen iedere 0.005 seconden
+            
+            //Detrend
+            
         
-            //detrend
-        
-        
-            //hoogdoorlaatfilter
+            //Hoogdoorlaatfilter 2Hz
+            while(true){
+                ybk = A1*ybk1-A2*ybk2+B0*xbk-B1*xbk1+B2*xbk2        //Overdracht 2e orde hoogdoorlaatfilter
+                
+                xbk2 = xbk1                                         //xbk(n-2) wordt xbk(n-1) in de volgende loop
+                xbk1 = xbk                                          //xbk(n-1) wordt xbk(n) in de volgende loop
+                ybk2 = ybk1                                         //ybk(n-2) wordt ybk(n-1) in de volgende loop
+                ybk1 = ybk                                          //ybk(n-1) wordt ybk(n) in de volgende loop
+                
+                ytk = A1*ytk1-A2*ytk2+B0*xtk-B1*xtk1+B2*xtk2        //Overdracht 2e orde hoogdoorlaatfilter
+                
+                xtk2 = xtk1                                         //xtk(n-2) wordt xtk(n-1) in de volgende loop
+                xtk1 = xtk                                          //xtk(n-1) wordt xtk(n) in de volgende loop
+                ytk2 = ytk1                                         //ytk(n-2) wordt ytk(n-1) in de volgende loop
+                ytk1 = ytk                                          //ytk(n-1) wordt ytk(n) in de volgende loop
+                
+                wait(SAMPLETIME_EMG);                               //0.005 seconden wachten
+            }
+            
+            //Bandstop 40 - 60Hz
+            while(true){
+                blabla = 
+            
+            //Rectifier
+            
+            
+            //Laagdoorlaatfilter 10Hz
+            
+            
+            //Moving average 4e orde