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
Revision 15:31d09ee65cf1, committed 2018-07-04
- Comitter:
- wengefa1
- Date:
- Wed Jul 04 09:14:37 2018 +0000
- Parent:
- 14:0caa7b93af7a
- Commit message:
- Schalter f?r Moduswechsel implementiert
Changed in this revision
| MotorDriver.cpp | 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 |
--- a/MotorDriver.cpp Wed May 23 11:50:58 2018 +0000
+++ b/MotorDriver.cpp Wed Jul 04 09:14:37 2018 +0000
@@ -3,9 +3,6 @@
#include "ReadSensor.h"
#include "mbed.h"
-#define WheelDiameter 3;
-#define ratio 0.04;
-
DigitalOut enableMotorDriver(PB_2);
DigitalIn motorDriverFault(PB_14);
DigitalIn motorDriverWarning(PB_15);
@@ -24,8 +21,8 @@
void startup (void)
{
- enableMotorDriver = 1; // Schaltet den Leistungstreiber ein
- counterLeft.reset();
+ enableMotorDriver = 1; //Schaltet den Motortreiber ein
+ counterLeft.reset(); //Counter reseten
counterRight.reset();
}
@@ -38,7 +35,7 @@
float CorrectFactor;
float Speed = 0.0f;
- switch(SpeedMode) {
+ switch(SpeedMode) { //Geschwindigkeit einstellen
case 1:
Speed = 20.0f;
break;
@@ -60,14 +57,25 @@
//Fährt bis Anzahl umdrehungen erreicht sind
while(((abs(counterLeft.read())+abs(counterRight.read()))/2)<= 990*NumbField) {
+ distance_front = readSensorValue(2); //Distanz zur vorderen Wand wird gemessen
+ if(readSensorValue(1) < 15.0f)
+ {
distance_side= readSensorValue(1); //Distanz zur linken Wand wird gemessen
- distance_front = readSensorValue(2); //Distanz zur vorderen Wand wird gemessen
AnzahlZyklen = AnzahlZyklen+1; //Anzahl Regelvorgänge werden gezählt
distance_side = distance_side - 6.9f; //Distanz zwischen Position und Ideallinie wird berechnet
- CorrectFactor = distance_side*1.0f; //P Faktor des P-Reglers
+ CorrectFactor = distance_side*2.0f; //P Faktor des P-Reglers
+ }
+ else
+ {
+ distance_side= readSensorValue(3); //Distanz zur rechten Wand wird gemessen
+ AnzahlZyklen = AnzahlZyklen+1; //Anzahl Regelvorgänge werden gezählt
+ distance_side = distance_side - 6.9f; //Distanz zwischen Position und Ideallinie wird berechnet
+ CorrectFactor = distance_side*-2.0f; //P Faktor des P-Reglers
+ }
+
//printf("%f\n",CorrectFactor);
- if(abs(CorrectFactor) <= 5.0f) { //erkennt Wand oder Lücke auf linker Seite
+ if(abs(CorrectFactor) <= 16.0f) { //erkennt Wand oder Lücke auf linker Seite
controller.setDesiredSpeedLeft((Speed) - CorrectFactor); //Bei Wand wird korrigiert
controller.setDesiredSpeedRight((Speed * (-1.0f)) - CorrectFactor);
} else {
@@ -83,14 +91,14 @@
}
stop();
- //printf("Das Programm wurde: %d durchlaufen\n", AnzahlZyklen);
+
}
-
-int turnRight(int direction)
+//Rechts abbiegen
+int turnRight(int direction)
{
controller.setDesiredSpeedLeft(40.0f); // Drehzahl in [rpm] bei 31/1 enspricht es ca. 374/min
controller.setDesiredSpeedRight(40.0f);
- while(((abs(counterLeft.read())+abs(counterRight.read()))/2)<= 590) {
+ while(((abs(counterLeft.read())+abs(counterRight.read()))/2)<= 580) {
//do nothing
}
stop();
@@ -101,12 +109,12 @@
}
return direction;
}
-
+//links abbigen
int turnLeft(int direction)
{
controller.setDesiredSpeedRight(-40.0f); // Drehzahl in [rpm] bei 31/1 enspricht es ca. 374/min
controller.setDesiredSpeedLeft(-40.0f);
- while(((abs(counterLeft.read())+abs(counterRight.read()))/2)<= 590) {
+ while(((abs(counterLeft.read())+abs(counterRight.read()))/2)<= 580) {
//do nothing
}
stop();
@@ -118,7 +126,7 @@
return direction;
}
-
+//Roboter anhalten
void stop(void)
{
controller.setDesiredSpeedRight(0.0f);
@@ -149,3 +157,4 @@
stop();
}
+
--- a/main.cpp Wed May 23 11:50:58 2018 +0000
+++ b/main.cpp Wed Jul 04 09:14:37 2018 +0000
@@ -7,32 +7,41 @@
#include "AutoDrive.h"
#include "RouteCalculation.h"
-
+DigitalIn ModeSwitch (PB_0);
char* route;
// inizialisieren der Karte
int map[20][10];
-
+bool mappingpassed = false;
-int main(){
+int main()
+{
printf("startup");
startup();
- wait(5);
-
- // Mapping Modus
- printf("mapping");
- mapping(map);
-
-
- // Autodrive Modus
- printf("Route wird berechnet");
- route = RouteCalculation(map);
- printf("Berechnung Abgeschlossen");
- //wait(20);
- //printf("strecke wird abgefahren");
- //autoDrive(route);
-
+ wait(10);
+
+ while(1) {
+ // Mapping Modus
+ if (ModeSwitch == 0) { //Modus Schalter abfrage
+ wait(0.5); //Schalter entprellen
+ if (mappingpassed == false){ //Mapping kann nicht zwei mal nacheinander abgefahren werden, autoDrive muss dazwischen aufgerufen werden
+ printf("mapping");
+ mapping(map);
+ mappingpassed = true;
+ }
+ } else { //Modus berechnen und Abfahren
+ wait(0.5); //Schalter entprellen
+ // Autodrive Modus
+ printf("Route wird berechnet");
+ //route = RouteCalculation(map);
+ printf("Berechnung Abgeschlossen");
+ mappingpassed = false;
+ //wait(20);
+ //printf("strecke wird abgefahren");
+ //autoDrive(route);
+ }
+ }
}