Forum: Mikrocontroller und Digitale Elektronik delay oder millis oder?


von Jens S. (server001)


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

: Bearbeitet durch User
von Einer K. (Gast)


Lesenswert?

Trenne!

Trenne Tastenabfrage von Dimmen.

Baue einen endlichen Automaten, bzw eine Schrittkette, oder 
Ablaufsteuerung.

von Jens S. (server001)


Lesenswert?

hab jetzt leider nicht so das Fachwissen zum coden. Bin froh das mein 
sketch soweit funktioniert ,)
wäre supper wenn du mir etwas mehr input geben könntest ;)

von Einer K. (Gast)


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.

von Frank M. (ukw) (Moderator) Benutzerseite


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.

: Bearbeitet durch Moderator
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.