Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Fork of Roboshark_V9 by
Fahren.cpp
- Committer:
- ahlervin
- Date:
- 2018-05-07
- Revision:
- 8:d0a27278c108
- Parent:
- 7:862d80e0ea2d
- Child:
- 9:feabe0b7cea4
File content as of revision 8:d0a27278c108:
/*Roboshark V6 Fahren.cpp Erstellt: J. Blunschi geändert: V.Ahlers V.5.18 */ #include "Fahren.h" #include <mbed.h> #include "Regler.h" using namespace std; const float Fahren :: PERIOD = 0.2f; //Konstruktor Fahren::Fahren(Controller& controller, EncoderCounter& counterLeft, EncoderCounter& counterRight, Regler& regler, int reglerEin, IRSensor& iRSensor): controller(controller), counterLeft(counterLeft), counterRight(counterRight), regler(regler), reglerEin(reglerEin), iRSensor (iRSensor){ SpeedR = 80; SpeedL = 80; disF = 0; ticker.attach(callback(this, &Fahren::getSpeed), PERIOD); } //Dekonstruktor Fahren::~Fahren() { ticker.detach(); } //Korrigierte Geschwindigkeit aus der Klasse Regler aufrufen void Fahren::getSpeed(){ //if((reglerEinR == 1) && (reglerEinL == 1)){ //SpeedR = regler.getSpeedR(); //SpeedL = regler.getSpeedL(); SpeedR = 80; SpeedL = 80; //disF = iRSensor.readF(); //printf("SpeedR in F = %f\n",SpeedR); //printf("SpeedL in F = %f\n",SpeedL); } //Implementation der Methode geradeaus fahren ungeregelt void Fahren::geradeausU(){ //einlesen des aktuellen Encoder standes initialClicksRight = counterRight.read(); initialClicksLeft = counterLeft.read(); //Anzahl Clicks die der Encoder zählen soll wegRechts = 1773; wegLinks = 1773; //Geschwindigkeit //speedRight = 50; //speedLeft = 50; //Zustand, dass der Roboter nicht gestoppt hat stopRight = false; stopLeft = false; //Drehrichtung der Motoren controller.setDesiredSpeedRight(SpeedR); controller.setDesiredSpeedLeft(-(SpeedL)); while(1){ // printf("Encoderrechts %d \n\r", counterRight.read()); //Debugging Zweck (Putty benutzen!) // printf("Encoderlinks %d \n\r", counterLeft.read()); //Debugging Zweck (Putty benutzen!) //If Schleife, wenn Clicks erreicht sind, muss der Motor stoppen if(counterRight.read() - initialClicksRight >= wegRechts || counterRight.read() - initialClicksRight <= -wegRechts){ controller.setDesiredSpeedRight(0); stopRight = true; } //If Schleife, wenn Clicks erreicht sind, muss der Motor stoppen if(counterLeft.read() - initialClicksLeft >= wegLinks || counterLeft.read() - initialClicksLeft <= -wegLinks ){ controller.setDesiredSpeedLeft(0); stopLeft = true; } if(stopRight == true && stopLeft == true){ return; } } } //Implementation der Methode geradeaus fahren geregelt void Fahren::geradeausG(){ //einlesen des aktuellen Encoder standes initialClicksRight = counterRight.read(); initialClicksLeft = counterLeft.read(); //Anzahl Clicks die der Encoder zählen soll wegRechts = 1776; wegLinks = 1776; //Geschwindigkeit //speedRight = 50;//SpeedR //speedLeft = 50;//SpeedL //Zustand, dass der Roboter nicht gestoppt hat stopRight = false; stopLeft = false; reglerEinR = 1; reglerEinL = 1; //Drehrichtung der Motoren //printf("SpeedR in F2= %f\n",SpeedR); //printf("SpeedL in F2= %f\n",SpeedL); while(1){ float diff = (iRSensor.readR() - iRSensor.readL())*0.9f; if(diff > 7.0f) diff = 0; if(iRSensor.readR()>60.0f) diff=0; if(iRSensor.readL()>60.0f) diff=0; //printf("diff =%f \n",diff); controller.setDesiredSpeedRight(SpeedR+diff); controller.setDesiredSpeedLeft(-(SpeedL-diff)); wait(0.05); // printf("Encoderrechts %d \n\r", counterRight.read()); //Debugging Zweck (Putty benutzen!) // printf("Encoderlinks %d \n\r", counterLeft.read()); //Debugging Zweck (Putty benutzen!) //If Schleife, wenn Clicks erreicht sind, muss der Motor stoppen if(counterRight.read() - initialClicksRight >= wegRechts || counterRight.read() - initialClicksRight <= -wegRechts || iRSensor.readF() < 50.0f){ controller.setDesiredSpeedRight(0); stopRight = true; reglerEinR = 0; } //If Schleife, wenn Clicks erreicht sind, muss der Motor stoppen if(counterLeft.read() - initialClicksLeft >= wegLinks || counterLeft.read() - initialClicksLeft <= -wegLinks || iRSensor.readF() < 50.0f){ controller.setDesiredSpeedLeft(0); stopLeft = true; reglerEinL = 0; } if(stopRight == true && stopLeft == true){ return; } } } //Implementation der Methode 90 Grad Rechtsdrehen void Fahren::rechts90() { //einlesen des aktuellen Encoder standes initialClicksRight = counterRight.read(); initialClicksLeft = counterLeft.read(); //Anzahl Clicks die der Encoder zählen soll wegRechts = 868; wegLinks = 868; //Geschwindigkeit //speedRight = 50; //speedLeft = 50; //Zustand, dass der Roboter nicht gestoppt hat stopRight = false; stopLeft = false; //Drehrichtung der Motoren controller.setDesiredSpeedRight((SpeedR)); controller.setDesiredSpeedLeft((SpeedL)); //printf("SpeedR in F = %f\n",SpeedR); //printf("SpeedL in F = %f\n",SpeedL); while(1){ // printf("Encoderrechts %d \n\r", counterRight.read()); //Debugging Zweck (Putty benutzen!) // printf("Encoderlinks %d \n\r", counterLeft.read()); //Debugging Zweck (Putty benutzen!) //If Schleife, wenn Clicks erreicht sind, muss der Motor stoppen if(counterRight.read() - initialClicksRight >= wegRechts || counterRight.read() - initialClicksRight <= -wegRechts){ controller.setDesiredSpeedRight(0); stopRight = true; } //If Schleife, wenn Clicks erreicht sind, muss der Motor stoppen if(counterLeft.read() - initialClicksLeft >= wegLinks || counterLeft.read() - initialClicksLeft <= -wegLinks ){ controller.setDesiredSpeedLeft(0); stopLeft = true; } if(stopRight == true && stopLeft == true){ return; } } } //Implementation der Methode 180 Grad Rechtsdrehen void Fahren::rechts180() { //einlesen des aktuellen Encoder standes initialClicksRight = counterRight.read(); initialClicksLeft = counterLeft.read(); //Anzahl Clicks die der Encoder zählen soll wegRechts = 1752; wegLinks = 1752; //Geschwindigkeit //speedRight = 50; //speedLeft = 50; //Zustand, dass der Roboter nicht gestoppt hat stopRight = false; stopLeft = false; //Drehrichtung der Motoren controller.setDesiredSpeedRight((SpeedR)); controller.setDesiredSpeedLeft((SpeedL)); while(1){ // printf("Encoderrechts %d \n\r", counterRight.read()); //Debugging Zweck (Putty benutzen!) // printf("Encoderlinks %d \n\r", counterLeft.read()); //Debugging Zweck (Putty benutzen!) //If Schleife, wenn Clicks erreicht sind, muss der Motor stoppen if(counterRight.read() - initialClicksRight >= wegRechts || counterRight.read() - initialClicksRight <= -wegRechts){ controller.setDesiredSpeedRight(0); stopRight = true; } //If Schleife, wenn Clicks erreicht sind, muss der Motor stoppen if(counterLeft.read() - initialClicksLeft >= wegLinks || counterLeft.read() - initialClicksLeft <= -wegLinks ){ controller.setDesiredSpeedLeft(0); stopLeft = true; } if(stopRight == true && stopLeft == true){ return; } } } //Implementation der Methode 90 Grad Linksdrehen void Fahren::links90() { //einlesen des aktuellen Encoder standes initialClicksRight = counterRight.read(); initialClicksLeft = counterLeft.read(); //Anzahl Clicks die der Encoder zählen soll wegRechts = 868; wegLinks = 868; //Geschwindigkeit //speedRight = 50; //speedLeft = 50; //Zustand, dass der Roboter nicht gestoppt hat stopRight = false; stopLeft = false; //Drehrichtung der Motoren controller.setDesiredSpeedRight((-SpeedR)); controller.setDesiredSpeedLeft((-SpeedL)); while(1){ // printf("Encoderrechts %d \n\r", counterRight.read()); //Debugging Zweck (Putty benutzen!) // printf("Encoderlinks %d \n\r", counterLeft.read()); //Debugging Zweck (Putty benutzen!) //If Schleife, wenn Clicks erreicht sind, muss der Motor stoppen if(counterRight.read() - initialClicksRight >= wegRechts || counterRight.read() - initialClicksRight <= -wegRechts){ controller.setDesiredSpeedRight(0); stopRight = true; } //If Schleife, wenn Clicks erreicht sind, muss der Motor stoppen if(counterLeft.read() - initialClicksLeft >= wegLinks || counterLeft.read() - initialClicksLeft <= -wegLinks ){ controller.setDesiredSpeedLeft(0); stopLeft = true; } if(stopRight == true && stopLeft == true){ return; } } } //Implementation der Methode Ziel erreicht void Fahren::ziel() { //einlesen des aktuellen Encoder standes initialClicksRight = counterRight.read(); initialClicksLeft = counterLeft.read(); //Anzahl Clicks die der Encoder zählen soll wegRechts = 7050; wegLinks = 7050; //Geschwindigkeit //speedRight = 80; //speedLeft = 80; //Zustand, dass der Roboter nicht gestoppt hat stopRight = false; stopLeft = false; //Drehrichtung der Motoren controller.setDesiredSpeedRight((SpeedR)); controller.setDesiredSpeedLeft((SpeedR)); while(1){ // printf("Encoderrechts %d \n\r", counterRight.read()); //Debugging Zweck (Putty benutzen!) // printf("Encoderlinks %d \n\r", counterLeft.read()); //Debugging Zweck (Putty benutzen!) //If Schleife, wenn Clicks erreicht sind, muss der Motor stoppen if(counterRight.read() - initialClicksRight >= wegRechts || counterRight.read() - initialClicksRight <= -wegRechts){ controller.setDesiredSpeedRight(0); stopRight = true; } //If Schleife, wenn Clicks erreicht sind, muss der Motor stoppen if(counterLeft.read() - initialClicksLeft >= wegLinks || counterLeft.read() - initialClicksLeft <= -wegLinks ){ controller.setDesiredSpeedLeft(0); stopLeft = true; } if(stopRight == true && stopLeft == true){ return; } } } //Implementation der Methode stopp void Fahren::stopp(){ //einlesen des aktuellen Encoder standes initialClicksRight = counterRight.read(); initialClicksLeft = counterLeft.read(); //Anzahl Clicks die der Encoder zählen soll wegRechts = 0; wegLinks = 0; //Geschwindigkeit speedRight = 0; speedLeft = 0; //Zustand, dass der Roboter nicht gestoppt hat stopRight = false; stopLeft = false; //Drehrichtung der Motoren controller.setDesiredSpeedRight(speedRight); controller.setDesiredSpeedLeft(-(speedLeft)); while(1){ // printf("Encoderrechts %d \n\r", counterRight.read()); //Debugging Zweck (Putty benutzen!) // printf("Encoderlinks %d \n\r", counterLeft.read()); //Debugging Zweck (Putty benutzen!) //If Schleife, wenn Clicks erreicht sind, muss der Motor stoppen if(counterRight.read() - initialClicksRight >= wegRechts || counterRight.read() - initialClicksRight <= -wegRechts){ controller.setDesiredSpeedRight(0); stopRight = true; } //If Schleife, wenn Clicks erreicht sind, muss der Motor stoppen if(counterLeft.read() - initialClicksLeft >= wegLinks || counterLeft.read() - initialClicksLeft <= -wegLinks ){ controller.setDesiredSpeedLeft(0); stopLeft = true; } if(stopRight == true && stopLeft == true){ return; } } }