Bonjour, je suis un débutant en programmation Arduino.
Ma requête peut paraitre simple, mais je ne sais pas comment procéder.
Pour faire simple, je dispose d'une carte arduino, d'une led et d'un bouton poussoir.
Je souhaite faire en sorte qu'un première click sur le boutton puisse faire clignoter (en boucle) une led, et ainsi, lors d'un seconde click sur ce bouton, la led s'éteindra.
Ainsi de suite...
Évidement si tu cherches du tout cuit tu ne trouvera pas sur le net et surtout pas ici.
Les indications que je t'ai donné correspondent à ce que tu as demandé. Maintenant si ce que tu as écrit ne correspond pas a ce que tu pensais je n'y suis pour rien.
Tu as de quoi commencer à faire quelque chose, et de le proposer.
Attention si tu ne proposes rien tu n'aura rien, pour le tout cuit ce n'est pas la bonne adresse.
Mets systématiquement le code en entier les erreurs sont souvent facécieuses et se cachent là où on ne les attends pas.
Il faudrait revoir la documentation de la fonction delay
Mettre un code qui compile ou alors donne les message d'erreurs.
Je ne veux pas dire mais c'est un peu léger comme travail personnel, il n'y a pas du y avoir un essais de compilation.
je souhaite ainsi garder une boucle dans la commande "action" or, du coup, il ne lira jamais l'état ?
Tu peux détailler stp.
Parce que si tu ne dis pas tout on ne pourra pas avancer.
Si c'est secret ici c'est pas le bon endroit.
PS1: un bouton ça à des rebonds, les rebonds c'est pas bon pour la programation alors quand tu testera met un condensateur de 100 nF environ en parallèle sur les contacts.
PS2 : Si c'est pour le bac autant le dire tout de suite parce qu'on est pas aveugle, je dirais même que je suis un peu éblouît
Ainsi, la led et le bouton poussoir sont juste des exemples, je compte changer ce bouton en capteur infrarouge.
Lorsque la led clignote, je souhaite l'arrêter mais je n'y arrive pas !
Il y a des 10zaines d'années que c'est déconseillé et en plus la syntaxe ne me parait pas la bonne, mais comme je n'utilise jamais.
Par contre j'ai essayé de compiler :*
sketch_apr08a.ino: In function 'void setup()':
sketch_apr08a.ino:5:1: error: expected ';' before 'pinMode'
sketch_apr08a.ino: In function 'void loop()':
sketch_apr08a.ino:10:10: error: 'StopLoop' was not declared in this scope
sketch_apr08a.ino:11:1: error: expected ';' before 'if'
sketch_apr08a.ino:27:1: error: expected '}' at end of input
Erreur lors de la compilation.
J'ai l'impression que tu n'as pas compris alors je met les points sur les I :
C'est du foutage de gueule que de donner un code de 20 lignes qui ne compile pas.
Je m'excuse, je vais trop, vite. Je suis assez débordé. Mais, ne vous forcez pas à me répondre...
Les goto sont pour moi une chose dont j'ai l'habitude d'utiliser.
Je te dis tout de suite : je ne connais pas la programation avec des goto et je ne veux pas la connaître.
La possibilité d'utiliser les goto a été conservée pour des cas ultra particuliers qui dépassent mes capacités.
Tu devrais apprendre le C avec le tuto d'Eskimon.
Tu devrais, pour t'aider, écrire en français ce que doit faire ton programme.
La transcription en ligne de code en sera grandement facilitée.
Ensuite quelques variables utilisées dans quelques conditions if devraient remplacer avantageusement les goto antédiluviens.
Tu peux aussi utiliser les interruptions.
Quand l'état change sur une pin d'interruption (exemple suite à l'appui sur un bouton poussoir) cela déclenche une action décrite dans une fonction. Voir la doc du site arduino.
Petite question : c'est voulu de lire une pin configurée en sortie ?
pinMode(1,OUTPUT);
if (digitalRead(1)==HIGH)
Ainsi, la led et le bouton poussoir sont juste des exemples, je compte changer ce bouton en capteur infrarouge.
Lorsque la led clignote, je souhaite l'arrêter mais je n'y arrive pas !
heu je suis, comment dire, en interrogation devant ca.
tu souhaite arrêter comment le clignotement?
en repassant devant le capteur?
si c'est ca, c'est un changement d'état et il y même un exemple dans l'ide de mémoire
led off au départ
bouton boolean sur false
si passage led on et boolean true
si repassage led of boolean false
oui, c'est voulu, et si c'est facultatif, ça m'aide à me repérer.
Les goto, comme son nom l'indique, permettent juste de renvoyer à la valeur attribuée.
Si je change de code: marche toujours pas.
int e = 0;
void setup()
{
pinMode(1,OUTPUT);
pinMode(2,INPUT);
}
void loop()
{
if (digitalRead(2)==HIGH) //si on appui sur le btn
{
e=1;
while (e=1) //tant que (clignotement de la led jusqu'au prochain appui sur le btn)
{
digitalWrite(1,HIGH);
delay(1000);
digitalWrite(1,LOW);
delay(1000);
if (digitalRead(2)==HIGH) //si appui sur le btn
{
digitalWrite(1,LOW); // led éteinte
e=0;
break; //interruption
}
}
}
}
essaye ca et change les pins
tu ouvre la console et regarde si e change ou pas
int e = 0;
int antirebond = 500;
#define bouton 3
#define led 13
void setup()
{
Serial.begin(9600);
pinMode(1, OUTPUT);
pinMode(2, INPUT_PULLUP);
}
void loop()
{
if (digitalRead(bouton) == HIGH && e == 0) //si on appui sur le btn
{
e = 1;
Serial.println(e);
delay(antirebond);
while (e = 1) //tant que (clignotement de la led jusqu'au prochain appui sur le btn)
{
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
if (digitalRead(bouton) == HIGH && e==1) //si appui sur le btn
{
delay(antirebond);
digitalWrite(led, LOW); // led éteinte
e = 0;
Serial.println(e);
delay(2000);
break; //interruption
}
}
}
}
Bonjour, merci car votre code semble fonctionner, mais le problème c'est qu'il faut resté appuyer sur le bouton.
Si cela est possible, je souhaiterai qu'elle s'éteigne directement.
normal puisque la pinbouton est a l'etat haut (pull up) quand le bouton n'est pas appuyé
faut changer le digitalread en low
int e = 0;
int antirebond = 500;
#define bouton 2 // pin2 de l'arduino uno
#define led 13 // led de la carte sur pin13
void setup()
{
pinMode(led, OUTPUT);
pinMode(bouton, INPUT_PULLUP); // pull up interne activé
}
void loop()
{
if (digitalRead(bouton) == LOW && e == 0) //si on appui sur le btn on lit etat bas vu pullup interne
{
e = 1;
delay(antirebond);
while (e = 1) //tant que (clignotement de la led jusqu'au prochain appui sur le btn)
{
digitalWrite(led, HIGH);
delay(200);
digitalWrite(led, LOW);
delay(250);
if (digitalRead(bouton) == LOW && e==1) //si appui sur le btn
{
delay(antirebond);
digitalWrite(led, LOW); // led éteinte
e = 0;
break; //interruption
}
}
}
}