Go Down

Topic: Pilotage relais suivant code clavier (Read 1 time) previous topic - next topic

trigger

Bonsoir bonsoir,

J'avais dans l'espoir de faire un petit bout de code pour piloter des relais suivant le "code" saisie sur le clavier matriciel mais cependant je bloque assez vite sur un soucis de boucle un peu folle ^^ (ou d'initialisation, à cette heure je suis un peu dans le brouillard)

Je poste donc mon code (inspiré d'un sketch de code PIN que j'ai recup sur la toile il a un moment) en espérant que quelqu'un pourra me sauver la mise :)

Code: [Select]
#include <LiquidCrystal.h> // Inclusion de la librairie pour afficheur LCD
#include <Keypad.h> // inclusion de la librairie pour clavier matriciel
// --- constantes des broches ---

const int L4=35; //declaration constante de broche
const int L3=37; //declaration constante de broche
const int L2=39; //declaration constante de broche
const int L1=41; //declaration constante de broche

const int C4=43; //declaration constante de broche
const int C3=45; //declaration constante de broche
const int C2=47; //declaration constante de broche
const int C1=49; //declaration constante de broche



//--- Const pour Afficheur LCD 16x2 ----
const int RS=32;
const int E=30;

const int D4=28;
const int D5=26;
const int D6=24;
const int D7=22;


//--- Constantes utilisées avec le clavier 4x4
const byte LIGNES = 4; // 4 lignes
const byte COLONNES = 4; //4 colonnes

char touches[LIGNES][COLONNES] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}};
 
// tableaux de lignes et colonnes
byte BrochesLignes[LIGNES] = {L1, L2, L3, L4}; //connexions utilisées pour les broches de lignes du clavier
byte BrochesColonnes[COLONNES] = {C1, C2, C3, C4}; //connexions utilisées pour les broches de colonnes du clavier

char touche; // variable de stockage valeur touche appuyée

Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
LiquidCrystal lcd(RS, E, D4, D5, D6, D7);// Création d'un objet LiquidCrystal = initialisation LCD en mode 4 bits


char attempt[6]={0,0,0,0,0,0}; // used for comparison
int z=0;
int w=0;

char INTER1ON[6]={'A','B','C','D','1','1'};
char INTER1OFF[6]={'A','B','C','D','1','0'};
char INTER2ON[6]={'A','B','C','D','2','1'};
char INTER2OFF[6]={'A','B','C','D','2','0'};

int INTER1ONvalue=0;
int INTER1OFFvalue=0;
int INTER2ONvalue=0;
int INTER2OFFvalue=0;

void setup()
{
lcd.begin(16,2); // Initialise le LCD avec 20 colonnes x 4 lignes
Serial.begin(115200);
delay(10); // pause rapide pour laisser temps initialisation

// Test du LCD

lcd.print("LCD OK") ; // affiche la chaîne texte - message de test
delay(2000); // pause de 2 secondes

lcd.clear(); // // efface écran et met le curseur en haut à gauche
delay(1000); // pour laisser temps effacer écran
lcd.print("  Entrer Code...");
}
void initialisation(){

int INTER1ONvalue=0;
int INTER1OFFvalue=0;
int INTER2ONvalue=0;
int INTER2OFFvalue=0;
}

void checkCODE()
{
  for (int q=0; q<6; q++)
  {
    if (attempt[q]==INTER1ON[q]){
      INTER1ONvalue++;
    }
    if (attempt[q]==INTER1OFF[q]){
      INTER1OFFvalue++;
    }
    if (attempt[q]==INTER2ON[q]){
      INTER2ONvalue++;
    }
    if (attempt[q]==INTER2OFF[q]){
      INTER2OFFvalue++;
    }
  }
  if (INTER1ONvalue==6){
    Serial.println("INTER1ON_value");
  }
  if(INTER1OFFvalue==6){
    Serial.println("INTER1OFF_value");
  }
  if(INTER2ONvalue==6){
    Serial.println("INTER2ON_value");
  }
  if(INTER2OFFvalue==6){
    Serial.println("INTER2OFF_value");
  }
  for (int w=0; w<6; w++){
    attempt[w]=0;
  }
 
Serial.println(INTER1ONvalue);
Serial.println(INTER1OFFvalue);
Serial.println(INTER2ONvalue);
Serial.println(INTER2OFFvalue);
Serial.println("Suivant OK");
   initialisation();
}
void readKeypad()
{
  char touche = clavier.getKey();
  if (touche != NO_KEY)
  {
    if(touche=='*'){
      z=0;
    }
    else if(touche=='#'){
      delay(100); // for extra debounce
      lcd.clear();
      checkCODE();
    }
    else{
      attempt[z]=touche;
      z++;
    }//fin else
  }// fin if
}// fin void

void loop()
{
  readKeypad();
}


Je vous glisse aussi ce que je recup sur le port série pour le debug

Code: [Select]
INTER2OFF_value
4
5
5
6
Suivant OK
INTER2OFF_value
17218
12868
49
6
Suivant OK


On remarque que pour le premier il n'y a aucun soucis mais qu'ensuite tout devient un peu étrange ^^
Si quelqu'un a une piste je suis preneur,

Bonne nuit a tous

Amicalement,
Trigger



DragonsNoirs77

Je peux pas trop t'aider désolé, mais moi j'ai utilisé un programme lui ressemblant sur mon-club-elec et il fonctionne très bien ;)

trigger

Salut,

Merci pour ta réponse mais le soucis avec le code du club elec c'est que je ne pourrai pas commander plus de 14 relais
( clavier 16 auquel on enlève # et * )

Si quelqu'un a une autre proposition je suis tout ouïe :)
Amicalement,
Trigger

Grag38

salut, c'est dans cette partie là du code que çà fonctionne pas :

Code: [Select]

void initialisation(){

int INTER1ONvalue=0;
int INTER1OFFvalue=0;
int INTER2ONvalue=0;
int INTER2OFFvalue=0;
}


Ce sont des variables locales à la fonction !  donc invisibles de l'exterieur.

ce qu'il faut c'est juste virer les int comme cela :

Code: [Select]

void initialisation(){

INTER1ONvalue=0;
INTER1OFFvalue=0;
INTER2ONvalue=0;
INTER2OFFvalue=0;
}



Ca remetra les variables globales (car définies à l'exterieur) à 0 !


trigger

Bonjour et merci de ta réponse, j'ai bien appliqué les changements que tu m'as suggérés mais j'obtiens un résultat un peu étrange.
Mes variables ne bougent plus :s

Code: [Select]
INTER1OFF_value
0
0
0
0
Suivant OK
0
0
0
0
Suivant OK

Go Up