![](/media/cache/group/ep_LV4vK4D.webp.50x50_q85.jpg)
6.4 Motor mittels Tasten vor-, rückwärts, Stop laufen lassen und Poti benützen um die Geschwindigkeit einzustellen. Erweitert um Abstandssensor wo vor einem Hindernis stoppt.
Dependencies: HC_SR04_Ultrasonic_Library mbed
Fork of 1-06-03-Uebung by
Diff: main.cpp
- Revision:
- 2:e11bc343329d
- Parent:
- 1:128f2b08a419
--- a/main.cpp Wed Apr 29 18:27:11 2015 +0000 +++ b/main.cpp Wed Apr 29 18:38:30 2015 +0000 @@ -1,8 +1,10 @@ -/** 6.3 Motor mittels Tasten vor-, rückwärts, Stop laufen lassen und Poti benützen um die Geschwindigkeit einzustellen. +/** 6.4 Motor mittels Tasten vor-, rückwärts, Stop laufen lassen und Poti benützen um die Geschwindigkeit einzustellen. + Erweitert um Abstandssensor wo vor einem Hindernis stoppt. */ #include "mbed.h" #include "Motor.h" +#include "ultrasonic.h" // vor-/rueckwaerts - beide = Notstop DigitalIn button1( A1 ); @@ -14,8 +16,25 @@ // Motor an M01 Motor m1(D3, D2, D4); // PWM, Vorwaerts, Rueckwarts +// aktueller Abstand +int distance; + +void dist(int d) +{ + // Abhandlung der Entfernung + printf("Entfernung %dmm\n", d); + distance = d; +} + +ultrasonic mu(D5, D6, .1, 1, &dist); // setzt den Trigger Pin auf D5, den Echo Pin auf D6 + // liefert all 0.1 Sekunden einen neuen Wert mit einem + // Timeout von 1 Sekunden. Fuer die Ausgabe des Wertes + // wird die Funktion dist aufgerufen. + +/** Hauptprogramm */ int main() { + mu.startUpdates(); // Start der Abstandsmessung while (true) { if ( button1 == 0 && button2 == 0 ) @@ -24,6 +43,12 @@ m1.speed( poti ); else if ( button2 == 0 ) m1.speed( poti * -1.0f ); + + mu.checkDistance(); // Pooling vom Distanzmesser, sollte moeglichst oft erfolgen + // 70 mm vor einem Hindernis - Stopp! + if ( distance < 70 ) + m1.speed( 0.0f ); + wait(0.2f); } } \ No newline at end of file