En premier lieu, vérifiez que tout fonctionne correctement sur une breadboard :
Pour cela, vous pouvez utilisez le schéma Fritzing ci-dessus :
(comme vous pouvez vous en douter : VCC en haut, GND en bas)
La borne du milieu du bornier est a relier à l’entrée analogique de votre carte arduino.
Une fois le cablage effectué, pour tester le bon fonctionnement :
- si vous ne disposez pas d’un écran LCD, vous pouvez utiliser le programme fourni avec le shield DFR0075 (Je vous laisse chercher sur internet). Le résultat s’affiche sur le port série.
- si vous disposez d’un écran I2C, vous pouvez utiliser le programme ci-dessous adapté par mes soins :
/*
* Programme de test de la carte 5 boutons fait maison sur StripoBoard avec une seul entrée analogique
* Pour cela nous mesurons la valeur de la tension d'une entrée analogique afin de savoir quel bouton a été pressé.
*
* Adapté à partir du programme fourni avec le shield DFR_0075 de DFR Robots
* Ce programme affiche un message lorsqu'un bouton est pressé sur le port série et l'écran LCD et la valeur de la tension servant a mesurer le bouton pressé sur le port série
* Ce programme est doté d'un anti-rebond logiciel
*
* Prévu pour fonctionner avec un écran I2C (ici un seed studio 104020113)
* Branchements : Alimentation (Vcc 5V + GND), Signal d'entrée (A0)
*/
#include "rgb_lcd.h"
#include <Wire.h>
rgb_lcd lcd;
const int colorR = 255;
const int colorG = 0;
const int colorB = 0;
#define Broche_Lecture A0 // On va lire la tension sur la broche A0
int adc_key_val[5] ={
102,313, 516, 714, 900 };
int NUM_KEYS = 5;
int adc_key_in;
int key=-1;
int oldkey=-1;
void setup()
{
pinMode(13, OUTPUT); //Utilise la LED de la broche 13 pour confirmer l'appui sur un bouton
pinMode(Broche_Lecture, INPUT); // Place la broche analogique sur laquelle on va lire la tension en entrée
/* Initialisation du port série*/
Serial.begin(9600); // 9600 bps
Serial.println ("Essai de la carte 5 boutons fait maison");
Serial.print ("Affichage en continu de la tension lue sur la broche et de l'appui bouton détecté");
/* Initialisation de l'écran LCD */
lcd.begin(16, 2);
lcd.setRGB(colorR, colorG, colorB);
lcd.clear();
lcd.setCursor(0,0); // positionne le cureur en haut a gauche de l'ecran
lcd.print ("Essai 5 boutons fait maison");
lcd.setCursor(0,1);
}
void loop()
{
adc_key_in = analogRead(Broche_Lecture); // Lecture de la tension sur la broche analogique
Serial.print("Valeur tension lue : ");
Serial.println(adc_key_in);
key = get_key(adc_key_in); // Appel à la fonction de conversion
if (key != oldkey) // Si on détecte un appui sur un bouton
{
delay(50); // Délai d'attente (anti-rebond lmatériel)
adc_key_in = analogRead(Broche_Lecture); // 2ème lecture de la valeur de la tension sur la broche analogique
key = get_key(adc_key_in); // Appel à la fonction de conversion
if (key != oldkey)
{
oldkey = key;
if (key >=0){
digitalWrite(13,HIGH); // Allume la LED de la broche 13
switch(key)
{
case 0:
lcd.println("B1 OK");
Serial.println("B1 OK");
break;
case 1:
lcd.println("B2 OK");
Serial.println("B2 OK");
break;
case 2:
lcd.println("B3 OK");
Serial.println("B3 OK");
break;
case 3:
lcd.println("B4 OK");
Serial.println("B4 OK");
break;
case 4:
lcd.println("B5 OK");
Serial.println("B5 OK");
break;
}
delay(500); // Délai d'affichage du bouton pressé (Bloque tout nouvel appui)
digitalWrite(13,LOW); // Eteindre la LED de la broche 13
// Il faut effacer l'écran pour afficher la prochaine mesure
lcd.clear();
lcd.setCursor(0,0); // positionne le cureur en haut a gauche de l'ecran
lcd.print ("Essai 5 boutons fait maison");
lcd.setCursor(0,1);
}
}
}
delay(100);
}
// Convertir la tension lue sur la broche en numéro de bouton pressé
int get_key(unsigned int input)
{
int k;
for (k = 0; k < NUM_KEYS; k++)
{
if (input < adc_key_val[k])
{
return k;
}
}
if (k >= NUM_KEYS)k = -1; // La valeur détectée ne correspond a rien
return k;
}
Excellent! C'est tout bête mais fallait y penser :-)