Le principe est de relier la broche A0 au 5V en intercalant une résistance de 2KOhms on obtient alors une valeur de 5V (soit un chiffre de 1022 à 1023). Chaque switch construit un lien entre la masse et A0 via une résistance dont la valeur peut être comprise entre 0 et xxOhms. J’ai utilisé les résistances que j’avais à ma disposition et j’ai testé les valeurs produites avec le sketch ci-dessous.
Le code est ici
/***********************
Lecture de l'état de plusierurs switch à partir d'une broche analogique
5v->2KOhms->A0 : donne 5v soit 1022 à 1023
Relier GND->Rx sur A0 (sur la patte de la R allant à A0)
Rx= 0 : 0 (GND relié directement)
***********************/
//#define TEST_ON //-- Comment ou Uncomment pour afficher valeurs
int sensorValue;
int oldkey=0, key=0;
void setup() {
Serial.begin(9600);
}
void loop() {
//-- lecture analog pin 0:
sensorValue = analogRead(A0);
if (sensorValue<1022)
key=buttonPushed(sensorValue);
else
oldkey=0;
}
int buttonPushed(int val) {
delay(50); //--short tempo
if( val == 0 ) {
if (oldkey!=key)
{Serial.println("switch 1 pressed");
oldkey=1;}
return 1;
}
else if ( val >= 90 and val <= 91) { // 220k
if (oldkey!=key)
{Serial.println("switch 2 pressed");
oldkey=2;}
return 2;
}
else if ( val >= 179 and val <= 180) { // 470k
if (oldkey!=key)
{Serial.println("switch 3 pressed");
oldkey=3;}
return 3;
}
else if ( val >= 317 and val <= 318 ) { // 1kOhms
if (oldkey!=key)
{Serial.println("switch 4 pressed");
oldkey=4;}
return 4;
}
else if ( val >= 1001 and val <= 1002) { // 100kOhms
if (oldkey!=key)
{Serial.println("switch 5 pressed");
oldkey=5;}
return 5;
}
else { //--Pour toute autre valeur de résistance
#ifdef TEST_ON
Serial.println(val);
#endif
return 0;
}
}
Votre commentaire