![](/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
main.cpp@2:e11bc343329d, 2015-04-29 (annotated)
- Committer:
- stefan1691
- Date:
- Wed Apr 29 18:38:30 2015 +0000
- Revision:
- 2:e11bc343329d
- Parent:
- 1:128f2b08a419
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.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
stefan1691 | 2:e11bc343329d | 1 | /** 6.4 Motor mittels Tasten vor-, rückwärts, Stop laufen lassen und Poti benützen um die Geschwindigkeit einzustellen. |
stefan1691 | 2:e11bc343329d | 2 | Erweitert um Abstandssensor wo vor einem Hindernis stoppt. |
marcel1691 | 0:5d64a3e741ec | 3 | */ |
marcel1691 | 0:5d64a3e741ec | 4 | |
marcel1691 | 0:5d64a3e741ec | 5 | #include "mbed.h" |
marcel1691 | 0:5d64a3e741ec | 6 | #include "Motor.h" |
stefan1691 | 2:e11bc343329d | 7 | #include "ultrasonic.h" |
marcel1691 | 0:5d64a3e741ec | 8 | |
marcel1691 | 0:5d64a3e741ec | 9 | // vor-/rueckwaerts - beide = Notstop |
stefan1691 | 1:128f2b08a419 | 10 | DigitalIn button1( A1 ); |
stefan1691 | 1:128f2b08a419 | 11 | DigitalIn button2( A2 ); |
marcel1691 | 0:5d64a3e741ec | 12 | |
marcel1691 | 0:5d64a3e741ec | 13 | // Geschwindigkeit |
marcel1691 | 0:5d64a3e741ec | 14 | AnalogIn poti ( A0 ); |
marcel1691 | 0:5d64a3e741ec | 15 | |
marcel1691 | 0:5d64a3e741ec | 16 | // Motor an M01 |
marcel1691 | 0:5d64a3e741ec | 17 | Motor m1(D3, D2, D4); // PWM, Vorwaerts, Rueckwarts |
marcel1691 | 0:5d64a3e741ec | 18 | |
stefan1691 | 2:e11bc343329d | 19 | // aktueller Abstand |
stefan1691 | 2:e11bc343329d | 20 | int distance; |
stefan1691 | 2:e11bc343329d | 21 | |
stefan1691 | 2:e11bc343329d | 22 | void dist(int d) |
stefan1691 | 2:e11bc343329d | 23 | { |
stefan1691 | 2:e11bc343329d | 24 | // Abhandlung der Entfernung |
stefan1691 | 2:e11bc343329d | 25 | printf("Entfernung %dmm\n", d); |
stefan1691 | 2:e11bc343329d | 26 | distance = d; |
stefan1691 | 2:e11bc343329d | 27 | } |
stefan1691 | 2:e11bc343329d | 28 | |
stefan1691 | 2:e11bc343329d | 29 | ultrasonic mu(D5, D6, .1, 1, &dist); // setzt den Trigger Pin auf D5, den Echo Pin auf D6 |
stefan1691 | 2:e11bc343329d | 30 | // liefert all 0.1 Sekunden einen neuen Wert mit einem |
stefan1691 | 2:e11bc343329d | 31 | // Timeout von 1 Sekunden. Fuer die Ausgabe des Wertes |
stefan1691 | 2:e11bc343329d | 32 | // wird die Funktion dist aufgerufen. |
stefan1691 | 2:e11bc343329d | 33 | |
stefan1691 | 2:e11bc343329d | 34 | /** Hauptprogramm */ |
marcel1691 | 0:5d64a3e741ec | 35 | int main() |
marcel1691 | 0:5d64a3e741ec | 36 | { |
stefan1691 | 2:e11bc343329d | 37 | mu.startUpdates(); // Start der Abstandsmessung |
marcel1691 | 0:5d64a3e741ec | 38 | while (true) |
marcel1691 | 0:5d64a3e741ec | 39 | { |
marcel1691 | 0:5d64a3e741ec | 40 | if ( button1 == 0 && button2 == 0 ) |
marcel1691 | 0:5d64a3e741ec | 41 | m1.speed( 0.0f ); |
marcel1691 | 0:5d64a3e741ec | 42 | else if ( button1 == 0 ) |
marcel1691 | 0:5d64a3e741ec | 43 | m1.speed( poti ); |
marcel1691 | 0:5d64a3e741ec | 44 | else if ( button2 == 0 ) |
marcel1691 | 0:5d64a3e741ec | 45 | m1.speed( poti * -1.0f ); |
stefan1691 | 2:e11bc343329d | 46 | |
stefan1691 | 2:e11bc343329d | 47 | mu.checkDistance(); // Pooling vom Distanzmesser, sollte moeglichst oft erfolgen |
stefan1691 | 2:e11bc343329d | 48 | // 70 mm vor einem Hindernis - Stopp! |
stefan1691 | 2:e11bc343329d | 49 | if ( distance < 70 ) |
stefan1691 | 2:e11bc343329d | 50 | m1.speed( 0.0f ); |
stefan1691 | 2:e11bc343329d | 51 | |
marcel1691 | 0:5d64a3e741ec | 52 | wait(0.2f); |
marcel1691 | 0:5d64a3e741ec | 53 | } |
marcel1691 | 0:5d64a3e741ec | 54 | } |