Switch Case funktioniert nur mit reset

Hallo meine Frage ist warum funktioniert der Code Reset nicht?
als erstes habe ich im Internet geschaut und dort den Tipp bekommen das man wenn man einen Pin z.B. 12 mit Reset verbindet und Pin 12 dann HIGH schaltet resettet sich der Arduino
der Code ist

int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
int led6 = 7;
int resetPin = 12;

#include "IRremote.h"
int receiver = 11; // Signal Pin of IR receiver to Arduino Digital Pin 11
IRrecv irrecv(receiver);     // create instance of 'irrecv'
decode_results results;      // create instance of 'decode_results'
void setup()
{
Serial.begin(9600);
Serial.println("IR Receiver Button Decode"); 
irrecv.enableIRIn(); // Start the receiver
digitalWrite(resetPin,OUTPUT);
digitalWrite(resetPin,LOW);
pinMode(led1,OUTPUT);
digitalWrite(led1,LOW);
pinMode(led2,OUTPUT);
digitalWrite(led2,LOW);
pinMode(led3,OUTPUT);
digitalWrite(led3,LOW);
pinMode(led4,OUTPUT);
digitalWrite(led4,LOW);
pinMode(led5,OUTPUT);
digitalWrite(led5,LOW);
pinMode(led6,OUTPUT);
digitalWrite(led6,LOW);
}
void loop() {
//Controler 
 if (irrecv.decode(&results)) // have we received an IR signal?
  {
    translateIR(); 
    irrecv.resume(); // receive the next value
  }  
  
}


void translateIR()
{
  switch(results.value)
  {
  
  case 0xFFA25D: Serial.println("POWER");while(true) {digitalWrite(resetPin,HIGH); } break;
  case 0xFFE21D: Serial.println("FUNC/STOP");break;
  case 0xFF629D: Serial.println("VOL+");break;
  case 0xFF22DD: Serial.println("FAST BACK");break;
  case 0xFF02FD: Serial.println("PAUSE");break;
  case 0xFFC23D: Serial.println("FAST FORWARD");break;
  case 0xFFE01F: Serial.println("DOWN");break;
  case 0xFFA857: Serial.println("VOL-");break;
  case 0xFF906F: Serial.println("UP");break;
  case 0xFF9867: Serial.println("EQ");break;
  case 0xFFB04F: Serial.println("ST/REPT");break;
  case 0xFF6897: Serial.println("0");break;
  case 0xFF30CF: Serial.println("1");while(true) {digitalWrite(led1,HIGH); delay(500); digitalWrite(led2,HIGH); delay(500) ;digitalWrite(led3,HIGH); delay(500); digitalWrite(led4,HIGH); delay(500);digitalWrite(led5,HIGH); delay(500); digitalWrite(led6,HIGH); delay(2000); digitalWrite(led1,LOW); digitalWrite(led2,LOW); digitalWrite(led3,LOW); digitalWrite(led4,LOW); digitalWrite(led5,LOW); digitalWrite(led6,LOW); delay(500); }   break;
  case 0xFF18E7: Serial.println("2");while(true) {digitalWrite(led1,HIGH); delay(500); digitalWrite(led1,LOW); delay(500);digitalWrite(led2,HIGH); delay(500); digitalWrite(led2,LOW); delay(500); digitalWrite(led3,HIGH); delay(500); digitalWrite(led3,LOW); delay(500); digitalWrite(led6,HIGH); delay(500); digitalWrite(led6,LOW); delay(500);  digitalWrite(led5,HIGH); delay(500); digitalWrite(led5,LOW); delay(500); digitalWrite(led4,HIGH); delay(500); digitalWrite(led4,LOW); delay(500); }   break;
  case 0xFF7A85: Serial.println("3");while(true) {digitalWrite(led1,HIGH); digitalWrite(led4,HIGH); delay(1000); digitalWrite(led1,LOW); digitalWrite(led4,LOW); delay(1000); digitalWrite(led2,HIGH); digitalWrite(led5,HIGH); delay(1000); digitalWrite(led2,LOW); digitalWrite(led5,LOW); delay(1000); digitalWrite(led3,HIGH); digitalWrite(led6,HIGH); delay(1000); digitalWrite(led3,LOW); digitalWrite(led6,LOW); delay(1000); }  break;
  case 0xFF10EF: Serial.println("4");break;
  case 0xFF38C7: Serial.println("5");break;
  case 0xFF5AA5: Serial.println("6");break;
  case 0xFF42BD: Serial.println("7");break;
  case 0xFF4AB5: Serial.println("8");break;
  case 0xFF52AD: Serial.println("9");break;
  case 0xFFFFFFFF: Serial.println(" REPEAT");break;  
  default: 
    Serial.println(" other button   ");
  }
  delay(500);
}

nun mehrere Fragen wie kann ich den Code Reseten und warum geht eine neuer Case nur mit einem Reset des Arduinos liegt das vielleicht an dem Switch Case das es nur mit Reset Funktioniert und wie könnte ich das umgehen

Lg Jonathan und Timo (Timo Fragt)

Ihr Beitrag wurde an seinen aktuellen Speicherort verschoben, da er besser geeignet ist.

Warum?

Ich behaupte, das das nicht stimmt.

Davon gibt es noch mehr.
Die while(frage) wird niemals false - da ist das ganze delay dahinter nicht mal mehr von Bedeutung.

Immer auf die anderen :slight_smile:

Das kann nicht funktionieren. Schau in die examples.
Wenn Du was nicht verstehst, frage genau danach.
trenne dich von delay() - das funktioniert nicht.
Schau in die Beispiele - 02 digital - blink without delay.

Einfacher und rein in Software geht das über den Watchdog Timer:
https://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_softreset

Allerdings sollte man sich schon Gedanken machen wieso das überhaupt nötig sein sollte.

Das ziel ist das man am ende eines der 3 Blink Programme auswählen kann
wir haben das jetzt mit while gelöst nachdem mein freund es getestet hat ging nur nach erneutem reseten eine andere auswahl warum ist das so ist jetzt meine Frage

while(true).
Hab ich geschrieben.

ja ich weiß aber warum Funktioniert es nicht

Der Code nach while wird solange ausgeführt, wie die Bedingung in der Klammer true ist. Da du true in die Klammer schreibst, wird dieser Codeblock immer ausgeführt. Da kommst du nur mit reset wieder raus.

Wenn du Endlosschleifen baust, dann solltest du dich nicht wundern, dass sie endlos laufen.

Du wirst lernen müssen, wie man endliche Automaten baut und diese nebeneinander her laufen lässt.

ah ok
dann werde ich es mal mit for versuchen

oder ist das auch endlos

NEIN!
das switch/case ist schon nicht falsch, aber das while! (und das delay()) - aber das später....

die Leds sollen immer Blinken das mit dem Delay hat mein Freund zu verschulden

bessere Frage wie mache ich endlich schleifen

Indem du Bedingungen erstellst die erreicht werden (sich ändern) können.

ach und wie mach ich das

Das steht im Allgemeinen hier und im Speziellen für den Arduino/C++ z.B. hier oder in jedem C++-Buch.

als Ersatz für while

Mal ehrlich - ich bin der Letzte, der jemandem Hilfe verweigert - aber ich mag deinen Ton nicht.

Dein Einstieg könnte so aussehen:

const byte led[] = {2,3,4,5,6,7}

#include "IRremote.h"
int receiver = 11; // Signal Pin of IR receiver to Arduino Digital Pin 11
IRrecv irrecv(receiver);     // create instance of 'irrecv'
decode_results results;      // create instance of 'decode_results'
unsigned long myResult;
unsigned long myMillis;
void setup()
{
  Serial.begin(9600);
  Serial.println("IR Receiver Button Decode");
  irrecv.enableIRIn(); // Start the receiver
  for (byte b=0; b<sizeof(led); b++)
  pinMode(led[b], OUTPUT);
  digitalWrite(led[b], LOW);
}

Das vereinfacht später einiges....

Du kannst natürlich auch drauf verzcihten und dann solche Konstrukte:

void loop()
{
  //Controler
  if (irrecv.decode(&results)) // have we received an IR signal?
  {
    translateIR();
    irrecv.resume(); // receive the next value
    myResult = results.value;
    ledAus();
  }
  myResult = tikTak(myResult);
}

uint8_t tikTak(uint8_t myTak)
{
  static uint32_t myMillis = 0;
  switch (myTak)
  {
    case 1:
      digitalWrite(led1, HIGH);
      myMillis = millis();
      myTak = 2;
      break;
    case 2:
      if (millis() - myMillis > 500)
      {
        digitalWrite(led2, HIGH);
        myMillis = millis();
        myTak = 3;
      }
      break;
    case 3:
      if (millis() - myMillis > 500)
      {
        digitalWrite(led3, HIGH);
        myMillis = millis();
        myTak = 4;
      }
      break;
    case 4:
      if (millis() - myMillis > 500)
      {
        digitalWrite(led4, HIGH);
        myMillis = millis();
        myTak = 5;
      }
      break;
    case 5:
      if (millis() - myMillis > 500)
      {
        digitalWrite(led5, HIGH);
        myMillis = millis();
        myTak = 6;
      }
      break;
    case 6:
      if (millis() - myMillis > 500)
      {
        digitalWrite(led6, HIGH);
        myMillis = millis();
        myTak = 7;
      }
      break;
    case 7:
      if (millis() - myMillis > 2000)
      {
        ledAus();
      }
      myMillis = millis();
      myTak = 8;
      break;
    default:
      break;
      return myTak;
  }
}

zu bauen...

Willst Du wirklich lernen?
Dann mal was zur guten Nacht - jeden Abend ein paar Seiten lesen.
Nicht auswendig lernen, nur wissen was drin steht.
ArduinoForum.de - Das deutschsprachige Forum rund um den Arduino - Arduino Code-Referenz (deutsch) da das pdf runterladen.

Das mit meinem Ton tut mir leid
Danke für deine Antwort ich werde es mir Morgen mal anschauen