Erste Einstiegs Frage, Code

Hallo,

Ich bin neu hier und habe gerade angefangen mit arduino.
habe schon ein paar einfache test gemacht und scheitere gerade an der programierung.

Ich habe ein Arduino Bord einen Schalter und eine LED.

Ich möchte wenn ich den Schalter betätige das die LED X Sekunden lang leuchtet.

In dieser zeit soll der Schalter ohne Funktion sein.

Wenn die LED wieder aus ist soll der Schalter wieder funktionieren.

Kann mir da jemand helfen.
ich habe es mit dealy() versucht aber das funktioniert nicht richtig und verlangsamt nur alles.
ich habe schon mit if und else bischen rumprobiert komme aber nicht weiter.

Mein Ausgangascode ist:

int ledPin = 2; // LED 
int inPin = 13;   // Verbunden mit Schalter - und -> 5V Adurino 
int w = 0;    
int t = 3000; // diese Zeit LED leuchten
 
void setup() {
  pinMode(ledPin, OUTPUT); 
  pinMode(inPin, INPUT);  
}

void loop() {
  w = digitalRead(inPin); 
  digitalWrite(ledPin, w); 

}

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Dann ist er auch auf mobilen Geräten besser lesbar.
Das kannst Du auch noch nachträglich ändern.

Wenn der Prozessor nichts anderes machen soll, würde das auch mit delay() gehen. Ansonsten schau Dir mal das Beispiel BlinkWithoutDelay in der IDE an und verstehe es.

Gruß Tommy

inPin = 13;

Je nach Board bzw. Beschaltung kann das kritisch sein, da da meist eine LED dran hängt.

und habe gerade angefangen mit arduino.

Dann verschaffe ich dir erstmal Lesestoff....

Ablaufsteuerung
Meine Standardantwort zu Ablaufsteuerungen:

Eine Stichworte Sammlung für Google Suchen:
Endlicher Automat,
ProtoThreads,
State Machine,
Multitasking,
Coroutinen,
Ablaufsteuerung,
Schrittkette,
BlinkWithoutDelay,

Automat (Informatik)
Blink Without Delay
Die Nachtwächter Erklärung

MicroBahner/MobaTools
Intervall Macro
Multitasking Macros
INTERVAL Ersatzstoff
CooperativeTask

Hallo,

eigendlich hilft da immer einen Ablauf zu erstellen. Scheib es einfach auf, wenn Du das ein bischen geübt hast kannst Du aus fast jeder Textzeile eine Coddezeile machen.

Etwas so:

Wenn Taster gedrückt ist dann
LED einschalten
gewünschte Zeit warten
LED ausschalten

Das führt am einfachsten zu delay(), alledings macht der Controller bei delay eine Pause und macht fast nichts mehr bis die Zeit abgelaufen ist. Wenn Du also zwei Taster und zwei LED hast , und die unabhängig voneinander laufen sollen wird das so nichts.

dann so

Wenn Taster gerade gedrückt wird (Flanke erkennen) und LED ist aus dann
startzeit = aktuelle Zeit
LED einschalten

Wenn aktuelle Zeit -startzeit >= gewünschet Dauer
LED aus

das führt zum Einsatz von millis()

Heinz

also im Prinzip möchtest du ein nicht retriggerbares Nachlaufrelais nachbauen.

das ist eine Variante für ein retriggerbare Nachlaufrelais:

https://werner.rothschopf.net/202003_arduino_retriggerbares_nachlaufrelais.htm

Das Grundgerüst bleibt gleich, du musst bei der Buttonabfrage nur dazugeben, ob die LED noch aus ist.

statt

if (digitalRead(i.buttonPin) == LOW)

also

if (digitalRead(i.buttonPin) == LOW && digitalWrite(i.outputPin, LOW))

p.s.: alles lesen - nicht nur nur blind rauskopieren!

(deleted)

nein, die anderen 5 waren alle "nachtriggerbar" :wink:

Aber es zeigt halt auf, woran die Leute so verzweifeln.

justi12:
Ich habe ein Arduino Bord einen Schalter und eine LED.

In dieser zeit soll der Schalter ohne Funktion sein.

Wenn die LED wieder aus ist soll der Schalter wieder funktionieren.

Kann mir da jemand helfen.

Ich möchte jetzt mal etwas genauer nachfragen.
Was ist das für ein Schalter ?
Was verstehst du darunter, "der Schalter soll keine Funktion haben ?
Ist der dann blockiert oder defekt ?
Wenn er wieder funktionieren soll, ist er wieder "heil" ?

Üblicherweise beschreibt man den Schalter als ein oder ausgeschaltet.
Das gilt evtl. auch für einen Taster, der nur durch einen Druck ein bzw. loslassen ausgeschaltet ist.

Und ja, helfen können wir.

noiasca:
nein, die anderen 5 waren alle "nachtriggerbar" :wink:

:wink:
https://forum.arduino.cc/index.php?topic=693673.msg4764729#msg4764729

Aber es zeigt halt auf, woran die Leute so verzweifeln.

Suche billigste Preis: ja.
Suche beste Information: nein.

Man muss Prioritäten setzen!

int ledPin = 13; // eingebaute LED
int inPin = 2;   // Verbunden mit Schalter und 1k Pulldown Widerstand nach GND, Schalter nach  5V
int w = 0;   
int t = 3000; // diese Zeit LED leuchten
 
void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(inPin, INPUT); 
}

void loop() {
  w = digitalRead(inPin);
  digitalWrite(ledPin, w);
  if (w == HIGH) delay(t); // wenn Schalter betätigt, soll LED t ms lang leuchten. In dieser Zeit wird der Schalter nicht abgefragt. 
}

Und was ist daran so schwer?

Das Problem ist, dass die Aufgabenstellung bedeutet, dass die LED nach dem Ausschalten des Tasters eine (scheinbar) unbestimmte Zeit lang nachleuchtet, wenn der Schalter länger als 3 s eingeschaltet war.
Mal geht sie kurz nach dem Ausschalten aus, mal leuchtet sie bis zu t ms lang nach.
Es sind natürlich immer ganzzahlige Vielfache der delay-Zeit.

Das kann ein ungewollter Effekt sein, und zeigt eher, wie unklar die Aufgabenstellung ist.

(deleted)