chenillard multiprogramme

bonjours a tous, j'ai un souci avec mon programme de ma carte diduino. j'essaye de faire que quand j'appuie sur mon bouton "S1" une boucle s'exécute et que quand j'appuie sur "S2" ma première boucle s'arrête et qu'elle lance une seconde boucle. Puis quand J'appuie sur "S3" ça stop toute mes boucle. pour le moment j'ai réussi a faire que quand j'appuie sur un bouton l'une de mes boucles se lance mais si je veux lancer l'autre je dois reset ma carte manuellement.

const int L1 = 2;
const int L2 = 3;
const int L3 = 4;
const int L4 = 5;
const int L5 = 6;
const int L6 = 7;
const int L7 = 8;
const int L8 = 9;

int S1 = 11;
int S2 = 12;
int S3 = 13;
int val1;
int val2;
int val3;

void setup() {
  pinMode(S1, INPUT);
  pinMode(S2, INPUT);
  pinMode(S3, INPUT);
  pinMode(L1, OUTPUT);
  pinMode(L2, OUTPUT);
  pinMode(L3, OUTPUT);
  pinMode(L4, OUTPUT);
  pinMode(L5, OUTPUT);
  pinMode(L6, OUTPUT);
  pinMode(L7, OUTPUT);
  pinMode(L8, OUTPUT);
}

void loop() {
  val1=digitalRead(S1);
  val2=digitalRead(S2);
  val3=digitalRead(S3);
  if (val1==0 && val2==1)
  {while (val1==0 && val2==1)
  {
  digitalWrite(L1, LOW);
  delay(50);
  digitalWrite(L2, LOW);
  delay(50);
  digitalWrite(L3, LOW);
  delay(50);
  digitalWrite(L4, LOW);
  delay(50);
  digitalWrite(L5, LOW);
  delay(50);
  digitalWrite(L6, LOW);
  delay(50);
  digitalWrite(L7, LOW);
  delay(50);
  digitalWrite(L8, LOW);
  delay(50);
  digitalWrite(L1, HIGH);
  delay(50);
  digitalWrite(L2, HIGH);
  delay(50);
  digitalWrite(L3, HIGH);
  delay(50);
  digitalWrite(L4, HIGH);
  delay(50);
  digitalWrite(L5, HIGH);
  delay(50);
  digitalWrite(L6, HIGH);
  delay(50);
  digitalWrite(L7, HIGH);
  delay(50);
  digitalWrite(L8, HIGH);
  delay(50);
     }
  }
  if (val2==0 && val1==1)
  {
  while (val2==0 && val1==1)
  {
  digitalWrite(L8, HIGH);
  delay(50);
  digitalWrite(L7, HIGH);
  delay(50);
  digitalWrite(L6, HIGH);
  delay(50);
  digitalWrite(L5, HIGH);
  delay(50);
  digitalWrite(L4, HIGH);
  delay(50);
  digitalWrite(L3, HIGH);
  delay(50);
  digitalWrite(L2, HIGH);
  delay(50);
  digitalWrite(L1, HIGH);
  delay(50);
  digitalWrite(L1, LOW);
  delay(50);
  digitalWrite(L2, LOW);
  delay(50);
  digitalWrite(L3, LOW);
  delay(50);
  digitalWrite(L4, LOW);
  delay(50);
  digitalWrite(L5, LOW);
  delay(50);
  digitalWrite(L6, LOW);
  delay(50);
  digitalWrite(L7, LOW);
  delay(50);
  digitalWrite(L8, LOW);
  delay(50);
  }
  }
  }

Pour changer de boucles, il faut attendre la fin d'une boucle, tu ne peux pas interrompre des delay...