1 pièce(s) jointe(s)
[UNO] Commande de trois leds
Je viens vous demander de l'aide, je suis débutant sur le forum et dans la programmation ARDUINO,j'ai réalisé un programme pour commandre des leds, je n'ai pas obtenus le résultat désiré, j'ai besoins de conseils
voici mon projet:
1, commander avec un front montant ou un bouton poussoir un cycle de 3 leds.
2, au front montant la première led doit s'allumer avec un délai, ensuite s'éteindre.
la deuxième led doit s'allumer avec un délai, ensuite s'éteindre.
la troisième led doit s'allumer avec un délai, ensuite s'éteindre.
Ensuite le cycle est fini toutes les diodes sont éteintes.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| /*
Code 6 - Edurobot.ch, destiné à l'Arduino
Objectif : faire un chenillard à 4 LED montées sur les ports 10 à 13
*/
// dans ce montage si inter enfoncé cycle normal sinon leqs 3 led son eteinte
//***** EN-TÊTE DÉCLARATIF *****
int bouton = 3; //commande de la boucle for (int thisPin = 10; thisPin < 13; thisPin++)
int led = 2; // vérification de l'action
int etatbouton;
int timer = 1000; // Durée, en millisecondes Définition de la variable « temps
//***** FONCTION SETUP = *****
void setup()
{
pinMode(bouton,INPUT);
pinMode(led,OUTPUT); // led de controle action bouton
for (int thisPin = 10; thisPin < 13; thisPin++)// Déclaration des broches 10 à 12 à l'aide d'un for et d'un incrément.
{
pinMode(thisPin, OUTPUT);
}
}
void loop()
{
// Boucle de la broche 10 à la broche 12 :
for (int thisPin = 10; thisPin < 13; thisPin++) // Incrément faisant passer la variable thisPin de 10 à 12
{
if(thisPin == 13)break; // arret de la boucle le résultat n'est pas atteint
digitalWrite(thisPin, HIGH); // Allumer la LED action sur la boucle For
{
etatbouton=digitalRead(bouton);// lecture etat bouton
if(etatbouton==HIGH)
{
digitalWrite(thisPin,LOW);
}
else
{
digitalWrite(thisPin,HIGH); //Allume la led
delay(1000);}
}
delay(timer); // Durée
digitalWrite(thisPin, LOW); // Éteindre la LED
}
} |
ARDUINO UNO Commande trois leds
Bonjour MORMIC
Jai envoyé le prog vers la carte Arduino , cette fois ci j'ai compris la boucle while avec une boucle for imbriquée j'ai fait des test envoyer sur l'entrée 3 des fronts montant ou descendant aucune led ne s'allume , pour vérifier le circuit des leds j'ai mis en commentaire la ligne 17 qui est le début de la boucle , dans ce cas les diodes s'allume avec un délai les unes après les autres ,j'aurais voulus chercher moi même le défaut ce que j'ai fait mais mon niveau encore ne le permet pas, je vous remercie pour l'aide que vous m'apportez
Roquesclaude
Arduino commande de trois leds
ai reussi a le faire fonctionner avec votre aide bien entendu voici le code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| //****Objectif : faire un chenillard à 3 LED montées sur les ports 10 à 12 déclenché par un poussoir entre la masse et la pin 3
// dans ce montage si le poussoir est enfoncé un cycle normal démarre sinon les 3 leds restent eteintes
#define BOUTON 3 //poussoir connecté entre la pin 3 et la masse
#define TIMER 1000 //correspond à une seconde
void setup(){
pinMode(BOUTON,INPUT_PULLUP); //le bouton poussoir doit être entre la masse et la pin 3
for (int thisPin = 10; thisPin < 13; thisPin++){ // Déclaration des broches 10 à 12 à l'aide d'un for et d'un incrément.
pinMode(thisPin, OUTPUT); // les pin 10 à 12 sont des sorties
digitalWrite(thisPin,LOW); // initialisation des pins 10 à 12 à LOW (leds éteintes)
}
}
void loop(){
while(digitalRead(BOUTON)==LOW){;} //tant que le poussoir n'est pas enfoncé, on attend //tant que le poussoir n'est pas enfoncé, on attend
for(int thisPin = 10; thisPin < 13; thisPin++){ // Incrément faisant passer la variable thisPin de 10 à 12
digitalWrite(thisPin, HIGH); // Allumer successivement les leds 10 à 12
delay(TIMER); // délai une seconde
digitalWrite(thisPin,LOW); // Eteindre successivement les leds 10 à 12
delay(TIMER); // délai d'une seconde pour passer à l'allumage de la led suivante
} // lorsque thisPin est arrivé à 13 on sort de la boucle
delay(TIMER); // délai supplémentaire, peut être inutile
} |
Jai modifié while(digitalRead(BOUTON)==LOW){;} j'ai mis LOW à la place de HIGH,
Chaque fois que j'appuie sur le bouton poussoir je passe à l'état haut et le cycle commence et s'arrête parfaitement
J'avais besoin d'une base fonctionnelle vous m'avez beaucoup aidé ca va me permettre de continuer avec ce que je viens d'apprendre certainement à un prochain jour
Cordialement Roquesclaude
arduino uno allumage de 3 leds
Je viens de repondre au mail
Bonjour
Merci pour votre réponse , oui j'ai bien compris , je veux faire allumer les leds dès que j'ai un front montant à la broche 3 .
Dans mon câblage la pin 3 est au potentiel de la masse ,des que j'appuie sur le bouton je retrouve + 5 v .
Peut être que je me suis mal exprimé.
Toujours est -il que cet exercice ma bien rendu service et j'ai appris beaucoup .
J'ai réalisé un autre montage ou je fais allumer des diodes avec une séquence à l'état haut du bouton et des que le me retrouve à l'état bas il exécute un autre programme ,.
Pour moi les infos que vous me donnez sont très bénéfiques .
J'ai peu d'expérience et je compte pas m'arrêter là , dès que j'aurais un autre problème , je vais tenter de le faire , il est bien possible que je demande de l'aide , mon niveau est plutôt faible .
Merci encore pour l'aide que vous apportez.
Roquesclaude
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| void setup(){
pinMode(BOUTON,INPUT_PULLUP); //le bouton poussoir doit être entre la masse et la pin 3
for (int thisPin = 10; thisPin < 13; thisPin++){ // Déclaration des broches 10 à 12 à l'aide d'un for et d'un incrément.
pinMode(thisPin, OUTPUT); // les pin 10 à 12 sont des sorties
digitalWrite(thisPin,LOW); // initialisation des pins 10 à 12 à LOW (leds éteintes)
}
}
void loop(){
while(digitalRead(BOUTON)==HIGH) {;} //tant que le poussoir n'est pas enfoncé, on attend
for(int thisPin = 10; thisPin < 13; thisPin++){ // Incrément faisant passer la variable thisPin de 10 à 12
digitalWrite(thisPin, HIGH); // Allumer successivement les leds 10 à 12
delay(timer); // délai une seconde
digitalWrite(thisPin,LOW); // Eteindre successivement les leds 10 à 12
delay(timer); // délai d'une seconde pour passer à l'allumage de la led suivante
} |
Il y a une chose que je ne comprend pas dans la partie logicielle ci-dessus : while(digitalRead(BOUTON)==HIGH) {;} , le point virgule entre 2 accolades
Pouvez vous me dire ce que ca veut dire ?
Roquesclaude
ARDUINO UNO Commande trois leds
Bonjour
Merci pour ses explications , je vais m'en souvenir mon problème est résolu , ca fait pratiquement 40 ans que j'avais fait une formation dans le pascal et le c depuis je n'avais pas eu l'occasion d'y revenir , Arduino me permet de retravailler, ca va faire 20 ans que j'enseigne à titre bénévole de l'informatique pour
les saignoirs ,c'étais mon tour de redevenir élève.
Merci beaucoup à tous ce qui passe beaucoup de temps pour aider les autres , ce n'est pas la première fois que je fréquente les forum j'y retrouve toujours le même esprit.
Roquesclaude