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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.