un bouton poussoir pour choisir plusieurs fonction

Bonjour à tous

Je souhaite utiliser un arduino Mega (que j'ai déjà en ma possession) afin de faire un préampli hifi.
L'arduino contrôlera le volume via un pga2310 ainsi que la sélection de source via une carte avec 4 relai soit 4 source.

Pour le contrôle du volume sa va mais je rencontre un problème pour la séléction de source. En effet je souhaiterai utiliser le bouton sw d'un encodeur rotatif vkeyes

pour choisir les différentes entrées mais là ou sa bloque c'est que dans le terminal série la fonction tourne en boucle il s'arrête pas. Il affiche le nombre de fois que le bouton a été appuyer ainsi que l'entrée sélectionner mais ne s'arrête pas si une âme charitable pourrait m'aider ce serait cool.

Ci dessous le code que j'utilise actuellement(j'ai trouver ce code sur le net et je l'ai adapter à mes besoins ce programme consistait le nombre de fois ou l'encodeur été tourner de manière croissante et décroissante et le bouton sw servait à réinitialiser le compteur )

const int btn_sel = 5;
int compt=0; // variable de comptage

void setup()   { // debut de la fonction setup()

// --- ici instructions à exécuter au démarrage ---

Serial.begin(115200); // initialise connexion série à 115200 bauds
// IMPORTANT : régler le terminal côté PC avec la même valeur de transmission

pinMode(btn_sel, INPUT); 
} 

void loop(){ // debut de la fonction loop()
if (digitalRead(btn_sel)==LOW){
  compt=compt+1;
}
Serial.println(compt);

if (compt<0) compt=3;
if (compt>3) compt=0;

switch (compt){
  case 1:
 Serial.println("cd"); 
case 2:
Serial.println("dac");
break;
case 3: 
Serial.println("tuner");
break;
case 4:
Serial.println("dvd");
break;
}
}

Si une âme charitable passe par là...

jpdunord:
pour choisir les différentes entrées mais là ou sa bloque c'est que dans le terminal série la fonction tourne en boucle il s'arrête pas. Il affiche le nombre de fois que le bouton a été appuyer ainsi que l'entrée sélectionner mais ne s'arrête pas si une âme charitable pourrait m'aider ce serait cool.

...

bonjour
il te faut verifier si il y a eu un changement de valeur avant de rentrer dans la boucle
de plus tu test de 0à 3 (4 possibilités) ton case 4 ne sera jamais appelé
tu à oublié un break
il faut te menager un delai pour le relachement du bouton (j'ai mis 20 ms au pif)

const int btn_sel = 5;
int compt=0; // variable de comptage
int oldcompt=0;
void setup()   { // debut de la fonction setup()

// --- ici instructions à exécuter au démarrage ---

Serial.begin(115200); // initialise connexion série à 115200 bauds
// IMPORTANT : régler le terminal côté PC avec la même valeur de transmission

pinMode(btn_sel, INPUT_PULLUP); 
} 

void loop(){ // debut de la fonction loop()
if (digitalRead(btn_sel)==LOW){
  compt=compt+1;
}

if (compt != oldcompt){



if (compt<0) compt=3;
if (compt>3) compt=0;
Serial.print(compt);
Serial.print(" ");
switch (compt){
  case 0:
 Serial.println("cd"); 
 break;
case 1:
Serial.println("dac");
break;
case 2: 
Serial.println("tuner");
break;
case 3:
Serial.println("dvd");
break;
}
oldcompt=compt;
delay(20);
}
}

teste ça (j'ai mis l'entrée en imput_pullup)

Merci beaucoup Artouste

Alors là tu m'as vraiment aidé j'étais bloquer là dessus depuis un bon moment j'ai juste modifier le délai à 300 et là y a tout bon.

Encore une fois merci beaucoup une fois le projet terminer je montrerais ma réalisation dans le topique associer.