Pages: [1]   Go Down
Author Topic: Aide sur programmation!!  (Read 1038 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

BOnjour à tous,

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 :

Code:
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
 
  }
}
}
}

Si vous avez une idée...
Merci bcppp d'avance!!
Logged

Region ile de france.
Offline Offline
Sr. Member
****
Karma: 3
Posts: 402
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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
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
 
Logged


Offline Offline
Full Member
***
Karma: 0
Posts: 224
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut,

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.

++
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 26
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Et si tu adaptais ce genre de technique :

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 smiley

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 :p
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci pour ta réponse et ta proposition!
Vais voir aussi de mon coté en testant directement sur mon montage!! smiley
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 26
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Regarde ceci  :

Code:
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. smiley Mais d'une manière complétement différente.

Teste et dis moi si tu le modifies, que je ne meurt pas bête :p
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

J'ai cablé l'arduino de la façon suivante :

6 diodes aux sorties 1 a 6 DIGITAL
6 diodes sur le GRUND

Hum!
Et les résistances de limitation de courant elle sont où ?

pushhhfffff fait l'Arduino qui brule tard le soir smiley-grin
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

0
Offline Offline
Newbie
*
Karma: 0
Posts: 26
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Erf, je n'en ai pas mises, en effet. C'est vrai qu'une diode a tendance a absorber tout ce qu'elle recoit :/

J'ai fait ca vite fait, j'avoue. Ca craint si ca peut detruire mon arduino :/ Surtout que je l'aime bien ma petite UNO.

Merci du conseil barbudor.
* cyberfred91 qui allait faire une version a 12 LEDs sur mon breadboard, je le ferais demain :p
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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)

Je tiendrais au courant!
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!
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.
Logged

Pages: [1]   Go Up
Jump to: