Hallo zusammen,
sobald ich kein Signal mehr auf Pin 7 bekomme schaltet mein LOOP aus(siehe Skript), wie er es soll. Mein Problem ist jedoch, das dies erst nach ungefähr 3 Sekunden passiert. Hat jemand eine Idee wie ich dies umgehen kann?
Mit freundlichen Grüßen
int trigger = 12;
int echo = 13;
long dauer = 0;
long entfernung = 0;
int LED = 6;
int RG = 7;
void setup()
{
Serial.begin(9600);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
pinMode(LED, OUTPUT);
pinMode(RG, INPUT);
}
void loop()
{
if (digitalRead(RG) == HIGH)
{
digitalWrite(trigger, HIGH);//Trigger an
delay (10);//Warten
digitalWrite(trigger, LOW);//Trigger aus
dauer = pulseIn(echo, HIGH);//0=anschaltdauer echo
entfernung = (dauer / 2) * 0.03432;//Zeit umrechnung in Cm
if (entfernung >= 30)
{
digitalWrite(LED, HIGH);
}
else
{
digitalWrite (LED, HIGH);//LED an
delay (entfernung);//Entfernung=Frequenz
digitalWrite (LED, LOW);//LED aus
}
}
else
{
digitalWrite(trigger, LOW);
digitalWrite(LED, LOW);
}
}
Sobald ich kein Signal mehr am Pin 7 anliegen habe schaltet der Loop ab. Jedoch funktioniert er noch weitere 3 Sek nach Abschaltung, bezieungsweise die LED reagiert noch ein paar Sekunden auf Bewegungen, wie sie es normalerweise auch soll.
Dein PIN wird auf HIGH gezogen.
Du willst, wenn der PIN nicht mehr auf HIGH liegt, das ein "LOW" erkannt wird.
Der Eingang des Microkontroller ist aber so hochohmig, das der die auf der Leitung liegende Ladung nicht verbraucht.
Das kannst Du mit einem Widerstand ändern, den Du zwischen dem PIN und GND anschliesst. Irgendwas zwischen 1Kohm und 10Kohm - der Wert ist unkritisch.
Was aber einfacher ist, wenn Du Deine Logik änderst und nicht auf LOW wartest, sondern auf HIGH.
Dazu sind 3 Änderungen notwendig.
Erste: Im Setup den PIN RG nicht INPUT soindern INPUT_PULLUP setzen.
Damit aktivierst Du einen im Controller sitzenden Widerstand nach + und brauchst nichts extern zu machen.
zweite Änderung: Die Logik muss jetzt natürlich anders rum.
if (digitalRead(RG) == LOW)
dritte Änderung: Der RG wird jetzt von GND nach PIN gesetzt. (vorher war er zwischen + und PIN)
Ich hatte doch schon geschrieben, die loop() schaltet nicht ab. Wenn sie abschaltet, ist etwas faul.
Die loop() muss immer laufen, damit dein Controller auch funktioniert.
Und du solltest beschreiben, was du mit deinem Projekt erreichen möchtest.