bonjour a tous !!!
je suis aujourd'hui sur problème qui me parait ultra bénin et vous allez rire, mais bon je ne trouve pas la solution donc je viens vers vous.
voici mon code:
#include <Keypad.h>
int i=0;
char motdepassetaper[]={'0','0','0','0'};
char motdepasse [] ={'4','3','2','1'};
int ledok = 12;
const byte ROWS = 2;
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
{'1','2','3','4'},
{'5','6','7','8'},
};
byte rowPins[ROWS] = {7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
const byte nombrePin=4;
byte ledPin[]={8,9,10,11};
void setup(){
Serial.begin(9600);
for(int y =0; y<nombrePin; y++){
pinMode (ledPin[y], OUTPUT);}
pinMode (ledok, OUTPUT);
}
void loop(){
char customKey = customKeypad.getKey();
[color=red] /* do{
mafonction3();}
while (i<0);*/[/color]
if (customKey){
Serial.println(customKey);
motdepassetaper[i]=customKey;
digitalWrite (ledPin[i],HIGH);
i++;}
if ( i == 4){
if (memcmp(motdepasse, motdepassetaper, sizeof(motdepasse)) == 0){
Serial.println("code bon");
delay(10);
mafonction2();
i=0;
}
else{Serial.println ("mauvais code");
mafonction();
i=0;}
}
}
void mafonction(){
delay(100);
for(int y =0; y<nombrePin; y++){
digitalWrite (ledPin[y], LOW);}
delay(100);
for(int y =0; y<nombrePin; y++){
digitalWrite (ledPin[y], HIGH);}
delay(100);
for(int y =0; y<nombrePin; y++){
digitalWrite (ledPin[y], LOW);}
delay(100);
for(int y =0; y<nombrePin; y++){
digitalWrite (ledPin[y], HIGH);}
delay(100);
for(int y =0; y<nombrePin; y++){
digitalWrite (ledPin[y], LOW);}
delay(100);
}
void mafonction2(){
for(int y =0; y<nombrePin; y++){
digitalWrite (ledPin[y], LOW);
digitalWrite (ledok, HIGH);}
delay(5000);
digitalWrite (ledok , LOW);
}
void mafonction3(){
for(int i=0 ;i<4 ;i++){
digitalWrite(ledPin[i], HIGH);
timer();}
for(int i=4; i>-1; i--){
digitalWrite (ledPin[i],LOW);
timer();}
}
void timer()
{
unsigned long startMillis = millis();
unsigned long currentMillis = millis();
while ( (currentMillis - startMillis) < 30)
{
currentMillis = millis();
}
}
voici le probleme:
le projet est un digicode. j'ai voulu rajouter avec des led des effets lumineux.
voila tout fonctionne très bien c'est a dire qu'a chaque appuie sur une touche du clavier une led s allume .Premier appuie = première led allumée ensuite deuxième appuie = seconde led etc jusqu’à 4.A 4 je verifie mon code et :
ou j'ai le bon code et la fonction "mafonction2"s enclenche.
ou bien j'ai le mauvais code et la fonction " mafonction" s'enclenche.
et je reviens au début de mon loop.
tout ceci fonction très bien, mais comme dit j'ai voulu rajouter un petit truc.
en fait j'ai crée une fonction "mafonction3" qui doit être active tant qu'aucune touche n a été appuyée.
une fois la première touche appuyée la led 1 s allume et la fonction "mafonction3" s arrete et ne doit recommencer qu'une fois le code vérifie et l une des 2 fonctions "mafonction" et "mafonction2" a été exécutée donc en début de loop.
en fait la fonction "mafonction3" ne s arrête jamais et du coup empêche la lecture des touches du clavier.
quelle méthode dois je utiliser car j'ai même utiliser le "switch...case"sans succès.
un détail doit m’échapper et je ne trouve pas.
merci d'avance pour vos lumière si précieuse