bonjour bonjour,
je débute en Arduino, j'ai fait mon ptit système pour l'airsoft une bombe factice,deux mode selectionnable au debut, un avec code et l'autre non.
j'ai utiliseé:
- un arduino uno
-un ecran lcd 16/2 I2C
-un clavier matricielle 4x3
-un buzzer
-un bouton poussoir
elle fonctionne comme je le veux sauf un point que je n'arrive pas a régler, en début de partie, une fois le mode sélectionner je dois saisir un code ainsi que la durée de la partie. jusque la tout vas bien mais si jamais j'appuis sur un chiffre au lieu de l'Etoile pour valider mon programme retourne dans le menu.. je voudrais juste rendre inopérante les touches "chiffre" une fois le code choisis et pareil pour le temps pour ne pouvoir que annuler ou confirmer.
si vous pouviez svp jeter un œil au code pour voir la ou j'ai fauté vous seriez super sympa^^
pour trouver un exemple ou ce trouve mon probleme, aller dans le 'void code'
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0X27, 16, 2);
const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {A0, A1, 11, 10}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {9, 8, 7}; //connect to the column pinouts of the keypad
int LCDRow = 0;
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
char key = keypad.getKey();
char bouton_entrer = '*';
char bouton_retour = '#';
char mode;
char varmode;
char code1;
char code2;
char code3;
char code4;
char vcode1;
char vcode2;
char vcode3;
char vcode4;
const int boutonStop = 1;
int etatBouton;
void setup() {
lcd.begin(16, 2);
lcd.backlight();
pinMode(13, OUTPUT);
pinMode(boutonStop, INPUT);
}
void loop() {
menu();
}
// Décrire cette fonction…
void menu() {
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" CHOIX DU MODE: ");
lcd.setCursor(0,1);
lcd.print(" ");
delay(2000);
lcd.setCursor(0,0);
lcd.print(" * MINUTERIE ");
lcd.setCursor(0,1);
lcd.print(" # CODE ");
varmode = keypad.waitForKey();
if (varmode == bouton_entrer) {
mode = 1;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" MODE :COMPTE ");
lcd.setCursor(0,1);
lcd.print(" A REBOURS! ");
delay(2000);
temps();
}
if (varmode == bouton_retour) {
mode = 2;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" MODE :CODE ");
lcd.setCursor(0,1);
lcd.print(" SECRET ");
delay(2000);
code();
}
}
// Décrire cette fonction…
void code() {
char varcod;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" ACQUISITION DU ");
lcd.setCursor(0,1);
lcd.print(" CODE :XXXX ");
code1 = keypad.waitForKey();
if (code1 != NO_KEY) {
lcd.setCursor(9,1);
lcd.print(code1);
code2 = keypad.waitForKey();
lcd.setCursor(10,1);
lcd.print(code2);
code3 = keypad.waitForKey();
lcd.setCursor(11,1);
lcd.print(code3);
code4 = keypad.waitForKey();
lcd.setCursor(12,1);
lcd.print(code4);
}
varcod = keypad.waitForKey();
if (varcod == bouton_entrer) {
temps();
}
if (varcod == bouton_retour) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" RETOUR ");
delay(1000);
code();
}
}
// Décrire cette fonction…
void temps() {
char heure1;
char heure2;
char minute1;
char minute2;
char seconde1;
char seconde2;
char selection1;
char etat;
int tempsbombe;
lcd.setCursor(0,0);
lcd.print("<INITIALISATION>");
lcd.setCursor(0,1);
lcd.print("----XX:XX:XX----");
heure1 = keypad.waitForKey();
if (heure1 != NO_KEY) {
lcd.setCursor(4,1);
lcd.print(heure1);
heure2 = keypad.waitForKey();
lcd.setCursor(5,1);
lcd.print(heure2);
minute1 = keypad.waitForKey();
lcd.setCursor(7,1);
lcd.print(minute1);
minute2 = keypad.waitForKey();
lcd.setCursor(8,1);
lcd.print(minute2);
seconde1 = keypad.waitForKey();
lcd.setCursor(10,1);
lcd.print(seconde1);
seconde2 = keypad.waitForKey();
lcd.setCursor(11,1);
lcd.print(seconde2);
selection1 = keypad.waitForKey();
if (selection1 == bouton_entrer) {
int J;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("MISE A FEU DANS:");
lcd.setCursor(0,1);
lcd.print("----");
lcd.setCursor(4,1);
lcd.print(heure1);
lcd.setCursor(5,1);
lcd.print(heure2);
lcd.setCursor(6,1);
lcd.print(":");
lcd.setCursor(7,1);
lcd.print(minute1);
lcd.setCursor(8,1);
lcd.print(minute2);
lcd.setCursor(9,1);
lcd.print(":");
lcd.setCursor(10,1);
lcd.print(seconde1);
lcd.setCursor(11,1);
lcd.print(seconde2);
lcd.setCursor(12,1);
lcd.print("----");
tempsbombe = 1000;
etat = 1;
J = 4;
etatBouton = digitalRead(boutonStop);
while (etat == 1) {
int i = -1;
while (etatBouton != digitalRead(boutonStop) && mode == 1) {
if (i < 16) {
i = i + 1;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("DESARMORCAGE");
lcd.setCursor(i,1);
lcd.print("X");
delay(800);
if (i == 16) {
etat = 0;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" ANNULATION");
lcd.setCursor(0,1);
lcd.print(" DU LANCEMENT");
delay(3000);
menu();
}
}
}
while (etatBouton != digitalRead(boutonStop) && mode == 2) {
lcd.clear();
lcd.setCursor(0,1);
lcd.print(" CODE :");
if (J > 0) {
lcd.setCursor(0,0);
lcd.print("TENTATIVE");
J = J + -1;
lcd.setCursor(15,0);
lcd.print(J);
}
vcode1 = keypad.getKey();
unsigned long startedWaiting = millis();
while (vcode1 == NO_KEY && millis() - startedWaiting <= 5000) {
vcode1 = keypad.getKey();
}
lcd.setCursor(9,1);
lcd.print(vcode1);
delay(200);
lcd.setCursor(9,1);
lcd.print("X");
vcode2 = keypad.getKey();
startedWaiting = millis();
while (vcode2 == NO_KEY && millis() - startedWaiting <= 5000) {
vcode2 = keypad.getKey();
}
lcd.setCursor(10,1);
lcd.print(vcode2);
delay(200);
lcd.setCursor(10,1);
lcd.print("X");
vcode3 = keypad.getKey();
startedWaiting = millis();
while (vcode3 == NO_KEY && millis() - startedWaiting <= 5000) {
vcode3 = keypad.getKey();
}
lcd.setCursor(11,1);
lcd.print(vcode3);
delay(200);
lcd.setCursor(11,1);
lcd.print("X");
vcode4 = keypad.getKey();
startedWaiting = millis();
while (vcode4 == NO_KEY && millis() - startedWaiting <= 5000) {
vcode4 = keypad.getKey();
}
lcd.setCursor(12,1);
lcd.print(vcode4);
delay(200);
lcd.setCursor(12,1);
lcd.print("X");
if ((code1 != vcode1 || code2 != vcode2) || (code3 != vcode3 || code4 != vcode4)) {
tempsbombe = tempsbombe / 2;
lcd.clear();
lcd.setCursor(0,1);
lcd.print(" ERREUR ");
delay(1000);
}
if ((code1 == vcode1 && code2 == vcode2) && (code3 == vcode3 && code4 == vcode4)) {
etat = 0;
lcd.setCursor(0,0);
lcd.print(" ANNULATION ");
lcd.setCursor(0,1);
lcd.print(" DU LANCEMENT ");
delay(3000);
menu();
}
}
if (seconde2 > 47 && J != 1) {
lcd.setCursor(0,0);
lcd.print("MISE A FEU DANS:");
lcd.setCursor(0,1);
lcd.print("----");
lcd.setCursor(4,1);
lcd.print(heure1);
lcd.setCursor(5,1);
lcd.print(heure2);
lcd.setCursor(6,1);
lcd.print(":");
lcd.setCursor(7,1);
lcd.print(minute1);
lcd.setCursor(8,1);
lcd.print(minute2);
lcd.setCursor(9,1);
lcd.print(":");
lcd.setCursor(10,1);
lcd.print(seconde1);
lcd.setCursor(11,1);
lcd.print(seconde2);
lcd.setCursor(12,1);
lcd.print("----");
tone(13,1500,50);
delay(tempsbombe);
seconde2 = seconde2 + -1;
if (seconde2 == 47 && seconde1 > 48) {
seconde2 = 57;
seconde1 = seconde1 + -1;
lcd.setCursor(11,1);
lcd.print(seconde2);
lcd.setCursor(10,1);
lcd.print(seconde1);
}
if (seconde2 == 47 && (seconde1 == 48 && minute2 > 48)) {
seconde2 = 57;
seconde1 = seconde1 + 5;
minute2 = minute2 + -1;
lcd.setCursor(11,1);
lcd.print(seconde2);
lcd.setCursor(10,1);
lcd.print(seconde1);
lcd.setCursor(8,1);
lcd.print(minute2);
}
if (seconde2 == 47 && (seconde1 == 48 && (minute2 == 48 && minute1 > 48))) {
seconde2 = 57;
seconde1 = seconde1 + 5;
minute2 = minute2 + 9;
minute1 = minute1 + -1;
lcd.setCursor(11,1);
lcd.print(seconde2);
lcd.setCursor(10,1);
lcd.print(seconde1);
lcd.setCursor(8,1);
lcd.print(minute2);
lcd.setCursor(7,1);
lcd.print(minute1);
}
if (seconde2 == 47 && (seconde1 == 48 && (minute2 == 48 && (minute1 == 48 && heure2 > 48)))) {
seconde2 = 57;
seconde1 = seconde1 + 5;
minute2 = minute2 + 9;
minute1 = minute1 + 5;
heure2 = heure2 + -1;
lcd.setCursor(11,1);
lcd.print(seconde2);
lcd.setCursor(10,1);
lcd.print(seconde1);
lcd.setCursor(8,1);
lcd.print(minute2);
lcd.setCursor(7,1);
lcd.print(minute1);
lcd.setCursor(5,1);
lcd.print(heure2);
}
if (seconde2 == 47 && (seconde1 == 48 && (minute2 == 48 && (minute1 == 48 && (heure2 == 48 && heure1 > 48))))) {
seconde2 = 57;
seconde1 = seconde1 + 5;
minute2 = minute2 + 9;
minute1 = minute1 + 5;
heure2 = heure2 + 9;
heure1 = heure1 + -1;
lcd.setCursor(11,1);
lcd.print(seconde2);
lcd.setCursor(10,1);
lcd.print(seconde1);
lcd.setCursor(8,1);
lcd.print(minute2);
lcd.setCursor(7,1);
lcd.print(minute1);
lcd.setCursor(5,1);
lcd.print(heure2);
lcd.setCursor(4,1);
lcd.print(heure1);
}
if ((seconde2 == 47 && seconde1 == 48) && (minute2 == 48 && (minute1 == 48 && (heure2 == 48 && (heure1 == 48 && mode == 1))))) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("BBBBBOOOOUUUUMMM");
lcd.setCursor(0,1);
lcd.print("BBBBBAAAAMMM");
delay(5000);
menu();
}
if ((seconde2 == 47 && seconde1 == 48) && (minute2 == 48 && (minute1 == 48 && (heure2 == 48 && (heure1 == 48 && mode == 2))))) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("BBBBBOOOOUUUUMMM");
lcd.setCursor(0,1);
lcd.print("BBBBBAAAAMMM");
delay(5000);
menu();
}
}
if (J == 1) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("BIMBAMBOUM");
menu();
}
}
}
if (selection1 == bouton_retour) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("-----RETOUR-----");
delay(1000);
temps();
}
}
}