modif code compte a rebours

bonjour je cherche a modifier ce bout de code récupéré par la

pour qu'il fonctionne avec un keypad 16 touche et je bloque voici le code de base

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display
//Definition des broches:

//Definition des broches:

int bouton1 = 0;int etat1;
int bouton2 = 1;int etat2;

//variable de controle
int test1 = 0;
int test2 = 0;
int arret = 0;

//variable de minutage
int H = 0;
int M = 0;
int min_tmp = 0;
int S = 0;

//initialisation 
void setup(){            
  //definition des entrees 
  pinMode(bouton1, INPUT); 
  pinMode(bouton2, INPUT);
  lcd.print("hello, world!");
 
lcd.init();lcd.backlight();
}

//programme

void loop(){    
arret = 0; 
H = 0; 
M = 0;
S = 0;
  // definition du Timer  

  do  {    
    if (digitalRead(bouton1) == LOW)  
    {    
      test1 = 1; 
    }    
    delay (500);   
    lcd.clear();  

    //definition de la valeur des heures  

    do 
      //incrementation heure 
    {     
      lcd.setCursor(0, 0); 
      lcd.print("HEURES");  
      lcd.setCursor(0, 1);   
      lcd.print(H); 
      lcd.setCursor(1, 1);   
      lcd.print(":");   
      lcd.setCursor(2, 1); 
      lcd.print(M);    
      lcd.setCursor(4, 1); 
      lcd.print(":");   
      lcd.setCursor(5, 1);   
      lcd.print(S);      
      etat2 = digitalRead(bouton2);   
      if (etat2 == LOW)     
      {       
       
        if (test2 == 0)     
        {       
          H = H + 1;      
          if ( H % 10 == 0)  
          {        
            H = 0;      
            lcd.clear();   
          }     
          test2 = 1;    
        }   
      }   
      else    
      {      
        test2 = 0;     
      }        
      etat1 = digitalRead(bouton1); 
      if (etat1 == LOW)   
      {       
        test1 = 2;     
      }  
    } 
    while (test1 != 2);    
    delay (500);  
    lcd.clear();        

    //definition de la valeur des minutes     
    do
      //incrementation minutes  
    {     
      lcd.setCursor(0, 0);   
      lcd.print("MINUTES");  
      lcd.setCursor(0, 1);   
      lcd.print(H);   
      lcd.setCursor(1, 1);   
      lcd.print(":");    
      lcd.setCursor(2, 1);    
      lcd.print(M);   
      lcd.setCursor(4, 1); 
      lcd.print(":");    
      lcd.setCursor(5, 1);  
      lcd.print(S);      
      etat2 = digitalRead(bouton2);   
      if (etat2 == LOW) 
      {   
        if (test2 == 0)     
        {         
          M = M + 1; 
          if ( M % 60 == 0)   
          {     
            M = 00;         
            lcd.clear();        
          }       
          test2 = 1;    
        }   
      }  
      else     {     
        test2 = 0;     
      }       
      etat1 = digitalRead(bouton1);     
      if (etat1 == LOW) 
      {   
        test1 = 3;  
      }  
    } 
    while (test1 != 3); 
    delay (500); 
    lcd.clear();      

    //definition de la valeur des secondes   

    do 

      //incrementation minutes 
    {         
      lcd.setCursor(0, 0); 
      lcd.print("SECONDES");  
      lcd.setCursor(0, 1);    
      lcd.print(H);    
      lcd.setCursor(1, 1);  
      lcd.print(":");  
      lcd.setCursor(2, 1); 
      lcd.print(M);   
      lcd.setCursor(4, 1);  
      lcd.print(":");   
      lcd.setCursor(5, 1);   
      lcd.print(S);     
      etat2 = digitalRead(bouton2);  
      if (etat2 == LOW)   
      {       
        if (test2 == 0)  
        {         
          S = S + 1;  
          if ( S % 60 == 0)     
          {           
            S = 0;   
            lcd.clear();      
          }         
          test2 = 1; 
        }     
      }    
      else   
      {      
        test2 = 0;     
      }     
      etat1 = digitalRead(bouton1);  
      if (etat1 == LOW)     {      
        test1 = 4;     
      }    
    } 
    while (test1 != 4);   
    delay (500);    
    lcd.clear();    
    //choix de la validation ou de la correction. Bouton1 pour recommencer, Bouton2 pour valider       
    do //incrementation minutes  
    {          
      lcd.setCursor(0, 0);   
      lcd.print("VALIDER ?");   
      lcd.setCursor(0, 1);   
      lcd.print(H); 
      lcd.setCursor(1, 1);  
      lcd.print(":");    
      lcd.setCursor(2, 1); 
      lcd.print(M);    
      lcd.setCursor(4, 1);   
      lcd.print(":");    
      lcd.setCursor(5, 1); 
      lcd.print(S);       
      etat2 = digitalRead(bouton2); 
      if (etat2 == LOW)     
      {       
        if (test2 == 0)     
        {         
          test1 = 5;       
          test2 = 1;    
        }     
      }     
      else     {  
        test2 = 0;     
      }         
      etat1 = digitalRead(bouton1);  
      if (etat1 == LOW)     {     
        test1 = 1;     
      }   
    } 
    while (test1 == 4);  
  } 
  while (test1 < 5); 
  digitalWrite(13, HIGH); 
  delay(1000);  
  digitalWrite(13,LOW);  
  //Compte à rebour 
  do  {    
    lcd.clear();  
    lcd.setCursor(0, 0);  

    lcd.print("fin dans :");  
    lcd.setCursor(0, 1);   
    lcd.print(H);   
    lcd.setCursor(1, 1);  
    lcd.print(":"); 
    lcd.setCursor(2, 1);  
    lcd.print(M);  
    lcd.setCursor(4, 1);   
    lcd.print(":");  
    lcd.setCursor(5, 1);
    lcd.print(S);       
    if ( S <= 1)   
    {  
      if ( M > 0 )   
      {   
        M = M - 1;    
        S = 60;   
      } 
      else    
      {      
        if (H > 0)      
        {         
          H = H - 1;   
          M = 59;     
          S = 60;  
        }    
        else     
        {         
          //instructions à effectuer lors de l'arrivée à 0. Ici, on passe la broche 3 à l'état haut pour le test    
          digitalWrite(13,HIGH);       
          test1 = 6;     
          H = 0;       
          M = 0;       
          S = 0;      
          lcd.clear();    
          lcd.setCursor(0, 0);  
          lcd.print("fini");         
          lcd.setCursor(0, 1);      
          lcd.print(H);     
          lcd.setCursor(1, 1);     
          lcd.print(":");   
          lcd.setCursor(2, 1);     
          lcd.print(M); 

          lcd.setCursor(4, 1);    
          lcd.print(":");   
          lcd.setCursor(5, 1);      
          lcd.print(S);   
        } 
      }       
    }    
    S = S - 1;   
    delay (1000); 
  }
  while (test1 != 6);       
}

et voila le code que j'ai commencer a modifier mais je seiche jarrive a rien j'ai besoin d'aide merci par avance

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display
#include <Key.h>
#include <Keypad.h> /*#define LIST_MAX 10   // Max number of keys on the active list.#define MAPSIZE 10   // MAPSIZE is the number of rows (times 16 columns)
*/
const byte ROWS = 4; const byte COLS = 4;
char keys[ROWS][COLS] = {{'1', '2', '3', 'A'},{'4', '5', '6', 'B'},{'7', '8', '9', 'C'},{'*', '0', '#', 'D'}};
byte rowPins[ROWS] = {A0, A1, A2, A3};byte colPins[COLS] = {5, 4, 3, 2}; 
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

int H = 0;int M = 0;int S = 0;
void setup() {lcd.init();lcd.init();lcd.backlight();}

void loop() { char key = keypad.getKey(); 

/*if (key != NO_KEY){lcd.print(key);count++;
 if (count==3){lcd.clear();count=0;}}
 do  {if (digitalRead(bouton1) == LOW)  
     {test1 = 1;}delay (500);lcd.clear(); 
      if ( H % 9 == 0){H = 0;} */


      lcd.setCursor(0, 0);lcd.print("HEURES");  
      lcd.setCursor(0, 1);lcd.print(H); 
      lcd.setCursor(1, 1);lcd.print(":");   
      lcd.setCursor(2, 1);lcd.print(M);    
      lcd.setCursor(4, 1);lcd.print(":");   
      lcd.setCursor(5, 1);lcd.print(S);      
   
   
if (key){H = key ; lcd.print(key); }
if (H % 25 == 0){H = 0;}}


   }

/*char keypressed = myKeypad.getKey();
 if (keypressed != NO_KEY)
 {
 Serial.print(keypressed);
 }*/

bonjour,
avant de vouloir modifier un code piqué sur le net, teste déjà ton keypad et comprends comment cela fonctionne.
regarde le github de keypad ICI

jai lu sa déja j'ai tester plusieur possibilité je les est mis en commentaire mais jarrive a rien j'ai besoin d'aide

je comprend pas pourquoi je narrive pas a récupéré l'infos de la touche presser comme dans lexemple hello keypad

pourtant j'ai remis comme dans l'exemple mais sa marche pas

de plus quand je veut incrementer 12 par exemple pour les Heure (H) sa écrit pas aux bonne endroit

pour tant j'ai tester H = key et H == key ,keys,event keypad getkey etc plein de truc mais je bloque si une ame charitable peut m'aider sa serait cool

t'arrive a rien, ok.
mais a rien de quoi?

qu'est ce qui fonctionne et ne fonctionne pas?

as tu essayé le code de github?
si oui, est ce que ca fonctionne?

ou est le
#include <Wire.h>
dans ton code?

j'ai repris a zero j'ai toujour le meme probleme je suis sur que c'est une connerie de rien du tout en + xd

j'ai tester le code de github sa marche pas

aprés c'est peut etre moi qui c'est pas comment me servir du document c'est fort possible aussi j'ai pas compris comment exploiter le document .CPP

j'ai commenter mon code pour essayer d'etre clair

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display
#include <Wire.h>
#include <Keypad.h> 
const byte ROWS = 4; const byte COLS = 4;
char keys[ROWS][COLS] = {{'1', '2', '3', 'A'},{'4', '5', '6', 'B'},{'7', '8', '9', 'C'},{'*', '0', '#', 'D'}};
byte rowPins[ROWS] = {A0, A1, A2, A3};byte colPins[COLS] = {5, 4, 3, 2}; 
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );



//variable de minutage

int H = 0 ;
int M = 0 ;
int S = 0 ;


void setup() {lcd.init();lcd.backlight();}

void loop() {   char key = keypad.getKey();


//incrementation heure

  lcd.setCursor(0, 0);lcd.print("HEURES");lcd.setCursor(0, 1);lcd.print(H); 
      lcd.setCursor(1, 1);lcd.print(":");lcd.setCursor(2, 1);lcd.print(M);    
      lcd.setCursor(4, 1);lcd.print(":");lcd.setCursor(5, 1);lcd.print(S);  

if (key){  /* H est égale a 00 par défault je cherche via le keypad a entré la valeur des heure en format 24 h (ex 17 h 52 m 23s) 
  donc la taper le chiffre 1 puis le 7 pour obtenir 17 H puis que sa passe aux minutes  puis aux secondes 
  ici je n'est fait que les heure pour le moment vu que je bloque la dessus */

   H =  key ;
  lcd.print(key);
       
     if ( H % 99 == 0) { H = 0;lcd.clear();}}}

/* mon probleme et que si je tape 1 sur le keypad déja sa affiche 1 a la place des seconde o lieu des heure et 
 *  que a la place des heure sa affiche 4 pourquoi je ne sait pas 
 *  
 *  voir exemple ci dessous le keypad fonctionne et est correctement brancher j'ai tester 

touche keypad         affichage         affichage que je veut premier apui       2 e appui 
1                      4:0:01               10:00:00                              17:00:00      
2                      0:0:0                20:00:00                              24:00:00
3                      5:0:03               30:00:00                              32:00:00
4                      5:0:04               40:00:00                              45:00:00
5                      5:0:05               50:00:00                              55:00:00
6                      5:0:06               60:00:00                              67:00:00





*/

j'ai tester le code de github sa marche pas

c'est a dire?

j'ai repris mon code a zero mais toujour le meme problme mais je pensse l'avoir cerné

je pensse que c'est lier a l'incrementation d'une valeur

ici par ex

int H = 0 quand je tape lcd.print (H) sa print 0 normale

mais quand je veut donner a H une valeur par ex 10 sa naffiche pas 10 sa affiche une autre valeur et pas a lendroit définit ici lemplacement des heure mais a la place des secondes pareil pour les minute

esque sa seré pas un probleme de converssion ? sa afficherer pas les chiffre en language asc2 ou autre ?

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display
#include <Keypad.h> //http://www.arduino.cc/playground/uploads/Code/Keypad.zip
const byte ROWS = 4; const byte COLS = 4;
char keys[ROWS][COLS] = {{'1', '2', '3', 'A'},{'4', '5', '6', 'B'},{'7', '8', '9', 'C'},{'*', '0', '#', 'D'}};
byte rowPins[ROWS] = {A0, A1, A2, A3};byte colPins[COLS] = {5, 4, 3, 2}; 
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
int count = 0 ;
int H = 0; // compteur secondes 
int M = 0; // compteur minutes 
int S = 0; // compteur heures

char key;
//initialisation 
void setup(){lcd.init();lcd.backlight();lcd.print("hello, world!");}

void loop(){key = keypad.getKey(); if (key != NO_KEY) {if (key = 'A' ){lcd.clear (); selecttemp(); }}}



void selecttemp (){
 
count = 0 ;

 do { 
lcd.setCursor(0, 0);lcd.print("HEURES");
lcd.setCursor(0, 1);lcd.print(H); 
lcd.setCursor(2, 1);lcd.print(":");
lcd.setCursor(4, 1);lcd.print(M); 
lcd.setCursor(5, 1);lcd.print(":");  
lcd.setCursor(7, 1);lcd.print(S);

key = keypad.getKey();
lcd.print (H);lcd.cursor(); 
if (key != NO_KEY) {
if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D') {
    lcd.print(key);
       H = key; 
         H++; 
           count++;
             if(H % 25 == 00){
                H = 00;  
                  lcd.clear(); } } } }

while (count < 2) ;

 do { 
lcd.setCursor(0, 0);lcd.print ("minutes");
lcd.setCursor(0, 1);lcd.print(H); 
lcd.setCursor(2, 1);lcd.print(":");
lcd.setCursor(4, 1);lcd.print(M); 
lcd.setCursor(5, 1);lcd.print(":");  
lcd.setCursor(7, 1);lcd.print(S);

key = keypad.getKey();
lcd.print (M); lcd.cursor();
if (key != NO_KEY) {
if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D')  {
    lcd.print(key);
       M = key; 
         M++; 
           count++; 
             if ( M % 60 == 00){ 
                M = 00;lcd.clear();} } } } 
        
 while (count < 4) ;  

do { 
lcd.setCursor(0, 0);lcd.print ("secondes");
lcd.setCursor(0, 1);lcd.print(H); 
lcd.setCursor(2, 1);lcd.print(":");
lcd.setCursor(4, 1);lcd.print(M); 
lcd.setCursor(5, 1);lcd.print(":");  
lcd.setCursor(7, 1);lcd.print(S);

key = keypad.getKey();
lcd.print (S); lcd.cursor();
if (key != NO_KEY) {
if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D') {
    lcd.print(key); 
       S = key; 
         S++; 
           count++;
             if ( S % 60 == 00){
                S =00;lcd.clear();} } } } 

  while (count < 6) ;  
/*
do{
lcd.clear();
lcd.setCursor(0, 0);lcd.print("temp");
lcd.setCursor(0, 1);lcd.print(H); 
lcd.setCursor(2, 1);lcd.print(":");
lcd.setCursor(4, 1);lcd.print(M); 
lcd.setCursor(5, 1);lcd.print(":");  
lcd.setCursor(7, 1);lcd.print(S);
lcd.setCursor(0,2);lcd.print("press * pour recommencer");
lcd.setCursor(0, 3);lcd.print("press # pour valider");

key = keypad.getKey();

      if(key == '*') {lcd.clear (); selecttemp();}  
      if(key == '#') {lcd.clear (); lcd.print("ok"); } }
   while (count < 7) ;  */

}

mais quand je veut donner a H une valeur par ex 10 sa naffiche pas 10 sa affiche une autre valeur et pas a lendroit définit ici lemplacement des heure mais a la place des secondes pareil pour les minute

déjà sans regarder plus loin, tes commentaires sont faux :slight_smile:

int H = 0; // compteur secondes
int M = 0; // compteur minutes
int S = 0; // compteur heures

cherches l'erreur :wink:

lcd.setCursor(colonne, ligne) tes infos se cheveauchent

lcd.setCursor(0, 0);lcd.print("HEURES");
lcd.setCursor(0, 1);lcd.print(H);
lcd.setCursor(2, 1);lcd.print(":");
lcd.setCursor(4, 1);lcd.print(M);
lcd.setCursor(5, 1);lcd.print(":"); 
lcd.setCursor(7, 1);lcd.print(S);

hello
voici un bout de ton code modifié, il devrait t'aider à te débloquer

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display
#include <Keypad.h> //http://www.arduino.cc/playground/uploads/Code/Keypad.zip
const byte ROWS = 4; const byte COLS = 4;
char keys[ROWS][COLS] = {{'1', '2', '3', 'A'},{'4', '5', '6', 'B'},{'7', '8', '9', 'C'},{'*', '0', '#', 'D'}};
byte rowPins[ROWS] = {A0, A1, A2, A3};byte colPins[COLS] = {5, 4, 3, 2};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
int count = 0 ;
int H = 0; // compteur secondes
int M = 0; // compteur minutes
int S = 0; // compteur heures

char key;
//initialisation
void setup(){lcd.init();lcd.backlight();lcd.print("hello, world!");}

void loop(){key = keypad.getKey(); if (key != NO_KEY) {if (key = 'A' ){lcd.clear (); selecttemp(); }}}



void selecttemp ()
{
count = 0 ;
while (count < 2) 
{
 key = keypad.getKey();
 if (key != NO_KEY) 
 {
if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D') 
{
    lcd.print(key);
       H = key;
         H++;
}
}
lcd.setCursor(0, 0);lcd.print("HEURES");
lcd.setCursor(count, 1);lcd.print(H);
lcd.setCursor(2, 1);lcd.print(":");
lcd.setCursor(4, 1);lcd.print(M);
lcd.setCursor(5, 1);lcd.print(":"); 
lcd.setCursor(7, 1);lcd.print(S);
count++;
 }
count=3;
while (count < 5) 
{
 key = keypad.getKey();
if (key != NO_KEY) {
if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D')  {
    lcd.print(key);
       M = key;
  }
}           
lcd.setCursor(0, 0);lcd.print ("minutes");
lcd.setCursor(0, 1);lcd.print(H);
lcd.setCursor(2, 1);lcd.print(":");
lcd.setCursor(count, 1);lcd.print(M);
lcd.setCursor(5, 1);lcd.print(":"); 
lcd.setCursor(7, 1);lcd.print(S);
count++;
 }
 
 /*      
 while (count < 4) ; 

do {
lcd.setCursor(0, 0);lcd.print ("secondes");
lcd.setCursor(0, 1);lcd.print(H);
lcd.setCursor(2, 1);lcd.print(":");
lcd.setCursor(4, 1);lcd.print(M);
lcd.setCursor(5, 1);lcd.print(":"); 
lcd.setCursor(7, 1);lcd.print(S);

key = keypad.getKey();
lcd.print (S); lcd.cursor();
if (key != NO_KEY) {
if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D') {
    lcd.print(key);
       S = key;
         S++;
           count++;
             if ( S % 60 == 00){
                S =00;lcd.clear();} } } }

  while (count < 6) ; 

do{
lcd.clear();
lcd.setCursor(0, 0);lcd.print("temp");
lcd.setCursor(0, 1);lcd.print(H);
lcd.setCursor(2, 1);lcd.print(":");
lcd.setCursor(4, 1);lcd.print(M);
lcd.setCursor(5, 1);lcd.print(":"); 
lcd.setCursor(7, 1);lcd.print(S);
lcd.setCursor(0,2);lcd.print("press * pour recommencer");
lcd.setCursor(0, 3);lcd.print("press # pour valider");

key = keypad.getKey();

      if(key == '*') {lcd.clear (); selecttemp();} 
      if(key == '#') {lcd.clear (); lcd.print("ok"); } }
   while (count < 7) ;  
 */

}

merci pour ton aide mais c'est pareil

je tape 1 j'obtien sa : heures
50: 0: 01

je comprend pas j'ai tester avec un ecran non I2c c'est pareil

j'ai l'impression que c'est avec le lcd.print (H) que sa merde y a une autre fasson de faire ?

lcd.setCursor(count, 1); c'est quoi cette commande je connait pas ?

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display
#include <Keypad.h> //http://www.arduino.cc/playground/uploads/Code/Keypad.zip
const byte ROWS = 4; const byte COLS = 4;
char keys[ROWS][COLS] = {{'1', '2', '3', 'A'},{'4', '5', '6', 'B'},{'7', '8', '9', 'C'},{'*', '0', '#', 'D'}};
byte rowPins[ROWS] = {A0, A1, A2, A3};byte colPins[COLS] = {5, 4, 3, 2};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
int count = 0 ;
int H = 0; // compteur heures
int M = 0; // compteur minutes
int S = 0; // compteur secondes

char key;
//initialisation
void setup(){lcd.init();lcd.backlight();lcd.print("hello, world!");}

void loop(){key = keypad.getKey(); if (key != NO_KEY) {if (key = 'A' ){lcd.clear (); selecttemp () ; }}}



void selecttemp ()
 {
count = 0 ;
while (count < 2) 
{
 key = keypad.getKey();
 if (key != NO_KEY) 
 {
if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D') 
{
    lcd.print(key);
       H = key; 
         H++;
}
}
lcd.setCursor(0, 0);lcd.print("HEURES");
lcd.setCursor(count, 1);lcd.print(H);
lcd.setCursor(2, 1);lcd.print(":");
lcd.setCursor(6, 1);lcd.print(M);
lcd.setCursor(7, 1);lcd.print(":"); 
lcd.setCursor(10, 1);lcd.print(S);/*
count++;
 }
count=3;
while (count < 5) 
{
 key = keypad.getKey();
if (key != NO_KEY) {
if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D')  {
    lcd.print(key);
       M = key;
  }
}           
lcd.setCursor(0, 0);lcd.print ("minutes");
lcd.setCursor(0, 1);lcd.print(H);
lcd.setCursor(2, 1);lcd.print(":");
lcd.setCursor(count, 1);lcd.print(M);
lcd.setCursor(5, 1);lcd.print(":"); 
lcd.setCursor(7, 1);lcd.print(S);
count++;
 }
 
 /*      
 while (count < 4) ; 

do {
lcd.setCursor(0, 0);lcd.print ("secondes");
lcd.setCursor(0, 1);lcd.print(H);
lcd.setCursor(2, 1);lcd.print(":");
lcd.setCursor(4, 1);lcd.print(M);
lcd.setCursor(5, 1);lcd.print(":"); 
lcd.setCursor(7, 1);lcd.print(S);

key = keypad.getKey();
lcd.print (S); lcd.cursor();
if (key != NO_KEY) {
if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D') {
    lcd.print(key);
       S = key;
         S++;
           count++;
             if ( S % 60 == 00){
                S =00;lcd.clear();} } } }

  while (count < 6) ; 

do{
lcd.clear();
lcd.setCursor(0, 0);lcd.print("temp");
lcd.setCursor(0, 1);lcd.print(H);
lcd.setCursor(2, 1);lcd.print(":");
lcd.setCursor(4, 1);lcd.print(M);
lcd.setCursor(5, 1);lcd.print(":"); 
lcd.setCursor(7, 1);lcd.print(S);
lcd.setCursor(0,2);lcd.print("press * pour recommencer");
lcd.setCursor(0, 3);lcd.print("press # pour valider");

key = keypad.getKey();

      if(key == '*') {lcd.clear (); selecttemp();} 
      if(key == '#') {lcd.clear (); lcd.print("ok"); } }
   while (count < 7) ;  
 */

}}

merci de votre en tout cas faut que je trouve !!!! et je trouverer

je n'avais pas vu
dans ton code d'origine, tu saisi des "chars" qui sont les codes ascii de ce que tu tapes
tu tapes "1", puis dans ton prg tu l'incréméntes et il vaut "2". le code ascii de "2" est "50"

je ne peux tester le code
le voici en partie modifié.
testes le tel quel, il devrait fonctionner pour les heures et les minutes

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display
#include <Keypad.h> //http://www.arduino.cc/playground/uploads/Code/Keypad.zip
const byte ROWS = 4; const byte COLS = 4;
char keys[ROWS][COLS] = {{'1', '2', '3', 'A'},{'4', '5', '6', 'B'},{'7', '8', '9', 'C'},{'*', '0', '#', 'D'}};
byte rowPins[ROWS] = {A0, A1, A2, A3};byte colPins[COLS] = {5, 4, 3, 2};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
int count = 0 ;
int H = 0; // compteur secondes
int M = 0; // compteur minutes
int S = 0; // compteur heures

char key;
//initialisation
void setup(){lcd.init();lcd.backlight();lcd.print("hello, world!");}

void loop(){key = keypad.getKey(); if (key != NO_KEY) {if (key = 'A' ){lcd.clear (); selecttemp(); }}}


void selecttemp ()
{
count = 0 ;
while (count < 2)
{
 key = keypad.getKey();
 if (key != NO_KEY)
 {
if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D')
{
       H = key;
}
}
lcd.setCursor(0, 0);lcd.print("HEURES");
lcd.setCursor(count, 1);lcd.write(H);
lcd.setCursor(2, 1);lcd.print(":");
lcd.setCursor(5, 1);lcd.print(":");

count++;
 }
count=3;
while (count < 5)
{
 key = keypad.getKey();
if (key != NO_KEY) {
if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D')  {
       M = key;
  }
}           
lcd.setCursor(0, 0);lcd.print ("minutes");
lcd.setCursor(count, 1);lcd.write(M);
count++;
 }
 
 /*     
 while (count < 4) ;

do {
lcd.setCursor(0, 0);lcd.print ("secondes");
lcd.setCursor(0, 1);lcd.print(H);
lcd.setCursor(2, 1);lcd.print(":");
lcd.setCursor(4, 1);lcd.print(M);
lcd.setCursor(5, 1);lcd.print(":");
lcd.setCursor(7, 1);lcd.print(S);

key = keypad.getKey();
lcd.print (S); lcd.cursor();
if (key != NO_KEY) {
if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D') {
    lcd.print(key);
       S = key;
         S++;
           count++;
             if ( S % 60 == 00){
                S =00;lcd.clear();} } } }

  while (count < 6) ;

do{
lcd.clear();
lcd.setCursor(0, 0);lcd.print("temp");
lcd.setCursor(0, 1);lcd.print(H);
lcd.setCursor(2, 1);lcd.print(":");
lcd.setCursor(4, 1);lcd.print(M);
lcd.setCursor(5, 1);lcd.print(":");
lcd.setCursor(7, 1);lcd.print(S);
lcd.setCursor(0,2);lcd.print("press * pour recommencer");
lcd.setCursor(0, 3);lcd.print("press # pour valider");

key = keypad.getKey();

      if(key == '*') {lcd.clear (); selecttemp();}
      if(key == '#') {lcd.clear (); lcd.print("ok"); } }
   while (count < 7) ; 
 */

}

tester telle quell sa affiche minute en H et M sa affiche comme un signe chinoi et rien en secondes meme pas de zero si japuis sur nimp quelle touche du clavier sa ffiche rien ya juste un lcd.clear qui doit sactive 1 millieme de seconde

pour l'histoire du char je pensse que le probleme vien de la comment je peut faire sans passer par un char ?

esque c'est possible ?

évite le langage SMS, merci

:slight_smile: mon but est plus de te débloquer que de te faire le code.

vais répéter mon précédent message, évite le langage SMS

après mets des serial print pour voir ce qui ressort quand tu appuie sur une touche

autre chose
while (count < 2)
while (count < 5)==> inclut le précédent while :wink:

puis
count=3;
donc le count vaut toujours 3 et donc, tes pressions pour heures ne sont prises en compte que pour minutes.

testes ce code pour vérifier tes touches

#include <Keypad.h>

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns

char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {A0, A1, A2, A3}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){
  Serial.begin(9600);
}

void loop(){
  char key = keypad.getKey();

  if (key != NO_KEY){
    Serial.println(key);
  }
}

ensuite testes ce code

#include <Wire.h>
//#include <LiquidCrystal_I2C.h>
//LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display

#include <LiquidCrystal.h>
LiquidCrystal lcd(8,9,4,5,6,7); // pin de l'écran lcd

#include <Keypad.h> //http://www.arduino.cc/playground/uploads/Code/Keypad.zip
const byte ROWS = 4; const byte COLS = 4;
char keys[ROWS][COLS] = {{'1', '2', '3', 'A'},{'4', '5', '6', 'B'},{'7', '8', '9', 'C'},{'*', '0', '#', 'D'}};
byte rowPins[ROWS] = {A0, A1, A2, A3};byte colPins[COLS] = {5, 4, 3, 2};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
int count = 0 ;
int H = 0; // compteur secondes
int M = 0; // compteur minutes
int S = 0; // compteur heures

char key;
//initialisation
void setup(){lcd.begin(16, 2);lcd.print("hello, world!");Serial.begin(115200);
delay(1000);
 }
void loop(){key = keypad.getKey();
key = 'A';Serial.println(key);
if (key != NO_KEY) {if (key = 'A' ){lcd.clear (); selecttemp(); }}}


void selecttemp ()
{
count = 0 ;
key = '1';
while (count < 2)
{
 //key = keypad.getKey();
 
 Serial.println(key);
 if (key != NO_KEY)
 {
if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D')
{
       H = key;
}
}
Serial.print("count avant ");Serial.print(count);
lcd.setCursor(0, 0);lcd.print("HEURES");
lcd.setCursor(count, 1);lcd.write(H);
lcd.setCursor(2, 1);lcd.print(":");
lcd.setCursor(5, 1);lcd.print(":");

count++;
key = '3';
Serial.print("count apres");Serial.print(count);

 }
 
 while(1){};
count=3;
while (count < 5)
{
 key = keypad.getKey();
if (key != NO_KEY) {
if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D')  {
       M = key;
  }
}           
lcd.setCursor(0, 0);lcd.print ("minutes");
lcd.setCursor(count, 1);lcd.write(M);
count++;
 }
 
 /*     
 while (count < 4) ;

do {
lcd.setCursor(0, 0);lcd.print ("secondes");
lcd.setCursor(0, 1);lcd.print(H);
lcd.setCursor(2, 1);lcd.print(":");
lcd.setCursor(4, 1);lcd.print(M);
lcd.setCursor(5, 1);lcd.print(":");
lcd.setCursor(7, 1);lcd.print(S);

key = keypad.getKey();
lcd.print (S); lcd.cursor();
if (key != NO_KEY) {
if (key != '*' && key != '#' && key != 'A' && key != 'B' && key != 'C' && key != 'D') {
    lcd.print(key);
       S = key;
         S++;
           count++;
             if ( S % 60 == 00){
                S =00;lcd.clear();} } } }

  while (count < 6) ;

do{
lcd.clear();
lcd.setCursor(0, 0);lcd.print("temp");
lcd.setCursor(0, 1);lcd.print(H);
lcd.setCursor(2, 1);lcd.print(":");
lcd.setCursor(4, 1);lcd.print(M);
lcd.setCursor(5, 1);lcd.print(":");
lcd.setCursor(7, 1);lcd.print(S);
lcd.setCursor(0,2);lcd.print("press * pour recommencer");
lcd.setCursor(0, 3);lcd.print("press # pour valider");

key = keypad.getKey();

      if(key == '*') {lcd.clear (); selecttemp();}
      if(key == '#') {lcd.clear (); lcd.print("ok"); } }
   while (count < 7) ;
 */

}

javais tester le serial print avec hello word sa marcher nikel

je vient de tester avec le code infobarquee sa marche nikel

le code de dfgh marche pas sa affiche þOÿ|!¦ et c'est tout je peut rien faire

y a un truc que je comprent pas

''dans ton code d'origine, tu saisi des "chars" qui sont les codes ascii de ce que tu tapes
tu tapes "1", puis dans ton prg tu l'incréméntes et il vaut "2". le code ascii de "2" est "50"''

pourquoi quand je tape 1 sa vaut 2 en en char et en ascii 50 ?

c'est quoi le ascii sa sert a quoi ?

moi je pensse qua sa affiche ce que je rentre an ascii du coup aux risque de dire une connerie est que lon peut reconvertir cette valeur afficher an ascii par ex 50 pour que sa affiche 1 ?

le code de dfgh marche pas sa affiche þOÿ|!¦ et c'est tout je peut rien faire

pb de vitesse de la console ===> Serial.begin(115200)