Bien le bonsoir.
J'ai écrit un code qui est sensé me permettre de commander (carte arduino MEGA) des LED par action sur les boutons d'un clavier matriciel 4x4.
Lorsque je réalise une simulation sous le logiciel PROTEUS, les les ne fonctionnent pas comme je le souhaite.
Lorsque j'appuis sur le bouton '1' du clavier, la 'lampeSalon' s'allume.
Mais lorsque j'appuis sur les autres boutons ( '2', '3', '4', '5' ) du clavier matriciel, aucune des autres LED ne s'allume.
Pourtans elles sont sensées s'allumer.
Svp quelqu'un pourrait-il me dire d'où peut venir ce problème ???
Voici le code :
#include <Key.h>
#include <Keypad.h>
/*-----------------------------déclaration des variables de gestion du clavier-------------------------------*/
const int ROW_NUM = 4; //four rows
const int COLUMN_NUM = 4; //four columns
char keys[ROW_NUM][COLUMN_NUM] = {
{'1','2','3', 'A'},
{'4','5','6', 'B'},
{'7','8','9', 'C'},
{'*','0','#', 'D'}
};
byte pin_rows[ROW_NUM] = {34, 36, 38, 40}; //connect to the row pinouts of the keypad{42, 44, 46, 48}{40, 38, 36, 34}
byte pin_column[COLUMN_NUM] = {42, 44, 46, 48}; //connect to the column pinouts of the keypad{34, 36, 38, 40}{48, 46, 44, 42}
Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );
/*-----------------------------déclaration des variables de gestion du clavier-------------------------------*/
/*--------------------------------------declaration des Pins des lampes--------------------------------------*/
const int lampeSalon = 22;
const int lampeChambre = 24;
const int lampeCuisine = 26;
const int lampeGarage = 28;
const int lampeDouche = 30;
/*--------------------------------------declaration des Pins des lampes--------------------------------------*/
/*--------------------------------------------------declaration des des variables pour la gestion de l'éclairage-------------------------*/
//------------variables des switch/case de la fonction éclairage
int sal = 0 ;
int cha = 0 ;
int cui = 0 ;
int gar = 0 ;
int dou = 0 ;
//------------variables du switch/case de la fonction 'éclairage()'
//------------variables de gestion des états des lampes
int state_Salon = 0 ;
int state_Chambre = 0 ;
int state_Cuisine = 0 ;
int state_Garage = 0 ;
int state_Douche = 0 ;
//------------variables de gestion des états des lampes
/*--------------------------------------------------declaration des des variables pour la gestion de l'éclairage-------------------------*/
/*----------------------------------------Déclaration des fonctions---------------------------------------------*/
int eclairage (int a, int b, int c, int d, int e ); // fontion de gestion de l'éclairage
int gestion_clavier(); // fonction de gestion du clavier
/*----------------------------------------Déclaration des fonctions---------------------------------------------*/
void setup() {
Serial.begin(9600);
/*--------------------------------------configuration des Pins en entrée/sortie--------------------------------------*/
pinMode(lampeSalon, OUTPUT);
pinMode(lampeChambre, OUTPUT);
pinMode(lampeCuisine, OUTPUT);
pinMode(lampeGarage, OUTPUT);
pinMode(lampeDouche, OUTPUT);
/*--------------------------------------configuration des Pins en entrée/sortie--------------------------------------*/
/*-------------------------------------gestion du clavier-------------------------------------*/
keypad.setDebounceTime(50); // pour régler l'anti-rebon à 50ms
/*-------------------------------------gestion du clavier-------------------------------------*/
}
void loop(){
gestion_clavier();
eclairage(sal, cha, cui, gar, dou) ;
}
/*----------------------------------fonction de reccupération des touches enfoncées du clavier-------------------------------------*/
int gestion_clavier(){
char code = keypad.getKey();
Serial.println(code);
if (code != NO_KEY){
switch (code){
case '1' :
sal = 1 ;
break;
case '2' :
cha = 1 ;
break;
case '3' :
cui = 1 ;
break;
case '4' :
gar = 1 ;
break;
case '5' :
dou = 1 ;
break;
}
}
return sal;
return cha;
return cui;
return gar;
return dou;
}
/*----------------------------------fonction de reccupération des touches enfoncées du clavier-------------------------------------*/
/*-----------------------------fonction gestion de l'éclairage à partir des requetes obtenues précédemment--------------------*/
int eclairage (int a, int b, int c, int d, int e){
switch (a){
case 1 :
digitalWrite(lampeSalon, HIGH);
state_Salon = 1 ;
a = 0 ;
break;
case 2 :
digitalWrite(lampeSalon, LOW);
state_Salon = 0 ;
a = 0 ;
break;
}
return state_Salon;
switch (b){
case 1 :
digitalWrite(lampeChambre, HIGH);
state_Chambre = 1 ;
b = 0 ;
break;
case 2 :
digitalWrite(lampeChambre, LOW);
state_Chambre = 0 ;
b = 0 ;
break;
}
return state_Chambre;
switch (c){
case 1 :
digitalWrite(lampeCuisine, HIGH);
state_Cuisine = 1 ;
c = 0 ;
break;
case 2 :
digitalWrite(lampeCuisine, LOW);
state_Cuisine = 0 ;
c = 0 ;
break;
}
return state_Cuisine;
switch (d){
case 1 :
digitalWrite(lampeGarage, HIGH);
state_Garage = 1 ;
d = 0 ;
break;
case 2 :
digitalWrite(lampeGarage, LOW);
state_Garage = 0 ;
d = 0 ;
break;
}
return state_Garage;
switch (e){
case 1 :
digitalWrite(lampeDouche, HIGH);
state_Douche = 1 ;
e = 0 ;
break;
case 2 :
digitalWrite(lampeDouche, LOW);
state_Douche = 0 ;
e = 0 ;
break;
}
return state_Douche;
}
/*-----------------fonction gestion de l'éclairage à partir des requetes obtenues précédemment--------------------*/
Voici le schéma de câblage :
SCHEMA DE MONTAGE.pdf (188,2 Ko)