Ein Taster -> 5 Ausgänge nacheinander ein und ausschalten

Hallo Zusammen,

ich habe folgendes Problem:

Ich möchte mit einem Tastendruck eine Ausgangsfolge schalten.

--> wenn Starttaster=1--> Ausgang1=1 für 0,5s

--> wenn Ausgang1=0--> Ausgang2=1 für 0,5s --> 0,5s DELAY -->
Ausgang2=1 für 0,5s --> 0,5s DELAY --> Ausgang2=1 für 0,5s

-->wenn Ausgang2=0 --> Ausgang3=1für 0,5s

-->wenn Ausgang3=0 --> Ausgang4=1 für 0,5s

-->wenn Ausgang4=0 --> Ausgang3=1 für 0,5s --> Ausgang3=0

Vielleicht kann mir jemand helfen, falls ich hier falsch bin bitte löschen!

Vielen Dank schon mal im Voraus!

Bitte verwenden Sie in den englischen Bereichen des Forums die englische Sprache. Ihr Thema wurde in den deutschen Bereich des Forums verschoben.

Oh sorry, vielen Dank!

Ja. Wie weit bist du schon?

Links:
https://docs.arduino.cc/built-in-examples/digital/StateChangeDetection/
https://docs.arduino.cc/built-in-examples/digital/Debounce/

Für die Aufgabenstellung bräuchtest du @wwerner s Links noch nicht mal.

Aber woran es hängt, solltest du schon beschreiben.

Würdest du es denn hinkriegen, wenn die Aufgabe hieße:

Nach dem Einschalten sollen 5 Ausgänge nacheinander für je 0,5 sec HIGH und danach wieder für immer (bis zum nächsten RESET) LOW werden?

Ansonsten: 1. Treffer bei Google: Ausgange nacheinander schalten

Das ist der "Schönes Wetter'-Fall.

  • Was soll nach diesem Ablauf passieren? (siehe #5)
  • Was soll passieren, wenn nach der Folge der Start taster noch aktiv ist?

Hallo testos

Herzlich Willkommen im besten Arduino Forum der Welt :slight_smile:

Was ist die Aufgabe des Programms im wirklichen Leben?

Hi, so sieht es bisher aus, leider ohne Erfolg.
Ich scheitere am deuten der Fehlermeldungen:

int Starttaster =2;
int C           =3;
int 6           =4;
int E           =5;
int 0           =6;
int Pause       =500;


void setup() {
  pinMode(Starttaster, INPUT);
  pinMode(C, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(E OUTPUT);
  pinMode(0, OUTPUT);
}

void loop() {
  if (digitalREAD(Starttaster) == HIGH);

  {
    digitalWrite(C, HIGH);  
    delay(Pause);                  
    digitalWrite(C, LOW);   



    digitalWrite(6, HIGH);  
    delay(Pause);                  
    digitalWrite(6, LOW);   

    digitalWrite(6 HIGH);  
    delay(Pause);                 
    digitalWrite(6, LOW)    

      digitalWrite(6, HIGH);  
    delay(Pause);                    
    digitalWrite(6, LOW)      



    digitalWrite(E, HIGH);  
    delay(500);                    
    digitalWrite(E, LOW);     



    digitalWrite(0, HIGH); 
    delay(500);                  
    digitalWrite(0, LOW);   


    digitalWrite(E, HIGH);  
    delay(500);                  
    digitalWrite(E, LOW);   
  }
}

Hi, danke für die schnelle Antwort!

-Nach dem Ablauf soll gewartet werden bis der Taster das nächste Mal betätigt wird.

-Der Taster gibt ja nur ein HIGH bei Betätigung aus, danach wird er ja automatisch wieder LOW.

Hi, leider werde ich das wohl nicht schaffen.
Ich tue mich noch unsagbar schwer mit der Syntax.

Probier den Blink Sketch aus. Dann mach in kleinen Schritten weiter.

mach mal das Semikolon weg

der compiliert nicht.
Du darfst keine numerische Variable benutzen.
Mach aus der 6 ein D und aus der 0 ein F.
Dann passe Deinen Sketch dementsprechend an.
Zum Beispiel hier:

In dem Fall würde der compilier den PIN 6 nehmen und nicht PIN D, der ja eigentlich 4 ist.

int Starttaster = 2;
int xC = 3;
int x6 = 4;
int xE = 5;
int x0 = 6;
int Pause = 500;


void setup() {
  pinMode(Starttaster, INPUT);
  pinMode(xC, OUTPUT);
  pinMode(x6, OUTPUT);
  pinMode(xE, OUTPUT);
  pinMode(x0, OUTPUT);
}

void loop() {
  if (digitalRead(Starttaster) == HIGH) {
    digitalWrite(xC, HIGH);
    delay(Pause);
    digitalWrite(xC, LOW);

    digitalWrite(x6, HIGH);
    delay(Pause);
    digitalWrite(x6, LOW);

    digitalWrite(x6, HIGH);
    delay(Pause);
    digitalWrite(x6, LOW);

    digitalWrite(x6, HIGH);
    delay(Pause);
    digitalWrite(x6, LOW);

    digitalWrite(xE, HIGH);
    delay(Pause);
    digitalWrite(xE, LOW);

    digitalWrite(x0, HIGH);
    delay(Pause);
    digitalWrite(x0, LOW);

    digitalWrite(xE, HIGH);
    delay(Pause);
    digitalWrite(xE, LOW);
  }
}

Ich habe mal 20 Fehler raus gemacht

1 Like

Nimmt er nicht den Finger von der Taste, wird das sofort neu starten.
Und ob das mit den delays so sinnvoll ist...

1 Like

Vielen Dank! Ich glaube das habe ich jetzt verstanden!

Vielen Dank!

Hi, danke für den Hinweis! Wie könnte ich dieses Problem umgehen?

Nach dem Durchlauf prüfen, ob die Taste nicht gedrückt ist.
Sag mal, was das hier wird:

Das wäre eigentlich einmal die HIGH-Time mit Pause*3 zu setzen...
Oder ist das ein Kopierfehler?