Servo am Digital Pin D9 in Kombination mit Hall Sensor. Wenn der Hall Sensor anspricht, stoppt der Servo.

Dependencies:   Servo mbed

Fork of Servo by smd.iotkit1.ch

Committer:
stefan1691
Date:
Wed May 06 13:10:49 2015 +0000
Revision:
2:377f1822ec9e
Parent:
1:32f0eb92121b
Servo am Digital Pin D9 in Kombination mit Hall Sensor.;     Wenn der Hall Sensor anspricht, stoppt der Servo.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
stefan1691 2:377f1822ec9e 1 /** Servo am Digital Pin D9 in Kombination mit Hall Sensor.
stefan1691 2:377f1822ec9e 2 Wenn der Hall Sensor anspricht, stoppt der Servo.
stefan1691 1:32f0eb92121b 3 Das orange Kabel (Signal) ist links.
marcel1691 0:e6f25efb6af9 4 */
marcel1691 0:e6f25efb6af9 5 #include "mbed.h"
marcel1691 0:e6f25efb6af9 6 #include "Servo.h"
marcel1691 0:e6f25efb6af9 7
stefan1691 1:32f0eb92121b 8 Servo servo( D9 );
stefan1691 2:377f1822ec9e 9 AnalogIn hallSensor( A2 );
stefan1691 2:377f1822ec9e 10 DigitalOut led1( D10 );
stefan1691 2:377f1822ec9e 11 DigitalOut led2( D11 );
marcel1691 0:e6f25efb6af9 12
marcel1691 0:e6f25efb6af9 13 int main()
marcel1691 0:e6f25efb6af9 14 {
stefan1691 2:377f1822ec9e 15 float start = 0.0f;
stefan1691 2:377f1822ec9e 16 float value = 0.0f;
stefan1691 2:377f1822ec9e 17
marcel1691 0:e6f25efb6af9 18 while ( 1 )
marcel1691 0:e6f25efb6af9 19 {
stefan1691 2:377f1822ec9e 20 led1 = led2 = 0;
stefan1691 2:377f1822ec9e 21
marcel1691 0:e6f25efb6af9 22 // Servo langsam bewegen (immer in der Mitte Anfangen mit Tests, sonst besteht die Gefahr von Schäden)
stefan1691 2:377f1822ec9e 23 for ( float p = 0.0f; p < 1.0f; p += 0.0001f )
stefan1691 2:377f1822ec9e 24 {
stefan1691 2:377f1822ec9e 25 servo = p;
stefan1691 2:377f1822ec9e 26 value = hallSensor.read();
stefan1691 2:377f1822ec9e 27 // Hall Sensor ausgeloest?
stefan1691 2:377f1822ec9e 28 if ( value < 0.4f || value > 0.6f )
stefan1691 2:377f1822ec9e 29 {
stefan1691 2:377f1822ec9e 30 p -= 0.01f;
stefan1691 2:377f1822ec9e 31 start = p; // aktuelle Position = Startposition
stefan1691 2:377f1822ec9e 32 break;
stefan1691 2:377f1822ec9e 33 }
stefan1691 2:377f1822ec9e 34 wait(0.001);
stefan1691 2:377f1822ec9e 35 }
stefan1691 2:377f1822ec9e 36 // wenn Hall Sensor ausgeloest dann LED anschalten, ansonsten Position auf Anfang
stefan1691 2:377f1822ec9e 37 if ( value < 0.4f )
stefan1691 2:377f1822ec9e 38 led1 = 1;
stefan1691 2:377f1822ec9e 39 else if ( value > 0.6f )
stefan1691 2:377f1822ec9e 40 led2 = 1;
stefan1691 2:377f1822ec9e 41 else
stefan1691 2:377f1822ec9e 42 start = 1.0f;
stefan1691 2:377f1822ec9e 43
stefan1691 2:377f1822ec9e 44 wait( 1.0 );
stefan1691 2:377f1822ec9e 45 led1 = led2 = 0;
stefan1691 2:377f1822ec9e 46
stefan1691 2:377f1822ec9e 47 // und die andere Seite
stefan1691 2:377f1822ec9e 48 for ( float p = start; p >= 0.0f; p -= 0.0001f )
marcel1691 0:e6f25efb6af9 49 {
marcel1691 0:e6f25efb6af9 50 servo = p;
marcel1691 0:e6f25efb6af9 51 wait(0.001);
marcel1691 0:e6f25efb6af9 52 }
stefan1691 2:377f1822ec9e 53 wait( 0.5 );
marcel1691 0:e6f25efb6af9 54 }
marcel1691 0:e6f25efb6af9 55 }
marcel1691 0:e6f25efb6af9 56