je viens solliciter votre aide car je bloque sur un programme que je viens de faire!
En effet, j'ai fait un programme pour que, à chaque impulsion électrique, une led s'allume. Il y à 16 LEDS et l'idée est que chacune s'allume à son tour en incrémentant.
Mon soucis est que je voudrais bloquer chaque sortie une fois que la led s'est allumée! Et là je bloque!
La fonction qui régit cet allumage en incrémentation est la suivante :
void pasapas(){
//Handle input
if(actualPreset == 8){ //si le preset est le numéro 8, alors...
if(digitalRead(buttonTir) == LOW){ //c'est la lecture de la pin d'entrée pour l'impulsion électrique
delay(attenteCapteurs); //attente pour relecture de la pin
if(digitalRead(buttonTir) == LOW) counter++; //re lecture de la pin pour revérifier que il y a bien une impulsion électrique et incrémentation d'un counter
{
if(counter > maxsorties) //si le counter est egal à maxsorties (16)
{
counter = maxsorties; //alors on tire continuellement la sortie 16
}
Serial.println(sorties[counter]);
//TIR
digitalWrite(sorties[counter], HIGH); //allumage de la sortie correspondant au counter
delay(tpsTir); //durant un temps donné (20ms)
//
digitalWrite(sorties[counter], LOW); //puis extinction de la sortie correspondant au counter
}
}
}
}
je n'ait pas tout compris de ce que tu chercher a faire ,mais il me semble qu'il te manque des acollade dans ton code
if(digitalRead(buttonTir) == LOW) counter++; //re lecture de la pin pour revérifier que il y a bien une impulsion électrique et incrémentation d'un counter
essaye
if(digitalRead(buttonTir) == LOW){ counter++; };//re lecture de la pin pour revérifier que il y a bien une impulsion électrique et incrémentation d'un counter
Dans ce cas précis, les accolades sont facultatives. C'est juste que si on n'en met pas, seule la première ligne suivant le if sera exécutée si la condition est remplie.
Par contre s'il y avait eu plusieurs instructions soumises à la condition, les accolades auraient été nécessaires.
Ben en fait, le code tel qu'il est marche, à chaque impulsion électrique les LEDS s'allument chacune leur tour, mais ce que je voudrais faire, c'est que si je laisse cette impulsion électrique continue, que l'incrémentation des LEDS s'arrête...
If (entree==1)
{
allumage de tes diodes en incrementant;
while (entree=1)
{
delay(50); // pour eviter a ton arduino de retester a chaque instant.
}
}
Comme ca tant que tu n'as pas relaché ton bouton, ca ne se reincremente pas. Par contre, a la compilation, ca peut eventuellement te dire une boucle sans fin
C’était une idée comme ca, en passant ( je débute ), mais j'aurais fait un truc du genre en Delphi.
Je vais essayer de faire un petit truc du genre ce soir en TP perso
void setup()
{
pinMode(0, INPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
}
byte Nb = 0;
void loop()
{
if (digitalRead(0)==HIGH){Nb = Nb++;};
if (Nb >= 7) {Nb = 0;};
AllumeDiode(Nb);
delay(500);
// while (digitalRead(0)==HIGH) {delay(1);}; // bug ou cablage mal fait.
}
void AllumeDiode(byte ZZ)
{
if (ZZ >=1) {digitalWrite(1,HIGH);} else {digitalWrite(1,LOW);};
if (ZZ >=2) {digitalWrite(2,HIGH);} else {digitalWrite(2,LOW);};
if (ZZ >=3) {digitalWrite(3,HIGH);} else {digitalWrite(3,LOW);};
if (ZZ >=4) {digitalWrite(4,HIGH);} else {digitalWrite(4,LOW);};
if (ZZ >=5) {digitalWrite(5,HIGH);} else {digitalWrite(5,LOW);};
if (ZZ >=6) {digitalWrite(6,HIGH);} else {digitalWrite(6,LOW);};
}
J'ai cablé l'arduino de la façon suivante :
6 diodes aux sorties 1 a 6 DIGITAL
6 diodes sur le GRUND
1 fil entre le GROUND et le 0 DIGITAL ( switch )
Quand le GROUND est 0v, la séquence s’arrête. Des que tu appuis sur le bouton, tu mets l’entrée A 1, et toute les 500ms, le nombre de diode allumées augmente.
Je pense etre parvenu a peu pres a ce que tu voulais au départ. Mais d'une manière complétement différente.
Teste et dis moi si tu le modifies, que je ne meurt pas bête
Cool merci Cyberfred!
Bon, les résistances sont à pas oublier en effet!
Je testerai le montage en l'adaptant demain car pas trop le temps aujourd'hui (malheureusement.... me tarde de trouver la soluce :p)
Bon, après essai, j'ai réussi à faire ce que je voulais, mais différemment des propositions...
Si cela peut aider, voici le code!
void pasapas(){
//Handle input
if(actualPreset == 8){
if(digitalRead(buttonTir) == LOW && etatTir == false){
delay(attenteCapteurs);
if(digitalRead(buttonTir) == LOW){
counter++;
if(counter > maxsorties)
{
counter = maxsorties;
}
Serial.println(sorties[counter]);
etatTir = true; // on mémorise qu'on entre dans une phase de Tir
//TIR
digitalWrite(sorties[counter], HIGH);
delay(tpsTir);
digitalWrite(sorties[counter], LOW);
delay(200);
}
}
else if(digitalRead(buttonTir) == HIGH && etatTir == true){
etatTir = false;
}
}
}
En fait, j'ai rajouté une variable etatTir pour rajouter une condition au tir.
J'ai déclaré cette variable en début de code
boolean etatTir = false;
et la condition pour que cela tire est donc qu'il y ait une impulsion électrique sur l'entrée digitale, et que l'on soit en "etatTir == false". Etattir passe alors en true et j'allume la led (ou sortie) correspondante.