ARDUINO : programmer suite d'action sur un boutons

themaxzanfr Messages postés 7 Statut Membre -  
themaxzanfr Messages postés 7 Statut Membre -
bonjours
voila depuis quelque temps j'ai aussi acheté une carte arduino pour faire quelque test mais j'ai maintenant un petit projet, n'étant pas super dans la programmation je n'arrive pas a réalisé ce que je voudrai,
voila ce que je cherche a faire:
j'ai 4 boutons et j'aimerai que une foit le bouton 1 appuyer l'arduino face l'action 1 du genre;

digitalWrite(13 ,LOW);
delay(1000);
digitalWrite(13 ,HIGH);

ensuite l'action s'arrete
puis le deuxieme bouton et appyer

digitalWrite(12 ,HIGH);
delay(1000);
digitalWrite(11 ,HIGH);
digitalWrite(12 ,LOW);

voila ce que je voudrai que sa face(les pin ont été mis au hasard le code et factice c'est pour explique)
merci a ceux qui pourront m'aide, ou meme me rediriger vers un tuto qui explique cela
merci

3 réponses

  1. themaxzanfr Messages postés 7 Statut Membre 4
     
    const int APPUI=LOW;
    const int BP=2;
    const int LED=3;
    const int APPUI1=LOW;
    const int BP1=4;
    const int LED1=5;

    void setup() {
    pinMode (LED,OUTPUT);
    pinMode (BP,INPUT);
    digitalWrite (BP,HIGH);
    digitalWrite (LED,LOW);
    pinMode (LED1,OUTPUT);
    pinMode (BP1,INPUT);
    digitalWrite (BP1,HIGH);
    digitalWrite (LED1,LOW);
    }

    void loop() {
    if (digitalRead(BP)==APPUI) {
    digitalWrite(LED,HIGH);
    delay (5000);
    digitalWrite (LED,LOW);
    }
    if (digitalRead(BP1)==APPUI) {
    digitalWrite(LED1,HIGH);
    delay (5000);
    digitalWrite (LED1,LOW);
    }
    }

    voila le code que j'ai fait avec beaucoup d'aide maintenant et il possible que je puis activer les deux led en meme temps car la je ne peut pas
    0
    1. ElementW Messages postés 5690 Statut Contributeur 1 293
       
      Le hic ici c'est que
      delay
      met totalement ton code en pause, puis reprend après, donc tu ne peux allumer qu'une LED a la fois. Voici une solution:
      avec la fonction
      now()
      tu peux récupérer le temps en secondes depuis un instant fixe (ici, le 1er Janvier 1970, aussi dit UNIX Epoch; mais là on s'en fiche).
      loop()
      s'exécute en boucle, l'idée est donc a chaque itération de la boucle, vérifier individuellement l'état des boutons, et si il est appuyé, allumer la LED et enregistrer la "date" de l'appui avec now(); et aussi vérifier si la date actuelle est 5 secondes (ou +) après l'appui, et si c'est le cas, éteindre la DEL. Ex;
      time_t dateAppuiBP, dateAppuiBP1;
      [...]
      void loop() {
          time_t tps = now();
          if (digitalRead(BP) == APPUI) {
              digitalWrite(LED, HIGH);
              dateAppuiBP = tps;
          } else {
              if (tps >= dateAppuiBP + 5)
                  digitalWrite(LED, LOW);
          }
          if (digitalRead(BP1) == APPUI) {
              digitalWrite(LED1, HIGH);
              dateAppuiBP2 = tps;
          } else {
              if (tps >= dateAppuiBP1 + 5)
                  digitalWrite(LED1, LOW);
          }
      }
      0
  2. themaxzanfr Messages postés 7 Statut Membre 4
     
    merci pour ton aide
    mais voila j'ai essai comme tu me dit mais le code n'est plus bon je ne trouve pas mon erreur.
    Dois-je bien mettre le code comme cela:

    const int APPUI=LOW;
    const int BP=2;
    const int LED=3;
    const int APPUI1=LOW;
    const int BP1=4;
    const int LED1=5;

    void setup() {
    pinMode (LED,OUTPUT);
    pinMode (BP,INPUT);
    digitalWrite (BP,HIGH);
    digitalWrite (LED,LOW);
    pinMode (LED1,OUTPUT);
    pinMode (BP1,INPUT);
    digitalWrite (BP1,HIGH);
    digitalWrite (LED1,LOW);
    }

    time_t dateAppuiBP, dateAppuiBP1;
    [...]
    void loop() {
    time_t tps = now();
    if (digitalRead(BP) == APPUI) {
    digitalWrite(LED, HIGH);
    dateAppuiBP = tps;
    } else {
    if (tps >= dateAppuiBP + 5)
    digitalWrite(LED, LOW);
    }
    if (digitalRead(BP1) == APPUI) {
    digitalWrite(LED1, HIGH);
    dateAppuiBP2 = tps;
    } else {
    if (tps >= dateAppuiBP1 + 5)
    digitalWrite(LED1, LOW);
    }
    }
    0
    1. ElementW Messages postés 5690 Statut Contributeur 1 293
       
      Le
      [...]
      est a retirer, c'était pour indiquer des éventuelles lignes supplémentaires
      0
    2. themaxzanfr
       
      ok je vais réessayer sans le [...] et je tient au courant
      0
  3. themaxzanfr Messages postés 7 Statut Membre 4
     
    sketch_nov20a:19: error: 'time_t' does not name a type
    sketch_nov20a.ino: In function 'void loop()':
    sketch_nov20a:21: error: 'time_t' was not declared in this scope
    sketch_nov20a:21: error: expected `;' before 'tps'
    sketch_nov20a:24: error: 'dateAppuiBP' was not declared in this scope
    sketch_nov20a:24: error: 'tps' was not declared in this scope
    sketch_nov20a:26: error: 'tps' was not declared in this scope
    sketch_nov20a:26: error: 'dateAppuiBP' was not declared in this scope
    sketch_nov20a:31: error: 'dateAppuiBP2' was not declared in this scope
    sketch_nov20a:31: error: 'tps' was not declared in this scope
    sketch_nov20a:33: error: 'tps' was not declared in this scope
    sketch_nov20a:33: error: 'dateAppuiBP1' was not declared in this scope

    je ne vois pas ce qu'il veut
    in function void loop veut dire que je doit le mettre dedans
    tps was not declared je les declares comment
    0