2014-10-15 Arm 1 naar thuispositie. Eerste poging, fout in keep_in_range

Dependencies:   Encoder MODSERIAL TextLCD mbed mbed-dsp

Revision:
6:3b6fad529520
Parent:
5:a1dcd605dd3d
Child:
7:dd3cba61b34b
--- a/main.cpp	Thu Oct 16 13:32:57 2014 +0000
+++ b/main.cpp	Thu Oct 16 15:09:46 2014 +0000
@@ -4,9 +4,9 @@
 #include "TextLCD.h"        //LCD scherm bibliotheek inladen, communicatie met LCD scherm
 
 //Constanten definiëren en waarde geven
-#define SAMPLETIME_REGELAAR     0.005
-#define KP                      1
-#define SAMPLETIME_EMG          0.005
+#define SAMPLETIME_REGELAAR     0.005       //Sampletijd ticker regelaar motor
+#define KP                      1           //Factor proprotionele regelaar
+#define SAMPLETIME_EMG          0.005       //Sampletijd ticker EMG meten
 
 //Pinverdeling en naamgeving variabelen
 TextLCD         lcd(PTD2, PTB8, PTB9, PTB10, PTB11, PTE2);      //LCD scherm
@@ -15,56 +15,54 @@
 PwmOut pwm_motor_arm1(PTA5);            //PWM naar motor arm 1
 DigitalOut dir_motor_arm1(PTD1);        //Richting van motor arm 1
 Encoder puls_motor_arm1(PTD0, PTC9);    //Encoder pulsen tellen van motor arm 1
-PwmOut pwm_motor_arm2(PTA12);
-DigitalOut dir_motor_arm2(PTD3);
-Encoder puls_motor_arm2(PTD4, PTC8);
-AnalogIn EMG_bi(PTB1);
+PwmOut pwm_motor_arm2(PTA12);           //PWM naar motor arm 2
+DigitalOut dir_motor_arm2(PTD3);        //Ricting van motor arm 2
+Encoder puls_motor_arm2(PTD4, PTC8);    //Encoder pulsen tellen van motor arm 2
+AnalogIn EMG_bi(PTB1);                  //Meten EMG signaal biceps
 
 
-Ticker ticker_regelaar;  
-Ticker ticker_EMG;                
+Ticker ticker_regelaar;                 //Ticker voor regelaar motor
+Ticker ticker_EMG;                      //Ticker voor EMG meten
 
-//Gedefinieerde datatypen en naamgeving
+//Gedefinieerde datatypen en naamgeving en beginwaarden
 bool rust = false;                      //Bool voor controleren volgorde in programma
 bool kalibratie_positie_arm1 = false;   //Bool voor controleren volgorde in programma
-bool kalibratie_positie_arm2 = false;   
-bool kalibratie_EMG_bi = false;            //Bool voor controleren volgorde in programma
-bool kalibratie_EMG_tri = false;
+bool kalibratie_positie_arm2 = false;   //Bool voor controleren volgorde in programma
+bool kalibratie_EMG_bi = false;         //Bool voor controleren volgorde in programma
+bool kalibratie_EMG_tri = false;        //Bool voor controleren volgorde in programma
 
-char *lcd_r1 = new char[16];             //Char voor tekst op eerste regel LCD scherm
-char *lcd_r2 = new char[16];             //Char voor tekst op tweede regel LCD scherm
+char *lcd_r1 = new char[16];            //Char voor tekst op eerste regel LCD scherm
+char *lcd_r2 = new char[16];            //Char voor tekst op tweede regel LCD scherm
 
-volatile bool regelaar_ticker_flag;
-void setregelaar_ticker_flag(){
-    regelaar_ticker_flag = true;
+volatile bool regelaar_ticker_flag;     //Definiëren flag als bool die verandert kan worden in programma
+void setregelaar_ticker_flag(){         //Setregelaar_ticker_flag zet de regelaar_ticker_flag op true
+    regelaar_ticker_flag = true;        
 }
 
-volatile bool regelaar_EMG_flag;
-void setregelaar_EMG_flag(){
-    regelaar_EMG_flag = true;
+volatile bool regelaar_EMG_flag;        //Definiëren flag als bool die verandert kan worden in programma
+void setregelaar_EMG_flag(){            //Setregelaar_EMG_flag zet de regelaar_EMG_flag op true
+    regelaar_EMG_flag = true;           
 }
 
-void keep_in_range(float * in, float min, float max){
-    if (*in < min){
+void keep_in_range(float * in, float min, float max){       //Zorgt ervoor dat een getal niet buiten een bepaald minimum en maximum komt
+    if (*in < min){                     //Als de waarde kleiner is als het minimum wordt de waarde het minimum
         *in = min;
     }
-    if (*in > max){
+    if (*in > max){                     //Als de waarde groter is dan het maximum is de waarde het maximum
         *in = max;
     }
-    else {
+    else {                              //In alle andere gevallen is de waarde de waarde zelf
         *in = *in;
     }
 }
     
 
-int puls_arm1_home = 363;
-int puls_arm2_home = 787;
-float pwm_to_motor_arm1;
-float pwm_to_motor_arm2;
-float xbk;
-int i = 0;
-
-//Beginwaarden voor variabelen
+int puls_arm1_home = 363;           //Aantal pulsen die de encoder moet hebben geteld wanneer arm 1 op de thuispositie is
+int puls_arm2_home = 787;           //Aantal pulsen die de encoder moet hebben geteld wanneer arm 2 op de thuispositie is
+float pwm_to_motor_arm1;            //PWM output naar motor arm 1
+float pwm_to_motor_arm2;            //PWM output naar motor arm 2
+float xbk;                          //Gemeten EMG waarde biceps in de kalibratie
+int i = 0;                          //
 
 
 int main() {
@@ -90,25 +88,25 @@
         ticker_regelaar.attach(setregelaar_ticker_flag,SAMPLETIME_REGELAAR);       //Ticker iedere zoveel seconde de flag op laten steken
         
         while(rust == true && kalibratie_positie_arm1 == false && kalibratie_positie_arm2 == false && kalibratie_EMG_bi == false && kalibratie_EMG_tri == false) {
-            while(regelaar_ticker_flag != true) ;
-            regelaar_ticker_flag = false;
+            while(regelaar_ticker_flag != true) ;           //Als geen flag opgestoken, dan niks doen, wel flag, dan uit de while loop en door naar volgende regel
+            regelaar_ticker_flag = false;                   //Flag weer naar beneden, zodat deze straks weer omhoog kan
             
-            pwm_to_motor_arm1 = (puls_arm1_home - puls_motor_arm1.getPosition())*KP;
-            keep_in_range(&pwm_to_motor_arm1, -1, 1);
+            pwm_to_motor_arm1 = (puls_arm1_home - puls_motor_arm1.getPosition())*KP;        //PWM naar motor is het verschil tussen het voorgestelde aantal pulsen en de huidige positie maal een factor
+            keep_in_range(&pwm_to_motor_arm1, -1, 1);                                       //PWM moet tussen 1 en -1 blijven (niet meer dan 100% dutycycle)
             
-            if (pwm_to_motor_arm1 > 0){
+            if (pwm_to_motor_arm1 > 0){                     //Als PWM is positief, dan richting 1
                 dir_motor_arm1.write(1);
             }
-            else {
+            else {                                          //Anders richting nul
                 dir_motor_arm1.write(0);
             }
-            pwm_motor_arm1.write(abs(pwm_to_motor_arm1));
+            pwm_motor_arm1.write(abs(pwm_to_motor_arm1));   //Output PWM naar motor is de absolute waarde van de berekende PWM
             
-            if (pwm_to_motor_arm1 == 0) {
+            if (pwm_to_motor_arm1 == 0) {                           //Als het verschil tussen de voorgestelde en huidige positie nul is wordt de while loop gestopt (condities kloppen niet meer)
                  kalibratie_positie_arm1 = true;
-                 pc.printf("Arm 1 naar thuispositie compleet");
+                 pc.printf("Arm 1 naar thuispositie compleet");     //Tekst voor controle Arm 1 naar thuispositie
             }        
-            wait(1);
+            wait(1);        //Een seconde wachten
             
         }   
     }
@@ -120,46 +118,47 @@
         //ticker_regelaar.attach(setregelaar_ticker_flag,SAMPLETIME_REGELAAR);       //Ticker iedere zoveel seconde de flag op laten steken
         
         while(rust == true && kalibratie_positie_arm1 == true && kalibratie_positie_arm2 == false && kalibratie_EMG_bi == false && kalibratie_EMG_tri == false) {
-            while(regelaar_ticker_flag != true) ;
-            regelaar_ticker_flag = false;
+            while(regelaar_ticker_flag != true) ;           //Als geen flag opgestoken, dan niks doen, wel flag, dan uit de while loop en door naar volgende regel
+            regelaar_ticker_flag = false;                   //Flag weer naar beneden, zodat deze straks weer omhoog kan
             
-            pwm_to_motor_arm2 = (puls_arm2_home - puls_motor_arm2.getPosition())*KP;
-            keep_in_range(&pwm_to_motor_arm2, -1, 1);
+            pwm_to_motor_arm2 = (puls_arm2_home - puls_motor_arm2.getPosition())*KP;        //PWM naar motor is het verschil tussen het voorgestelde aantal pulsen en de huidige positie maal een factor
+            keep_in_range(&pwm_to_motor_arm2, -1, 1);                                       //PWM moet tussen 1 en -1 blijven (niet meer dan 100% dutycycle)
             
-            if (pwm_to_motor_arm2 > 0){
+            if (pwm_to_motor_arm2 > 0){                     //Als PWM is positief, dan richting 1
                 dir_motor_arm2.write(1);
             }
-            else {
+            else {                                          //Anders richting nul
                 dir_motor_arm2.write(0);
             }
-            pwm_motor_arm2.write(abs(pwm_to_motor_arm2));
+            pwm_motor_arm2.write(abs(pwm_to_motor_arm2));   //Output PWM naar motor is de absolute waarde van de berekende PWM
             
-            if (pwm_to_motor_arm2 == 0) {
+            if (pwm_to_motor_arm2 == 0) {                           //Als het verschil tussen de voorgestelde en huidige positie nul is wordt de while loop gestopt (condities kloppen niet meer)
                  kalibratie_positie_arm2 = true;
-                 pc.printf("Arm 2 naar thuispositie compleet");
+                 pc.printf("Arm 2 naar thuispositie compleet");     //Tekst voor controle Arm 2 naar thuispositie
             }        
         }
-        wait(1); 
-        ticker_regelaar.detach();
+        wait(1);            //Een seconde wachten
+        ticker_regelaar.detach();       //Ticker detachten, ticker doet nu niks meer
     }
     
     //Ticker voor kalibratie
     if (rust == true && kalibratie_positie_arm1 == true && kalibratie_positie_arm2 == true && kalibratie_EMG_bi == false && kalibratie_EMG_tri == false){
         
-        ticker_EMG.attach(setregelaar_EMG_flag,SAMPLETIME_EMG);
-        pc.printf("Ticker voor kalibratie compleet");
+        ticker_EMG.attach(setregelaar_EMG_flag,SAMPLETIME_EMG);     //Ticker iedere zoveel seconden de flag laten opsteken
+        pc.printf("Ticker voor kalibratie compleet");               //Tekst voor controle Ticker voor kalibratie 
         
         //5 seconden EMG biceps meten
         
-        wait(1);
-        lcd_r1 = " EMG kalibratie ";
-        lcd_r2 = " Span biceps aan";
+        wait(1);                            //Een seconde wachten
+        lcd_r1 = " EMG kalibratie ";        //Tekst op eerste regel van LCD scherm
+        lcd_r2 = " Span biceps aan";        //Tekst op tweede regel van LCD scherm
+        wait(2);                            //Twee seconden wachten
         
         for (i=0 ,i<5000, i++){
-            while(setregelaar_EMG_flag != true) ;
-            regelaar_EMG_flag = false;
+            while(setregelaar_EMG_flag != true) ;           //Als geen flag opgestoken, dan niks doen, wel flag, dan uit de while loop en door naar volgende regel
+            regelaar_EMG_flag = false;                      //Flag weer naar beneden, zodat deze straks weer omhoog kan
             
-            xbk = EMG_bi.read();
+            xbk = EMG_bi.read();            //EMG signaal uitlezen
         }
             
     }