je débute avec arduino et je voudrai réaliser un compteur avec 3 leds qui representent les bits pour compter jusqu'à 7 en binaire. Je voudrai utiliser un bouton poussoir pour passer de 0 à 1 à 2... 7 et à 7 on retourne à zéro. Voici mon code :
int LEDgreen = 9;
int LEDyellow = 10;
int LEDred = 11;
int bouton = 2;
int a;
void setup() {
// initialize the digital pisn as an output.
pinMode(LEDgreen, OUTPUT);
pinMode(LEDyellow, OUTPUT);
pinMode(LEDred, OUTPUT);
pinMode(bouton , INPUT);
}
void loop() {
int a;
a = a++;
int value = digitalRead(bouton);
/*
if (value == HIGH)
{
a=a+1;
}
*/
if(a== 0)
{
digitalWrite(LEDred, LOW); // 0
digitalWrite(LEDyellow, LOW); // set the LED on
digitalWrite(LEDgreen, LOW); // set the LED on
}
if (a == 1)
{
digitalWrite(LEDred, LOW); // 1
digitalWrite(LEDyellow, LOW); // set the LED on
digitalWrite(LEDgreen, HIGH); // set the LED on
}
if (a == 2)
{
digitalWrite(LEDred, LOW); // 1
digitalWrite(LEDyellow, HIGH); // set the LED on
digitalWrite(LEDgreen, LOW); // set the LED on
}
if (a == 3)
{
digitalWrite(LEDred, LOW); // 1
digitalWrite(LEDyellow, HIGH); // set the LED on
digitalWrite(LEDgreen, HIGH); // set the LED on
}
if (a == 4)
{
digitalWrite(LEDred, HIGH); // 1
digitalWrite(LEDyellow, LOW); // set the LED on
digitalWrite(LEDgreen, LOW); // set the LED on
}
if (a == 5)
{
digitalWrite(LEDred, HIGH); // 1
digitalWrite(LEDyellow, LOW); // set the LED on
digitalWrite(LEDgreen, HIGH); // set the LED on
}
if (a == 6)
{
digitalWrite(LEDred, HIGH); // 1
digitalWrite(LEDyellow, HIGH); // set the LED on
digitalWrite(LEDgreen, LOW); // set the LED on
}
if (a == 7)
{
digitalWrite(LEDred, HIGH); // 1
digitalWrite(LEDyellow, HIGH); // set the LED on
digitalWrite(LEDgreen, HIGH); // set the LED on
}
if (a > 7)
{
a=0;
}
}
Quand j'appuie sur le bouton, il me met un 1 sur les leds et quand je le relache il retourne à 0.
T'arrive à voir quoi que ce soit avec ce code ? Parce que là tout ce qui va se passer c'est un clignotement hyper rapide de tes LEDs et c'est tout non ?
Ta lecture de bouton n'est jamais utilisé (en tout cas avec le code que tu donnes) donc j'ai du mal à croire que ca ai une quelconque influence.
Pour l'utilisation des boutons je te conseille de relire le tuto (sur ce site ou ici : http://eskimon.fr/96-arduino-204-un-simple-bouton).
Plus particulièrement essaie de comprendre le mécanisme permettant de détecter un changement d'état (qui te permettra d'incrémenter ton compteur 'a')
Eskimon a proposé la solution concernant le bouton.
Moi, je te propose une amélioration de ton code que tu pourras faire si tu le souhaites.
=====
Il faut savoir que tous les composants interne d'un processeur se pilotent en faisant des accès lecture/écriture dans des variables bien précise.
Pour simplifier la tache, arduino a développé plein de fonctions assez utile mais parfois inadapté au contexte...
Dans ton cas, digitalWrite est clairement pas adapté (même si cela peut te paraitre étrange).
Sur l'arduino, on retrouve 3 ports :
- le port B qui controle les pins 8 à 13
- le port C qui controle les pins ANx
- le port D qui controle les pins 0 à 7
Là ou ça devient intéressant, ces que l'état de chaque port se controle avec un unsigned char.
Sur cet unsigned char, on retrouve 8 bits : un pour chaque pin.
Là ou ça devient génial pour toi, c'est que :
- changer cet unsigned char permet de changer 8 pins d'un coup !
- vu que 1 bit = 1 pin ; c'est déjà du binaire !
Donc si tu veux faire un compteur 8 bits, je te propose de mettre 8 leds sur le port D (pins 0 à 7) et de tester le code suivant :
void setup() {
/*
PORTD est une variable spéciale qui contrôle l'état des pins D (pins 0 à 7)
Ecrire un 0 passe la pin en LOW
Ecrire un 0 passe la pin en HIGH
*/
PORTD = 0; // Avec ça, je mets des 0 partout donc en une ligne, je passe les pins 0 à 7 à LOW
/*
DDRD est une variable spéciale qui contrôle la direction des pins D (pins 0 à 7)
Ecrire un 1 passe la pin en OUTPUT
Ecrire un 0 passe la pin en INPUT
*/
DDRD = 255; // Avec je mets des 1 partout donc en une ligne, je passe les pins 0 à 7 en OUTPUT
}
void loop() {
/*
Rappel : PORTD controle le port D ; un bit par pin donc c'est du binaire
*/
PORTD++; // Avec ça, en une ligne, j'incrémente le compteur 8 bits affiché !!!
delay(100); // Avec ça, je fais une petite pause de 100ms avant de re-incrémenter
}
Si on supprime les commentaires, cela fait moins de 10 lignes !!! (je te laisse imaginer le nombre de ligne que ça t'aurais pris sans cette astuce
void setup() {
PORTD = 0; // Avec ça, je mets des 0 partout donc en une ligne, je passe les pins 0 à 7 à LOW
DDRD = 255; // Avec je mets des 1 partout donc en une ligne, je passe les pins 0 à 7 en OUTPUT
}
void loop() {
PORTD++; // Avec ça, en une ligne, j'incrémente le compteur 8 bits affiché !!!
delay(100); // Avec ça, je fais une petite pause de 100ms avant de re-incrémenter
}
Tu veux du 16 bits ??? Pas de problèmes, rajoutes 8 leds sur les pins 8 à 13 et tests ceci :
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Retrouvez moi sur mon blog et ma chaine Youtube !
Retrouvez moi sur mon blog et ma chaine Youtube !