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){
