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_V62 by
Revision 9:feabe0b7cea4, committed 2018-05-07
- Comitter:
- ahlervin
- Date:
- Mon May 07 15:41:52 2018 +0000
- Parent:
- 8:d0a27278c108
- Commit message:
- Aufger?umtes Programm
Changed in this revision
--- a/Fahren.cpp Mon May 07 14:11:06 2018 +0000 +++ b/Fahren.cpp Mon May 07 15:41:52 2018 +0000 @@ -1,4 +1,4 @@ -/*Roboshark V6 +/*Roboshark V7 Fahren.cpp Erstellt: J. Blunschi geändert: V.Ahlers @@ -7,94 +7,25 @@ #include "Fahren.h" #include <mbed.h> -#include "Regler.h" +#include "IRSensor.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)); - +//Konstruktor +Fahren::Fahren(Controller& controller, EncoderCounter& counterLeft, EncoderCounter& counterRight, IRSensor& iRSensor): + controller(controller), counterLeft(counterLeft), counterRight(counterRight), iRSensor (iRSensor){ +SpeedR = 80.0f; +SpeedL = 80.0f; +disF = 0.0f; +} +//Dekonstruktor +Fahren::~Fahren() {} - 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(){ @@ -105,11 +36,6 @@ //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 @@ -118,14 +44,9 @@ 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; + float diff = (iRSensor.readR() - iRSensor.readL())*0.9f; //Regler + if((diff < 1.5f) ||(diff > -1.5f)) diff = 0; if(iRSensor.readR()>60.0f) diff=0; if(iRSensor.readL()>60.0f) diff=0; //printf("diff =%f \n",diff); @@ -170,10 +91,6 @@ wegRechts = 868; wegLinks = 868; - //Geschwindigkeit - //speedRight = 50; - //speedLeft = 50; - //Zustand, dass der Roboter nicht gestoppt hat stopRight = false; stopLeft = false; @@ -221,10 +138,6 @@ wegRechts = 1752; wegLinks = 1752; - //Geschwindigkeit - //speedRight = 50; - //speedLeft = 50; - //Zustand, dass der Roboter nicht gestoppt hat stopRight = false; stopLeft = false; @@ -270,10 +183,6 @@ wegRechts = 868; wegLinks = 868; - //Geschwindigkeit - //speedRight = 50; - //speedLeft = 50; - //Zustand, dass der Roboter nicht gestoppt hat stopRight = false; stopLeft = false; @@ -319,10 +228,6 @@ wegRechts = 7050; wegLinks = 7050; - //Geschwindigkeit - //speedRight = 80; - //speedLeft = 80; - //Zustand, dass der Roboter nicht gestoppt hat stopRight = false; stopLeft = false;
--- a/Fahren.h Mon May 07 14:11:06 2018 +0000 +++ b/Fahren.h Mon May 07 15:41:52 2018 +0000 @@ -1,4 +1,4 @@ -/*Roboshark V4 +/*Roboshark V7 Fahren.h Erstellt: J. Blunschi geändert: V.Ahlers @@ -12,17 +12,17 @@ #include <mbed.h> #include "EncoderCounter.h" #include "Controller.h" -#include "Regler.h" +#include "IRSensor.h" + class Fahren{ public: - Fahren(Controller& controller, EncoderCounter& counterLeft, EncoderCounter& counterRight, Regler& regler, int reglerEin, IRSensor& iRSensor); //Konstruktor + Fahren(Controller& controller, EncoderCounter& counterLeft, EncoderCounter& counterRight,IRSensor& iRSensor); //Konstruktor virtual ~Fahren(); - void geradeausU(); void geradeausG(); void rechts90(); void rechts180(); @@ -35,10 +35,7 @@ Controller& controller; EncoderCounter& counterLeft; EncoderCounter& counterRight; - Regler& regler; IRSensor& iRSensor; - Ticker ticker; - void getSpeed(); //Variablen die in der Klasse Fahren verwendet werden @@ -55,7 +52,6 @@ float disF; int reglerEinL; int reglerEinR; - static const float PERIOD; int reglerEin;
--- a/IRSensor.cpp Mon May 07 14:11:06 2018 +0000 +++ b/IRSensor.cpp Mon May 07 15:41:52 2018 +0000 @@ -1,4 +1,4 @@ -/*Roboshark V4 +/*Roboshark V7 IRSensor.cpp Erstellt: V. Ahlers geändert: V.Ahlers @@ -107,7 +107,7 @@ if(disF < minIrF) { IrF = 1; } else { IrF = 0; } - return IrF;//IrF; + return IrF; } //Line Sensor @@ -125,7 +125,6 @@ ende = 1; } finishLast = finish; - //printf("Line Sensor ist %d\n",ende); return; }
--- a/IRSensor.h Mon May 07 14:11:06 2018 +0000 +++ b/IRSensor.h Mon May 07 15:41:52 2018 +0000 @@ -1,4 +1,4 @@ -/*Roboshark V4 +/*Roboshark V7 IRSensor.h Erstellt: V. Ahlers geändert: V.Ahlers
--- a/Regler.cpp Mon May 07 14:11:06 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,133 +0,0 @@ -/*Roboshark V5 -Regler.cpp -Erstellt: V.Ahlers -geändert: V.Ahlers -V.5.18 -Regler zum geradeaus fahren -*/ - -#include <cmath> -#include "Regler.h" -#include "IRSensor.h" - - -using namespace std; - -const float Regler :: PERIOD = 0.001f; -const int Regler :: FIXSPEED = 50; -float faktor = 0.12; - - - -Regler::Regler(AnalogIn& IrRight, AnalogIn& IrLeft, IRSensor& iRSensor): -IrRight (IrRight), IrLeft (IrLeft), iRSensor (iRSensor) { - - SpeedR = 0; - SpeedL = 0; - ticker.attach(callback(this, &Regler::setSpeed), PERIOD); - } - -Regler::~Regler(){ - ticker.detach(); - } - - void Regler::setSpeed (){ - measR2 = iRSensor.readR(); // Converts and read the analog input value - measL2 = iRSensor.readL(); - - if((measR2 > 100) && (measL2 < 100)) { //keine Wnad rechts - if(measL2 > 47){ - div3 = measL2 - 47; - kor3 = faktor*div3; - div2 = 0; - div1 = 0; - div4 = 0; - div5 = 0; - div6 = 0; - SpeedR = FIXSPEED; - SpeedL = FIXSPEED + kor3; - } else if (measL2 < 52){ - div4 = 52 - measR2; - kor4 = faktor*div4; - div2 = 0; - div1 = 0; - div3 = 0; - div5 = 0; - div6 = 0; - SpeedR = FIXSPEED; - SpeedL = FIXSPEED + kor4; - }else { - SpeedR = FIXSPEED; - SpeedL = FIXSPEED; - } - } - if((measL2 > 100) &&(measR2 < 100)) { //keine Wnad links - if(measR2 > 47){ - div5 = measR2 - 47; - kor5 = faktor*div5; - div2 = 0; - div1 = 0; - div4 = 0; - div6 = 0; - div3 = 0; - SpeedR = FIXSPEED; - SpeedL = FIXSPEED + kor5; - } else if (measR2 < 52){ - div6 = 52 - measR2; - kor6 = faktor*div4; - div2 = 0; - div1 = 0; - div3 = 0; - div4 = 0; - div5 = 0; - SpeedR = FIXSPEED + kor6; - SpeedL = FIXSPEED; - } else { - SpeedR = FIXSPEED; - SpeedL = FIXSPEED; - } - } - if ((measR2 < measL2)&& (measL2 - measR2 > 3)) { //IR Sensor werte werden verglichen und die Korrektur wird berechnet - div1 = measR2 - measL2; // An beiden seinen Wände - kor1 = 0.12f*div1; - div2 = 0; - div3 = 0; - div4 = 0; - div5 = 0; - div6 = 0; - SpeedR = FIXSPEED; - SpeedL = FIXSPEED + kor1; - } else if ((measR2 > measL2) && (measR2 - measL2 >3)) { - div2 = measL2 - measR2; - kor2 = 0.12f*div2; - div1 = 0; - div3 = 0; - div4 = 0; - div5 = 0; - div6 = 0; - SpeedR = FIXSPEED + kor2; - SpeedL = FIXSPEED; - } else { - SpeedR = FIXSPEED; - SpeedL = FIXSPEED; - } -//printf("Div1 = %f\n",div1); -//printf("Div2 = %f\n",div2); -//printf("SpeedR1 = %f\n",SpeedR); -//printf("SpeedL1 = %f\n",SpeedL); -} - float Regler :: getSpeedR (){ - SpeedR = SpeedR; - //printf("SpeedR2 = %f\n",SpeedR); - return SpeedR; - } - float Regler :: getSpeedL (){ - SpeedL = SpeedL; - //printf("SpeedL2 = %f\n",SpeedL); - return SpeedL; - } - - - - -
--- a/Regler.h Mon May 07 14:11:06 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -/*Roboshark V5 -Regler.h -Erstellt: V.Ahlers -geändert: V.Ahlers -V.5.18 -*/ - -#ifndef REGLER_H_ -#define REGLER_H_ - -#include <cstdlib> -#include <mbed.h> -#include "IRSensor.h" - -class Regler{ - - public: - Regler(AnalogIn& IrRight, AnalogIn& IrLeft, IRSensor& iRSensor); //Konstruktor - - virtual ~Regler(); - - - float getSpeedR(); - float getSpeedL(); - - private: - AnalogIn& IrRight; - AnalogIn& IrLeft; - IRSensor& iRSensor; - static const int FIXSPEED; - static const float PERIOD; - float SpeedR; - float SpeedL; - float measR2; - float measL2; - float div1; - float div2; - float div3; - float div4; - float div5; - float div6; - float kor1; - float kor2; - float kor3; - float kor4; - float kor5; - float kor6; - float faktor; - - - void setSpeed(); - Ticker ticker; - - }; - #endif \ No newline at end of file
--- a/StateMachine.cpp Mon May 07 14:11:06 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ - -// Statemachine -//V04.18 -// V. Ahlers - -//Wird nicht mehr gebraucht - -#include <mbed.h> -#include "StateMachine.h" - -using namespace std; - -StateMachine::StateMachine(int IrR, int IrL, int IrF) : IrR(IrR), IrL(IrL), IrF(IrF) {} - -StateMachine::~StateMachine (){} - -int StateMachine :: drive() { - - - - if((IrR==0) && (IrL==0) && (IrF==1)){ - caseDrive = 2; // Folge: 90 Grad nach rechts drehen - }else if ((IrR==0) && (IrL==1) && (IrF==0)){ - caseDrive = 2; // Folge: 90 Grad nach rechts drehen - }else if ((IrR==0) && (IrL==1) && (IrF==1)){ - caseDrive = 2; // Folge: 90 Grad nach rechts drehen - }else if ((IrR==1) && (IrL==0) && (IrF==0)){ - caseDrive = 1; // Folge: geradeaus fahren - }else if ((IrR==1) && (IrL==0) && (IrF==1)){ - caseDrive = 3; // Folge: 270 Grad nach rechts drehen - }else if ((IrR==1) && (IrL==1) && (IrF==0)){ - caseDrive = 1; // Folge: geradeaus fahren - }else if ((IrR==1) && (IrL==1) && (IrF==1)){ - caseDrive = 4; // Folge: 180 Grad nach rechts drehen - }else{ caseDrive=0; - } - - return caseDrive; -} \ No newline at end of file
--- a/StateMachine.h Mon May 07 14:11:06 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -// Deklaration StateMachine -// V04.18 -// V. Ahlers - -// wird nicht mehr gebraucht - - -#ifndef STATEMACHINE_H_ -#define STATEMACHINE_H_ - -#include <cstdlib> -#include <mbed.h> - -class StateMachine { - - public: - StateMachine (int IrR, int IrL, int IrF); - - int IrR; - int IrL; - int IrF; - int caseDrive; - - virtual ~StateMachine(); - int drive(); - - private: - - -}; - -#endif /*StateMachine_H_*/ \ No newline at end of file
--- a/main.cpp Mon May 07 14:11:06 2018 +0000 +++ b/main.cpp Mon May 07 15:41:52 2018 +0000 @@ -1,4 +1,4 @@ -/*Roboshark V5 +/*Roboshark V7 main.cpp Erstellt: J. Blunschi geändert: V.Ahlers @@ -13,7 +13,6 @@ #include "Controller.h" #include "IRSensor.h" #include "Fahren.h" -#include "Regler.h" DigitalOut myled(LED1); @@ -68,9 +67,7 @@ Controller controller(pwmLeft, pwmRight, counterLeft, counterRight); -Regler regler(IrRight, IrLeft, iRSensor); - -Fahren fahren(controller, counterLeft, counterRight, regler, reglerEin, iRSensor); //Reihenfolge!!!!!!!!!!!!!!!!!!! Ultra wichtig +Fahren fahren(controller, counterLeft, counterRight, iRSensor); //Reihenfolge!!!!!!!!!!!!!!!!!!! Ultra wichtig int main() { @@ -81,19 +78,6 @@ enableMotorDriver = 1; // Schaltet den Leistungstreiber ein while(1) { -// Test um Drehungen und geradeaus zu testen - - /*fahren.geradeaus(); //Geradeausfahren aufrufen - wait(1.0f); - - fahren.rechts90(); - wait(1.0f); - - fahren.rechts180(); - wait(1.0f); - - fahren.links90(); - wait(1.0f);*/ // IR Sensoren einlesen float disR = iRSensor.readR(); // Distanz in mm float disL = iRSensor.readL(); @@ -145,25 +129,17 @@ - if(caseDrive == 1){ // Aufrufen der verschiedenen fahr funktionen - reglerEin = 1; + if(caseDrive == 1){ // Aufrufen der verschiedenen fahr funktionen fahren.geradeausG(); - reglerEin = 0; } else if (caseDrive == 2){ fahren.rechts90(); - reglerEin = 1; fahren.geradeausG(); - reglerEin = 0; } else if (caseDrive == 3){ fahren.links90(); - reglerEin = 1; fahren.geradeausG(); - reglerEin = 0; } else if (caseDrive == 4){ fahren.rechts180(); - reglerEin = 1; fahren.geradeausG(); - reglerEin = 0; } else if (caseDrive == 0){ fahren.stopp(); } else if(caseDrive == 5){