Tu veux discriminer 3 états différents 0, 3,3V et 5V. Donc il ne faut pas faire
mais plutôt
CH1_State = analoglRead(CH1);
et ensuite faire les tests sur trois fourchettes de valeurs.
Sur l'arduino la référence de tension de l'ADC est à 5V et le résultat de la conversion analogique numérique est compris entre 0 et 511 avec 0 pour 0V en entrée et 511 pour 5V en entrée.
Donc, pour tenir compte du bruit sur les signaux, des erreurs intrinsèques de l'ADC:
Si analogRead() retourne
- une valeur < à 50 cela correspond à l'entrée à 0V.
- une valeur comprise entre 300 et 350 cela correspond à l'entrée à 3,3V.
- une valeur supérieure à 450 cela correspond à l'entrée à 5V.
En reprenant ta spécification
Le code donnerait
CH1_State = analogRead(CH1);
if (CH1_State < 50){
CH1_FX1= 0;
CH1_FX2=0;
} else if (CH1_State > 300 && CH1_State < 350){
CH1_FX1= 1;
CH1_FX2=0;
} else if (CH1_State > 450){
CH1_FX1= 0;
CH1_FX2=1;
}
Edit: mais pourquoi je suis parti sur un codage sur 9 bits???
5V = 1023.
Toutes les valeurs sont à multiplier par 2.