delay oder millis oder?

OP #4877896
Lesenswert?

hi, ich hab zwar schon gesucht aber leider nichts passendens gefunden.

Ich habe eine funktion
1
void dimmenlinks() {
2
    if (statTFL_L==100&&statTFL_R==100&&digitalRead(Bl_L)==HIGH) {
3
             for (int fadeValue = 255 ; fadeValue >= 50; fadeValue -= 5) {
4
            analogWrite(TFL_L, fadeValue);delay(10);
5
            statTFL_L = 60;}        
6
}}
7
void aufhellenlinks() {
8
        if (statTFL_L==60&&statTFL_R==100&&digitalRead(Bl_L)==LOW) {
9
             for (int fadeValue = 50 ; fadeValue <= 255; fadeValue += 5) {
10
            analogWrite(TFL_L, fadeValue);delay(10);
11
            statTFL_L = 100;}     
12
}}
die funktion startet wenn TFL_R=100&TFL_L=100&&Eingang "BL_L" "HIGH" 
ist.
jedoch liefer mein Eingang "BL_L" kein permanentes Signal sondern
"HIGH/LOW/HIGH/LOW" usw. jeweils o,5sec im wechsel

dadurch wird "aufhellenlinks" sofort durchlaufen und dann gleich wieder 
"dimmenlinks"

Wie kann ich prüfen ob "digitalRead(Bl_L)==LOW" schon 3sec. lang LOW ist 
und das in die Fuktion einbinden?

anders gesagt, bleibe im "statTFL_L = 60;" bis digitalRead(Bl_L)==LOW 
(länger als 3sec.)


ich danke euch schon mal
Gast #4877936
Lesenswert?

Jens S. schrieb:
> wäre supper wenn du mir etwas mehr input geben könntest ;)

Wie denn....
Habe doch keine Ahnung, was das ganze überhaupt tun soll...
Verstehe auch deine lustigen Bezeichner nicht.

Darum mein gut gemeinter Rat:
Ziehe es auseinander, damit es übersichtlicher wird.
Schachtel die Bedingungen nicht so tief.

Denke in Zuständen, und den Transformationen zwischen ihnen.

Liste alle Zustände auf.
Kläre die Transformationen und ihre Bedingungen.
Moderator Persönliche Seite #4877955
Lesenswert?

Jens S. schrieb:
> hab jetzt leider nicht so das Fachwissen zum coden. Bin froh das mein
> sketch soweit funktioniert ,)

Das nützt Dir aber nichts. Du befindest Dich in einer Sackgasse, aus der 
Du so nicht rauskommst.

> wäre supper wenn du mir etwas mehr input geben könntest ;)

Das Problem ist, dass Du während des Fadens ja noch den Input lesen und 
interpretieren musst. Deine for-Schleife ist aber ca. 200msec mit dem 
Faden beschäftigt und tut währenddessen nichts anderes.

Siehe Statemachine <-- hier klicken

Teile und herrsche.

EDIT:
Und vergiss Delays. millis() ist bei Arduino ein gutes Mittel, einen 
kommenden Zeitstempel als Ereignis aufzufassen. Noch besser wären Timer. 
Aber da bewegst Du Dich weg vom eigentlichen Arduino-Gedanken, möglichst 
hardwarefern zu programmieren. Das ist Geschmackssache.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren