programma voor stofzuigrobot

Dependencies:   Coordinates mbed LCD Servo HCSR04 MMA8451Q

Files at this revision

API Documentation at this revision

Comitter:
firstsignupoftheweek
Date:
Wed Jul 03 09:52:44 2019 +0000
Commit message:
Commitment

Changed in this revision

Coordinates.lib Show annotated file Show diff for this revision Revisions of this file
HCSR04.lib Show annotated file Show diff for this revision Revisions of this file
LCD.lib Show annotated file Show diff for this revision Revisions of this file
MMA8451Q.lib Show annotated file Show diff for this revision Revisions of this file
Servo.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.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Coordinates.lib	Wed Jul 03 09:52:44 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/firstsignupoftheweek/code/Coordinates/#95200a539562
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HCSR04.lib	Wed Jul 03 09:52:44 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/antoniolinux/code/HCSR04/#86b2086be101
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LCD.lib	Wed Jul 03 09:52:44 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/firstsignupoftheweek/code/LCD/#f363e3d1f212
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MMA8451Q.lib	Wed Jul 03 09:52:44 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/emilmont/code/MMA8451Q/#c4d879a39775
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Servo.lib	Wed Jul 03 09:52:44 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/firstsignupoftheweek/code/Servo/#400439bce842
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Jul 03 09:52:44 2019 +0000
@@ -0,0 +1,640 @@
+#include "mbed.h"
+#include "hcsr04.h"
+#include "servo.h"
+#include "coordinates.h"
+//#include "MMA8451Q.h"
+#include <LiquidCrystal_I2C.h>
+#include <string>
+//#include <vector>
+
+
+InterruptIn startbutton(PC_10);
+InterruptIn pausebutton(PC_12);
+
+Timer readtimer;
+//acceleratie sensor, need SCL and SDA
+//MMA8451Q sensor(D14, D15, 0x1D<<1);//D14: SDA, D15: SCL
+LiquidCrystal_I2C lcd(0x27<<1, 16, 2);
+
+//ultrasoon sensoren
+HCSR04 sonarback(PB_12, PA_12);   //PB_12: trig, PA_12: echo
+HCSR04 sonarright(D5, D4);  //D5: trig, D4: echo
+HCSR04 sonarfront(PB_7, PA_15);  //PB_7: trig, PA_15: echo
+HCSR04 sonarleft(D9, D7);   //D6: trig, D7: echo
+//HCSR04 sonarbottomfront(D11, D10);  //D11: trig, D10: echo
+//HCSR04 sonarbottomback(D13, D12);   //D13: trig, D12: echo
+
+//sharps
+AnalogIn sensorfront(PA_0);
+AnalogIn sensorback(PA_1);
+
+//servos
+Servo servoRV = Servo(-10, 40, 'L', PA_11);
+Servo servoLV = Servo(30, 30, 'R', PB_15);
+Servo servoRA = Servo(-60, -60, 'R', PB_13);
+Servo servoLA = Servo(-20, -10, 'L', PB_14);
+   
+
+//motoren
+//pins: LV; PC_10, PC_12 RV;PA_13, PA_14 LA; PC_13, PC_14 RA; PC_2, PC_3
+DigitalOut RVV(PA_13);
+DigitalOut RVA(PA_14);
+DigitalOut LVV(PC_10);
+DigitalOut LVA(PC_12);
+DigitalOut RAV(PC_13);
+DigitalOut RAA(PC_14);
+DigitalOut LAV(PC_2);
+DigitalOut LAA(PC_3);
+
+PwmOut speed();
+
+#define mindist 5           //minimum afstand tot een muur in cm
+#define distToGround 5      //minimum afstand tot de grond
+#define strookdist 10       //breedte van de auto
+
+
+
+
+//prototypes
+void driving(int direction);   
+void forward();
+void reverse();
+void driveright();
+void driveleft();
+bool checkfront();
+bool checkleft();
+bool checkright();
+bool checkback();
+bool checkbottom();
+int setdirection();
+void turnright();
+void turnstraight();
+void brake();
+int redirect(int situation);
+int setsituation(string wall);
+void start();
+void pause();
+void trackX();
+
+
+//coordinaten stelsel
+vector<Coordinates> coordinates;
+Coordinates coordinate;
+
+//global variables
+bool isdriving = false;
+int situation;
+bool starting = true;
+int restdistX;
+bool busy;
+
+
+Serial pc(USBTX, USBRX);
+
+int main() {
+    startbutton.rise(&start);
+    pausebutton.rise(&pause);
+    
+    
+    lcd.begin();
+    lcd.backlight();
+    readtimer.reset();      //reset de timer
+    readtimer.start();      //start de timer
+    lcd.print("started");
+    printf("started\n");
+    turnstraight();         //zet alle wielen recht
+    
+    bool wallfront;         
+    bool wallleft;
+    bool wallright;
+    bool wallback;
+    
+    //bool bottom;
+    //float x,y,z;
+    busy = false;
+    //situation = 1;
+    
+    while(1){
+    
+    if(starting){   //als we gaan starten
+        start();
+    }  
+        //printf("timer: %i\n",readtimer.read_ms());
+        while(busy){
+            if(readtimer.read() > 2){
+                wallfront = checkfront();
+                wallleft = checkleft();
+                wallright = checkright();
+                wallback = checkback();
+                //bottom = checkbottom();
+               
+                printf("wallfront: %d\n", wallfront);
+                printf("wallleft: %d\n", wallleft);
+                printf("wallright: %d\n", wallright);
+                printf("wallback: %d\n", wallback);
+                //printf("bottom: %d\n\r", bottom);
+                readtimer.reset();
+            
+                //if(!bottom){
+//                    //bottom = checkbottom();
+//                    if(!bottom){
+//                        brake();
+//                        lcd.print("no bottom");
+//                        printf("no bottom\n");
+//                        busy = false;
+//                    }
+//                }
+                //else if(bottom){
+                    switch(situation){
+                        case 1:                                     //naar voren met muur rechts
+                            lcd.print("front with wall ");
+                            printf("front with wall\n");
+                            if(wallfront || !wallright){            //als voor een muur is of de muur rechts kwijtraakt
+                                brake();                            //remmen
+                                situation = redirect(situation);    //stel nieuwe situatie in    
+                            }
+                        break;
+                        case 2:                                     //naar achter geen muur
+                            lcd.print("back no wall    ");
+                            printf("back no wall\n");
+                            if(wallback){                           //als er achter een muur is
+                                brake();                            //remmen
+                                situation = redirect(situation);    //stel nieuwe situatie in
+                            }
+                        break;
+                        case 3:                                     //naar voren geen muur
+                            lcd.print("front no wall   ");
+                            printf("front no wall\n");
+                            if(wallfront){                          //als voor een muur is
+                                brake();                            //remmen
+                                situation = redirect(situation);    //stel nieuwe situatie in
+                            }   
+                        break;
+                        case 4:                                     //naar achter muur rechts
+                            lcd.print("back with wall  ");
+                            printf("back with wall\n");
+                            if(wallback || !wallright){             //als achter een muur en muur rechts weg
+                                brake();                            //remmen
+                                situation = redirect(situation);    //stel nieuwe situatie in
+                            }
+                        break;
+                        case 5:                                     //klaar
+                            brake();                                //remmen
+                            lcd.print("done            ");
+                            printf("done\n");
+                            busy = false;                           //zet programma op standby
+                        break;
+                        default:    //this is an error(should not happen)
+                            printf("no situation\n");
+                            situation = redirect(situation);
+                            
+                        break;
+                
+                    //}
+                }
+            }
+        }
+        
+        
+        //hier komt een update systeem voor de afstand en coordinatenstelsel
+        
+    }
+}
+
+void pause(){
+    if(busy){
+        busy = false;
+    }
+    else if(!busy){
+        busy = true;
+    }
+}
+
+void start(){
+    bool wallfront = checkfront();
+    bool wallright = checkright();
+    bool wallleft = checkleft();
+    bool backleft = checkback(); // = checkbackleft();    //linker achter sensor
+    bool backright = checkback(); // = checkbackright();  //rechter achter sensor
+    //int situation;
+    //bool once = false;
+   
+    //reverse();
+    //while(!busy){
+//        while(!backleft && !backright){
+//            backleft = checkback();  // = checkbackleft(); //check sensoren zolang ze niets zien
+//            backright = checkback(); // = checkbackright();   
+//        }
+//        
+//        if(!once){
+//            printf("%d\n", backleft);
+//            brake();
+//            once = true;
+//        }
+//        
+//        if(backleft && backright){
+//            turnright();        //draai de wielen 
+//            wait(0.5f);         //wacht tot ze gedraaid zijn
+//            driveright();          //naar rechts rijden
+//            while(!wallright){  //zolang er geen muur rechts
+//                wallright = checkright();   //check of er muur rechts is
+//            }
+//            brake();                //remmen
+//            situation = 1;          //situatie is vooruit met muur rechts
+//            printf("lets go\n");
+//            
+//        }
+//    }
+    //bovenste deel kan alleen gebruikt worden als de robot haaks op een muur geplaatst word
+    situation = 1;
+    
+    busy = true;
+    starting = false;
+    lcd.print("lets go");
+    printf("lets go\n");
+    //return situation;
+    
+} 
+
+int redirect(int situation){
+    bool wallfront = checkfront();
+    bool wallleft = checkleft();
+    bool wallright = checkright();
+    bool wallback = checkback();
+    bool bottom = checkbottom();
+    int newsituation;
+    int dist;
+    
+    
+    if(situation ==  1){                        //je reed naar voren met een muur rechts
+        if(!wallfront && wallright){            //geen muur voor, wel muur rechts
+            newsituation = 1;                   //error, toch niks aan de hand
+        }
+        else if(!wallfront && !wallright){      //geen muur voor en geen muur rechts(we zijn rechter muur kwijt)
+            forward();                          //laatste deel van de auto moet ook nog voorbij de muur
+            wait(1);                            //wacht tot achterste deel ook voorbij muur is(kan je ook doen met afstand lezen van encoder
+            brake();                            //remmen
+            turnright();                        //draai de wielen
+            wait(0.5f);                         //wacht tot ze gedraaid zijn
+            driveright();                          //naar rechts rijden
+            while(!wallright){                  //wacht tot er muur rechts is
+                wallright = checkright();       //check of er muur rechts is
+            }
+            brake();                            //remmen
+            turnstraight();                     //draai wielen recht
+            wait(0.5f);                         //wacht tot de wielen gedraaid zijn
+            newsituation = setsituation("right");  //maak nieuwe situatie aan, geef mee dat we net naar rechts zijn gegaan
+            
+        }
+        else if(wallfront && !wallleft){        //er is een muur voor en geen muur links(we kunnen dus naar links toe
+            turnright();                        //draai wielen
+            wait(0.5f);                         //wacht to ze gedraaid zijn
+            driveleft();                          //naar nieuwe strook links rijden
+            while(dist < strookdist){           //rij tot de nieuwe strook bereikt is
+                wait(3);                        //puur voor demo wachten
+                dist = strookdist+1;               //vraag afgelegde afstand op bij motor(dus niet gelijkstellen)
+            }
+            wait(2);
+            brake();
+            turnstraight();                     //draai wielen recht
+            wait(0.5f);                         //wacht tot wielen recht staan
+            newsituation = setsituation("wallfront");   //maak nieuwe situatie aan, geef mee dat er een muur voor was
+        }
+        else if(wallfront && wallleft){     //er is een muur voor, en links, rechts was dus ook al muur en achter je kom je vandaan
+            newsituation = 5;               //klaar
+        }  
+    }
+    else if(situation == 2){            //je reed naar achter zonder muur
+            if(!wallback && !wallright){//geen muur achter en geen muur rechts
+            newsituation = 2;           //error was toch niks veranderd, behoud huidige situatie
+        }
+        else if(wallback && !wallleft){ //muur achter geen muur links dus we willen naar links
+            turnright();                //draai wielen
+            wait(0.5f);                 //wacht tot ze gedraaid zijn
+            driveleft();                  //naar links rijden
+            while(dist < strookdist){   //rij tot de nieuwe strook bereikt is
+                wait(3);                //wacht puur voor de demo
+                dist = strookdist+1;      //vraag afgelegde afstand op bij motor(dus niet gelijkstellen)
+            }
+            wait(2);
+            brake();                    //remmen
+            turnstraight();             //draai wielen recht
+            wait(0.5f);                 //wacht tot wielen recht staan
+            newsituation = setsituation("wallback");  //maak nieuwe situatie aan. geef mee dat er een muur achter je was
+        }
+        else if(wallback && wallleft){  //muur achter en links, voor and rechts kom je vandaan, je kan nergens meer heen
+            newsituation = 5;           //klaar
+        }
+    }
+    else if(situation == 3){            //je reed naar voren zonder muur
+        if(!wallfront && !wallright){   //geen muur voor en geen muur rechts
+            newsituation = 3;           //error, behoud huidige situatie
+        }
+        else if(wallfront && !wallleft){//muur voor geen muur links, we willen naar links
+            turnright();                //draai wielen
+            wait(0.5f);                 //wacht tot wielen gedraaid zijn
+            driveleft();                  //naar links rijden
+            while(dist < strookdist){   //rij tot de nieuwe strook bereikt is
+                wait(3);                //wacht puur voor de demo
+                dist = strookdist+1;      //vraag afgelegde afstand op bij motor(dus niet gelijkstellen)
+            }
+            wait(2);
+            brake();        
+            turnstraight();             //draai wielen recht
+            wait(0.5f);                 //wacht tot ze rcht gedraaid zijn
+            newsituation = setsituation("wallfront");   //maak nieuwe situatie aan, geef mee dat er een muur voor was
+        }
+        else if(wallfront && wallleft){ //muur voor en links, rechts en achter kom je vandaan
+            newsituation = 5;           //klaar
+        }
+    }   
+    else if(situation == 4){            //je reed naar achter met muur rechts
+        if(!wallback && wallright){     //geen muur achter en muur rechts
+            newsituation = 4;           //error was toch niks veranderd, behoud huidige situatie
+        }
+        else if(wallback && !wallleft){ //muur achter geen muur links
+            reverse();                  //laatste deel van de auto moet ook nog voorbij de muur
+            wait(1);                    //wacht aantal cm, is beter om door wielen uit te laten lezen
+            brake();                    //remmen
+            turnright();                //draai wielen naar rechts
+            wait(0.5f);                 //wachtt ot de wielen gedraaid zijn
+            driveleft();                  //naar links rijden
+            while(dist < strookdist){   //rij tot de nieuwe strook bereikt is
+                wait(3);                //wacht puur voor de demo
+                dist = strookdist+1;      //vraag afgelegde afstand op bij motor(dus niet gelijkstellen)
+            }
+            wait(2);
+            brake();                    //remmen
+            turnstraight();             //draai wielen recht
+            wait(0.5f);                 //wacht tot de wielen gedraaid zijn
+            newsituation = setsituation("wallback");    //maak nieuwe situatie aan, geef mee dat er muur achter was
+        }  
+      
+        else if(!wallback && !wallright){   //geen muur achter, geen muur rechts, we willen naar rechts
+            turnright();                    //draai wielen naar rechts
+            wait(0.5f);                     //wacht tot wielen gedraaid zijn
+            driveright();                      //naar rechts rijden
+            //bool rightline = false;         //zeg dat we nog niet op juiste lijn zitten
+//            while(!rightline){              //zolang we nog niet op juiste lijn zitten
+//                for(int i =0; i < coordinates.size(); i++){ //loop door alle coordinaten heen
+//                    int y = coordinates.at(i).getY();       //sla de y positie op
+//                    int x = coordinates.at(i).getX();       //sla de x positie op
+//                    if((coordinates.at(coordinates.size()-1).getY() == y) && (coordinates.at(coordinates.size()-1).getX()-1 == x)){ //als huidige y coordinaat klopt met een eerder bekende coordinaat, en de huidgie x positie is naar de al gereden strook
+//                        printf("X: %i   Y: %i\n\r", x, y);  //output voor testen
+//                        rightline = true;   //we zitten nu op de juiste lijn
+//                        //update afgelegde afstand
+//                    }
+//                }
+//            } 
+            wait(2);                        //bovenste deel kan nog niet gebuikt worden, dus wait
+            brake();                        //remmen
+            turnstraight();                 //draai wielen recht
+            wait(0.5f);                     //wacht tot wielen gedraaid zijn
+            newsituation == setsituation("right"); //maak nieuwe situatie aan, vertel dat we net naar rechts zijn gegaan
+        }
+        else if(wallback && wallleft){      //achter muur en links, rechts is een muur en voor heb je al gehad
+            newsituation = 5;               //we zijn klaar
+        }
+    }
+    else{
+        printf("choosing from nothing\n");
+        newsituation = setsituation("empty");
+    }
+    
+    return newsituation;                    //geef te nieuwe situatie door
+}
+
+
+int setsituation(string wall){
+    bool wallfront = checkfront();
+    bool wallright = checkright();
+    bool wallback = checkback();
+    
+    //bool bottom = checkbottom();   //moet eigenlijk tussendoor apart gechecked worden
+    
+    if(wall == "wallback"){                 //je zag een muur achter en ging naar links(potentie op rechts langs muur rijden)
+        if(!wallback){                      //er is geen muur achter, je gaat dus door in dezelfde richting
+            reverse();                      //ga achteruit rijden
+            wait(3);                        //wacht tot die de rechts kan zien
+            situation = 4;                  //nieuwe situatie is naar achter met muur rechts
+        }
+        else if(wallback){                  //er is achter een muur
+            forward();                      //vooruit rijden
+            situation = 3;                  //nieuwe situatie is naar voren geen muur
+        }   
+    }
+    else if(wall == "wallfront"){           //je zag een muur voor en ging naar links(potentie op rechts langs muur rijden)
+        if(!wallfront){                     //er is geen muur voor, we gaan dus verder in dezelfde richting
+            forward();                      //ga vooruit rijden
+            wait(3);                        //wacht tot die de muur rechts kan zien
+            situation = 1;                  //nieuwe situatie naar voren met muur rechts
+        }
+        else if(wallfront){                 //er is voor wel een muur
+            reverse();                      //achteruit rijden
+            situation = 2;                  //nieuwe situatie is naar achter geen muur   
+        }
+    }
+    else if(wall == "right"){               //je bent net naar rechts gereden
+    
+        if(!wallfront && wallright){        //er is voor geen muur en muur rechts
+            forward();                      //vooruit rijden
+            wait(3);                        //stukje naar voren rijden voordat die de muur rechts kan zien
+            situation = 1;                  //nieuwe situatie is naar voren met muur rechts
+        }
+        else if(wallfront && !wallright){   //er is voor een muur en geen muur rechts
+            reverse();                      //achteruit rijden
+            situation = 2;                  //nieuwe situatie naar achter zonder muur
+        }
+        else if(wallback && !wallright){    //er is achter een muur en rechts geen muur
+            forward();                      //vooruit rijden
+            situation = 3;                  //nieuwe situatie is naar voren geen muur
+        }
+        else if(!wallback && wallright){    //er is geen muur achter en wel een muur rechts
+            reverse();                      //achteruit rijden
+            wait(3);                        //stukje naar achter rijden voorodat de muur rechts te zien is
+            situation = 4;                  //nieuwe situatie is naar achter met muur rechts
+        }
+        else if(!wallback && !wallright){   //er is geen muur achter en geen muur rechts
+            reverse();                      //achteruit rijden
+            situation = 2;                  //nieuwe situatie is naar achter geen muur
+        }
+        else if(wallfront && wallback){     //er is een muur voor en een muur achter, je kan geen kant meer op
+            situation = 5;                  //klaar(of error)
+        } 
+    }
+    else{                                   //er was nog geen situatie, je hebt nog niks gedaan
+        if(!wallfront && wallright){        //er is geen muur voor en een muur rechts      
+            situation = 1;                  //situatie is naar voren met muur rechts
+            forward();                      //naar voren rijden
+        }
+        else if(wallfront && !wallback && !wallright){  //er is voor een muur, achter en rechts niet
+            situation = 2;                              //situatie is naar achter rijden zonder muur
+            reverse();                                  //naar achter rijden
+        }
+        else if(wallfront && !wallback && wallright){   //er is een muur voor en geen muur achter en een muur rechts
+            situation = 4;                              //situatie is achter rijden met muur rechts
+            reverse();                                  //naar achter rijden
+        }
+        else if(!wallfront && !wallright){  //er is geen muur voor en geen muur rechts
+            situation = 3;                  //situatie is naar voor rijden geen muur rechts
+            forward();                      //vooruit rijden
+        }
+    }
+   
+    return situation;                       //geef de nieuwe situatie door
+}
+
+
+bool checkfront(){                              //check de afstand aan de voorkant
+    bool wall;
+    long frontdist = sonarfront.distance();     //sla de afstand op
+    if(frontdist <= mindist){                    //als de afstand kleiner of gelijk als minimum afstand
+        wall = true;                            //er is een muur
+    }
+    else if(frontdist > mindist){                //als de afstand groter is dan minimum             
+        wall = false;                           //er is geen muur
+    }
+    return wall;                                //return of er een muur is
+}
+
+bool checkleft(){                               //check muur links(kijk of we naar links kunnen rijden)
+    bool wall;
+    long leftdist = sonarleft.distance();       //sla de afstand op tot de muur links
+    if(leftdist > mindist+strookdist){          //als de afstand groter is als miniumum afstand + breedte van de robot
+        wall = false;                           //er is geen muur
+    }
+    else if(leftdist <= mindist+strookdist){    //als de afstand kleiner of gelijk is als de minimum afstand + breedte van de robot
+        wall = true;                            //er is een muur
+    }                                           //we kunnen dus niet naar links rijden
+    
+    return wall;                                //geef terug of er een muur is
+}
+
+
+bool checkright(){                                              //check rechter sonar
+    bool wall;
+    long rightdist = sonarright.distance();                     //sla de afstand tot rechter muur op
+    if(rightdist > mindist+1){                                  //als de afstand groter is als minimum afstand + 1 
+        wall = false;                                           //er is geen muur
+    }
+    else if(rightdist <= mindist && rightdist >= mindist-1){    //als de afstand tussen de minimale afstand en de minimale afstand-1 ligt
+        wall = true;                                            // er is een muur
+    }                                                           //je kan dit gebruiken om te kijken of je recht langs een muur rijd
+    else if(rightdist < mindist-1){                             //als afstand kleiner is als minimum
+        wall = true;                                            //er is een muur
+    }
+    return wall;
+}
+
+bool checkback(){                           //check achterste sonar
+    bool wall;
+    long backdist = sonarback.distance();   //sla de afstand op tot achterste muur
+    if(backdist <= mindist){                //als afstand kleiner of gelijk is als de minimum afstand
+        wall = true;                        //er is een muur
+    }
+    else if(backdist > mindist){            //als afstand meer is als de minimum afstand
+         wall = false;                      //er is geen muur
+    }   
+    return wall;                            //geen terug of er een muur achter is
+} 
+
+bool checkbottom(){           //check de onderste sonars
+    bool ground;
+    double volts;
+    int distancefront;
+    int distanceback;
+    
+    volts = double(sensorfront.read())*3.4;  // value from sensor * (5/1024)
+    distancefront = 13*pow(volts, -1); // worked out from datasheet graph
+    
+    volts = double(sensorback.read())*3.4;  // value from sensor * (5/1024)
+    distanceback = 13*pow(volts, -1); // worked out from datasheet graph
+    
+    
+    if(distancefront > distToGround || distanceback > distToGround){    //als afstand groter dan toegestane
+        ground = false;
+    }
+    else if(distancefront <= distToGround && distanceback <= distToGround){ //als afstand kleiner dan toegestane
+        ground = true;
+    }
+    
+    return ground;
+}
+
+
+void turnright(){           //draai de servos naar rechts
+    servoRV.turnRight();
+    servoLV.turnRight();
+    servoRA.turnRight();
+    servoLA.turnRight();
+    
+}
+
+void turnstraight(){        //zet de servos in rechte positie
+    servoRV.servoCenter();
+    servoLV.servoCenter();
+    servoRA.servoCenter();
+    servoLA.servoCenter();
+}
+
+void brake(){       //remmen
+    //stop motor
+    RVV = 0;
+    LVV = 0;
+    RAV = 0;
+    LAV = 0;
+    RVA = 0;
+    LVA = 0;
+    RAA = 0;
+    LAA = 0;
+    
+    isdriving = false;
+   
+    printf("brake\n");
+}
+
+void forward(){ //vooruit rijden
+    RVV = 1;
+    RAV = 1;
+    LVV = 1;
+    LAV = 1;
+    isdriving = true;
+    printf("forward\n");
+}
+
+void reverse(){     //achteruit rijden
+    RVA = 1;
+    RAA = 1;
+    LAA = 1;
+    LVA = 1;
+    isdriving = true;
+    printf("reverse\n");
+}
+
+void driveright(){
+    RVA = 1;
+    LAA = 1;
+    LVV = 1;
+    RAV = 1;
+    
+}
+
+void driveleft(){
+    RVV = 1;
+    LAV = 1;
+    LVA = 1;
+    RAA = 1;
+    
+}
+
+void trackX(){      //convert de x positie naar stappen
+    int realdist = 0;   //vraag afgelegde afstand op bij wielen
+    int dist = realdist + restdistX;
+    if(dist > stepsize){
+        restdistX = dist - stepsize;
+        coordinate.increaseX();
+        coordinates.push_back(coordinate);
+            
+    }
+    realdist = 0;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Jul 03 09:52:44 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400
\ No newline at end of file