Einschaltsignal Input mit externer Spannungsquelle, Zeitverzögertes Ausschalten

Hallo,

bin blutiger Anfänger und dachte ich kann mir mal schnell ein einfaches Programm erzeugen aber leider bin ich elektronisch wohl doch sehr schwach. Zu meinem Problem:
Sobald ich an einem Eingang eine Spannung ab ca. 1,5 Volt anliegen habe soll eine LED für 4 Sekunden geschaltet werden, egal wie lange die Eingangsspannung anliegt. Erst wenn diese Spannung wieder auf null fällt und wieder eingeschaltet wird soll die LED wieder für 4 Sekunden geschaltet werden. Ich hoffe es ist etwas verständlich. Danke

Willkommen, Herrbert!
Würde ich logisch so angehen, mal davon ausgehend dass die Eingangsspannung als HIGH gewertet wird:

  1. Eingangsabfrage, wenn Eingang HIGH Status merken
  2. LED für 4 Sekunden einschalten
  3. Warten, bis Eingang LOW wird und den Statuswert wieder umdrehen
  4. Zurück zu 1.

Grüße
Klaus

Danke Klaus,

Dein Ablauf sieht gut aus, leider bekomme ich das im code nicht hin und wie ist das mit den 1,5 Volt, erkennt Arduino das als High Pegel oder muss ich da noch was einstellen? Ich habe mal angefangen was zu prgrammieren aber das passt irgendwie nicht:

int ledPinOut = 13; // Variable Pin 13 zugewiesen
int SpannungInput = A1; // Variable Pin A1 zugewiesen
int SpannungStatus; // Variable für Status des SpannungInputs
void setup(){
pinMode(ledPinOut, OUTPUT); // Pin 13 als Ausgang
}
void loop() {
if(analogRead(SpannungInput) == HIGH && lastread == false){
digitalWrite(ledpinOut, HIGH);
delay(4000);
digitalWrite(ledpinOut, LOW);
lastread = true;
}
else if(analogRead(SpannungInput) == LOW && lastread == true){
lastread = false;
}
}

WIe kann ich den Status merken und wie drehe ich Ihn herum?

um eine Spannung einzulesen und mit eine Wert zu vergleichen muß du dir das in AD-Werte umrechenen:
5V entsprechen 1023
also, Dreisatz:
1,5V entsprechen 307.

Deinen Status merkst du dir ja schon mit der Variablen lastread.

Ich habe dir noch ein paar "Serial.print()" eingefügt.
Damit kannst du im Monitor verfolgen, was deine Software macht.

Der Code ist ungeprüft, kann also noch Fehler enthalten.

int ledPinOut = 13; // Variable Pin 13 zugewiesen
int SpannungInput = A1; // Variable Pin A1 zugewiesen
int lastread = LOW;
const int Spannungsschwelle = 307;  // 1,5/5*1023
void setup(){
  Serial.begin(9600);
  pinMode(ledPinOut, OUTPUT); // Pin 13 als Ausgang
}
void loop() {
  int ADCread = analogRead(SpannungInput);
  if(ADCread > Spannungsschwelle && lastread == LOW){
    Serial.print("AD-Wert: "); Serial.print(ADCread);
    Serial.println("              HIGH erkannt");
    digitalWrite(ledPinOut, HIGH);
    delay(4000);
    digitalWrite(ledPinOut, LOW);
    lastread = HIGH;
  }
  else if(ADCread < Spannungsschwelle){
    Serial.print("AD-Wert: "); Serial.print(ADCread);
    Serial.println("              LOW erkannt");
    lastread = LOW;
  }
delay(200); // um die Lesbarkeit am Seriellen Monitor zu verbessern
}

Hallo Gunther, Danke. Es funktioniert ein Teil, was aber nicht funktioniert ist, dass der Ausgang nach 4 Sekunden abschaltet auch wenn noch Spannung am EIngang anliegt. Der Ausgang soll 4 Sekunden geschaltet werden und dann abgeschaltet egal ob noch Spannung am Eingang anliegt. Erst wenn die Spannung am Eingang aus ist und erneut eingeschaltet wird soll der Ausgang wieder 4 Sekunden geschaltet werden. Was muss ich hier ändern?

Danke

Hallo Gunther, war mein Fehler. Ich hatte den Pull Down Widerstand nicht richtig angeklemmt und so kam es wohl immer wieder zur statischen Aufladung. Jetzt läuft es, vielen Dank. Puhh, ich tu mich schwer mit dem Einstieg in Arduino vor allem wenn ich bei so einfachen Schaltungen schon nicht weiter komme, wo gibt es denn noch gute Übungen für Anfänger?

Danke

Grüße Bert

Schön, dass du den Fehler gefunden hast!
Selbst gefundene Fehler sind die schönsten Erfolgserlebnisse. :grin:

Beispiele zum Lernen hast du ja ganz viele mitgeliefert bekommen. Die sind alle hier beschrieben:
Learning => Examples

Wenn du tiefer einsteigen willst, dann hier weiter schauen:
Learning => Playground