Bonjour,
Je suis novice en programmation, cela fait plusieurs heures que je cherche , que je lis mais je n arrive pas à récupérer l'état d'un bouton hors du loop. Il y a t il une manip pour récupérer un état de bouton dans un void exemple();
Bonjour,
Je suis novice en programmation, cela fait plusieurs heures que je cherche , que je lis mais je n arrive pas à récupérer l'état d'un bouton hors du loop. Il y a t il une manip pour récupérer un état de bouton dans un void exemple();
non ce n'est pas possible parce qu'un void ce n'est rien, comme son nom l'indique
par contre dans une fonction, c'est sans souci... ![]()
montrez nous ce que vous avez fait...
sinon pour bien débuter avec l'arduino, un bon point de départ c'est de lire les tutos d'eskimon, on y parle de boutons...
Et hop, un p'tit tuto :
Ah, je vois que @J-M-L avait déjà pointé les tutos d'Eskimon.
Dans un void (comme tu dis) donc une fonction, c'est exactement pareil que dans la loop, car la loop c'est aussi une fonction : aucune différence.
#include <Wire.h>
#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal_I2C.h>
#include <pitches.h>
#include <SoftwareSerial.h>
#include <DYPlayerArduino.h>
#define SS_PIN 53
#define RST_PIN 49
#define PIN_LED_VERTE 5
#define PIN_LED_ROUGE 7
#define PIN_LED_BLEU 6
#define PIN_BOUTON 2
LiquidCrystal_I2C lcd(0x27, 20,4);
int buttonState = 0;
MFRC522 rfid(SS_PIN, RST_PIN);
// liste clés valides
String keyOk[]={"73 bf 9a a7","f3 a8 70 36"};
void setup() {
lcd.init();
SPI.begin(); // Init SPI bus
rfid.PCD_Init(); // Init MFRC522
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0); // column, row
lcd.print("-- Scan Badge --");
lcd.setCursor(0,2); // column, row
lcd.print("- Authentification -");
lcd.setCursor(0,3); // column, row
lcd.print("--------------------");
pinMode(PIN_LED_VERTE,OUTPUT);
pinMode(PIN_LED_ROUGE,OUTPUT);
pinMode(PIN_LED_BLEU,OUTPUT);
pinMode(PIN_BOUTON, INPUT);
digitalWrite(PIN_LED_VERTE,LOW);
digitalWrite(PIN_LED_ROUGE,LOW);
digitalWrite(PIN_LED_BLEU,LOW);
}
void loop() {
if ( ! rfid.PICC_IsNewCardPresent())
return;
if ( ! rfid.PICC_ReadCardSerial())
return;
String myKey=String(rfid.uid.uidByte[0],HEX) + " " + String(rfid.uid.uidByte[1],HEX) + " " + String(rfid.uid.uidByte[2],HEX) + " " + String(rfid.uid.uidByte[3],HEX);
Serial.println(myKey);
bool accessOk = 0;
for(int y = 0; y < (sizeof(keyOk)/sizeof(String)) ; y++){
if(keyOk[y] == myKey){
accessOk = 1;
}
}
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
if(accessOk == 1){
digitalWrite(PIN_LED_VERTE,HIGH);
ok();
}
if(accessOk == 0){
digitalWrite(PIN_LED_ROUGE,HIGH);
pasOK();
}
}
void accueil()
{
lcd.clear();
lcd.setCursor(0,0); // column, row
lcd.print("-- Scan Badge --");
lcd.setCursor(0,2); // column, row
lcd.print("- Authentification -");
lcd.setCursor(0,3); // column, row
lcd.print("--------------------");
digitalWrite(PIN_LED_VERTE,LOW);
digitalWrite(PIN_LED_ROUGE,LOW);
digitalWrite(PIN_LED_BLEU,LOW);
}
void ok() {
lcd.clear();
lcd.setCursor(0,0); // column, row
lcd.print("--------------------");
lcd.setCursor(0,1); // column, row
lcd.print("- Autorisation -");
lcd.setCursor(0,3); // column, row
lcd.print("--------------------");
delay(2000);
lcd.clear();
lcd.setCursor(0,0); // column, row
lcd.print("-- Press 2 boutons --");
lcd.setCursor(0,1); // column, row
lcd.print("-- Jaunes --");
lcd.setCursor(0,2); // column, row
lcd.print("-- 10 Secondes --");
lcd.setCursor(0,3); // column, row
lcd.print("--------------------");
push();
}
void pasOK() {
lcd.clear();
lcd.setCursor(0,0); // column, row
lcd.print("--------------------");
lcd.setCursor(0,1); // column, row
lcd.print("- Acces Refuse -");
lcd.setCursor(0,3); // column, row
lcd.print("--------------------");
delay(2000);
accueil();
}
void push() {
buttonState = digitalRead(PIN_BOUTON);
if (buttonState == HIGH) {
digitalWrite(PIN_LED_ROUGE,HIGH);
timer();
}
else {
digitalWrite(PIN_LED_ROUGE, LOW);
}
}
void timer() {
}
que pensez vous que la fonction push() fasse?
quelle regarde l'etat du bouton , de savoir si la position est haute ou basse , et si c est le cas ( haute ) que la led s allume
Je souhaite creer une valide d 'extraction VIP pour airsoft, une fois que le joueur a scanné la bonne carte , appui sur le bouton pour lancer un decompte
Si c'est le test vérifiant l'appui sur le bouton, il implique que tu as une résistance "pull down" : est-ce le cas ? Voir ici (chapitre Résistance pull down) :
https://www.locoduino.org/spip.php?article122
Comment sait tu que tu ne récupère pas l'état du bouton?
Es tu sûre de bien passer dans la fonction push, au même moment que tu appuis sur ton bouton.
Combien de temps appuis tu sur le bouton, comme tu allume ta LED uniquement si tu appuis sur ton bouton ?
pendant combien de temps ?
IL y a un temps ?
Oui je passe dans la fonction push j ai testé avec des lcd.print
A la base je voulais mettre un temps appui long, mais comme cela ne marchait pas, je voulais déjà savoir si je récupérai l 'état du bouton
J etais sur nano , j ai pensé que c etait un peu leger je suis passé sur mega
Oui je vais testé avec INPUT_PULLUP
Il renvoie LOW si tu appuies
Oui quelques dizaines de nano secondes…
je vais mettre un delay pour voir
Non, attends : avant de tester des trucs au hasard, il faut savoir à quoi sert ce bouton. Selon sa fonction, il y a différentes manières de coder...
Par exemple, si le bouton sert à lancer une action et qu'on attend l'appui pour continuer, il faut un while.
Que voulez vous exactement faire ? Voir si le bouton était tenu appuyé pendant que vous présentiez la carte ?
Ou attendre l’appui du bouton pour continuer ?