Zu späte Abschaltung

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);
  }
}



Was genau heißt das ?
Die loop() schaltet nicht aus, auch bei dir läuft die immer durch.

Aber du könntest ja mal genau beschreiben, was du erreichen möchtest.
Dann haben wir sicher auch Tipps für dich.

Hallo,

lasse dir mal die Variablen mit ausgeben. dauer und entfernung und schau was damit passiert. Dann sollte man mehr erkennen.

Du hast den Pulldown-Widerstand am Pin vergessen.

Was genau bewirkt dieser Widerstand und wie schließe ich diesen an?
Grüße

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)

Was für Modul ist das? wen HCSR-04 nimm die lib

Aber nicht für den Taster :wink:

Es gibt's auch lib's für Taster :wink: :rofl:

Der HCSG hat alles on Board :wink:
hab noch nie irgend welsche Widerstande gebraucht

Der TO fragt den Taster ab - nicht den Sensor.

Ach ja ein Taster ohne Taster ist auch gut

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.

Vielen Dank! Nun funktioniert alles.
Grüße

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.