Je suis afficher la valeur d'une tension aux bornes d'une resistance dans un montage PDDT (réalisé avec une thermistance) à condition que le bouton poussoir soit appuyé et que rien ne s'affiche dans le moniteur série lorsque le bouton est relâché. Je n'arrive pas à avoir une seule valeur de tension... J'ai trouvé une "astuce" grâce à un delay très long. Peut-être auriez-vous quelque chose de plus "joli" à me proposer. Merci!
// Définition des broches numériques d'entrée et de sortie du microcontrôleur
const int bouton = 3;
const int Ur = A1; // Entrée analogique A1 utilisée pour la tension de sortie Ur du pont diviseur
// BOUCLE PRINCIPALE : exécutée à l'infini
void loop()
{
boolean etatBouton = digitalRead(bouton);
// Affichage de la tension Ur en sortie du montage pont diviseur sur le Moniteur série si le bouton est appuyé
if (etatBouton == HIGH) //
{
int valeur = analogRead(Ur);
float tension = (valeur / 1024.0) * 5.0;
Serial.println(tension);// Affichage dans le Moniteur Série de la valeur de la tension Ur
}
delay(5000);
}
Je ne comprend pas ce que tu veux faire. Tu veux que la tension s'affiche une seule fois quand tu appuies sur le bouton?
Si c'est le cas il faut tester si le bouton a changé d'état pour cela il faut mémoriser l'état précédent.
Oui c'est bien ça, je veux que la tension s'affiche une seule fois lorsque j'appuie sur le bouton poussoir. Comment mémoriser son état précédent s'il te plait?
void loop()
{
static bool etatPrecedent = false;
boolean etatBouton = digitalRead(bouton);
// Affichage de la tension Ur en sortie du montage pont diviseur sur le Moniteur série si le bouton est appuyé
if (etatBouton != etatPrecedent)
{
etatPrecedent = etatBouton;
if (etatBouton == HIGH) //
{
int valeur = analogRead(Ur);
float tension = (valeur / 1024.0) * 5.0;
Serial.println(tension);// Affichage dans le Moniteur Série de la valeur de la tension Ur
}
delay(20); // debounce
}
}
Ce n'est pas une très bonne méthode car elle ne traite pas les rebonds du bouton et accessoirement elle bloque le programme (ce qui n'est pas gênant ici, mais limite les possibilités d'évolutions).
Merci beaucoup Kamill, ça fonctionne bien cependant, je ne peux prendre une nouvelle mesure qu'au bout d'une durée assez longue (une dizaine de seconde). En attendant le bouton ne répond pas. Est-ce normal?