ARDUINO : programmer suite d'action sur un boutons

Fermé
themaxzanfr Messages postés 7 Date d'inscription dimanche 15 juin 2014 Statut Membre Dernière intervention 20 novembre 2014 - 16 nov. 2014 à 12:07
themaxzanfr Messages postés 7 Date d'inscription dimanche 15 juin 2014 Statut Membre Dernière intervention 20 novembre 2014 - 20 nov. 2014 à 21:31
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

themaxzanfr Messages postés 7 Date d'inscription dimanche 15 juin 2014 Statut Membre Dernière intervention 20 novembre 2014 4
19 nov. 2014 à 15:14
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
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
Modifié par gravgun le 19/11/2014 à 16:02
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
themaxzanfr Messages postés 7 Date d'inscription dimanche 15 juin 2014 Statut Membre Dernière intervention 20 novembre 2014 4
19 nov. 2014 à 21:23
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
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
20 nov. 2014 à 15:35
Le
[...]
est a retirer, c'était pour indiquer des éventuelles lignes supplémentaires
0
themaxzanfr
20 nov. 2014 à 18:54
ok je vais réessayer sans le [...] et je tient au courant
0
themaxzanfr Messages postés 7 Date d'inscription dimanche 15 juin 2014 Statut Membre Dernière intervention 20 novembre 2014 4
20 nov. 2014 à 21:31
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