HD44780 module avec l'écran LCD 1602, 2X16 caractères + i2c aucun afichage

bonjour
je souhaite faire un air auckey avec un compteur de point et recament j'ai trouvée un programme sur internet
pour cela j'utulise HD44780 module avec l'écran LCD 1602, 2X16 caractères + i2c
et un arduino uno
le probleme selon moi vien de ce programme mais je ne sais pas ou

voici le programme que je souhaite utuliser

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2); // si cela ne fonctionne pas, l'écran utilise cette adresse:(0x27) al posto di (0x3F)
unsigned long previousMillis1 = 0;
unsigned long interval1 = 1000; //intervalle en milliseconde
unsigned int counter = 0;

int timeRST = 0;
int heures = 45;
int minute = 5;
int seconde = 6;

int buzzer = 49;
int rele = 48;
int Total seconde = 0;

int reset = 0;
int start = A6;

int score 1 = 0;
int score 2 = 0;

int pin_joueur 1 = 2;
int pin_joueur 2 = 3;
int pin_début = 5;

void setup() {
// put your setup code here, to run once:

lcd.begin();

// PORTE POUR TIRER LES BROCHES D'ENTRÉE NUMÉRIQUE
digitalWrite(pin_joueur1, INPUT_PULLUP);
digitalWrite(pin_joueur2, INPUT_PULLUP);
digitalWrite(pin_Start, INPUT_PULLUP);

//ASSIGNER LA PIN DES RELAIS ET DU BUZZER
pinMode(rele, OUTPUT);
pinMode (buzzer, OUTPUT);

// LA PORTE FORTIFIE LE RELAIS DE HAUT NIVEAU (POUR LE TOURNER, VOUS DEVEZ LE PORTER À UN NIVEAU BAS "BAS")
digitalWrite(rele, HIGH);

// Introduction avant le départ
lcd.setCursor(0, 0);
lcd.print("Hockey sur table");
lcd.setCursor(0, 1);
lcd.print("vv");
delay(2000);
lcd.clear();

lcd.setCursor(0, 0);
lcd.print("P1= ");
lcd.setCursor(4, 0);
lcd.print(score 1);
lcd.setCursor(7, 0);
lcd.print("/ P2= ");
lcd.setCursor(14, 0);
lcd.print(score 2);
lcd.setCursor(0, 1);
lcd.print("Appuyez sur START");

}

void loop() {

/* *************************************************************************************

APPUYEZ SUR START ET LANCEZ LE JEU


*/

int START = digitalRead(pin_début);
if (START == LOW) {
secondetotal = 29;
score1 = 0;
score2 = 0;
}
while (secondetotal > 0)
{

digitalWrite(rele, LOW); //LE RELAIS et ACTIVER COMMENCE LE JEU

//---------------------------------------------------------

/* *************************************************************************************

COMPTEUR POUR RÉINITIALISER LE JEU AVANT L’EXPIRATION DU TEMPS - TEMPS D’ENTRETIEN 3 SEC


*/

int START = digitalRead(pin_Start);
if (START == LOW) {
timeRST++;
delay(10);
}
else
{
timeRST = 0;
}

/* *************************************************************************************

TEMPS DE RETENIR LES 3 SECONDES ATTEINT ... REINITIALISER LE JEU


*/

if (timeRST >= 50) {
secondiTotali = 0;
lcd.clear();

lcd.print(" Reset forzato ");
digitalWrite(rele, HIGH);
timeRST = 0;
delay(1000);
lcd.clear();
delay(500);
lcd.setCursor(0, 0);
lcd.print("P1= ");
lcd.setCursor(4, 0);
lcd.print(punteggio1);
lcd.setCursor(7, 0);
lcd.print("/ P2= ");
lcd.setCursor(14, 0);
lcd.print(punteggio2);
lcd.setCursor(0, 1);
lcd.print("Premi START");
delay(200);
break;
}

//---------------------------------------------------------

if (millis() - previousMillis1 > interval1) {
previousMillis1 = millis(); //save the last time I blinked the LED

secondetotal--;

heure = ((secondetotal / 60) / 60); // convertir seconde total en heure
minute = (secondetotal / 60) % 60; // convertir seconde total en minute
seconde = secondetotal % 60; // c convertir seconde total en seconde

lcd.setCursor(0, 1);
lcd.print("Tempo res: ");

if (minuti < 10) lcd.print("0");
lcd.print(minute);

lcd.print(":");
if (secondi < 10) lcd.print("0");
lcd.print(seconde);

/* *************************************************************************************

TEMPS DE JEU TERMINÉ, RÉINITIALISER LE JEU


*/

if (secondiTotali == 0)
{
digitalWrite(rele, HIGH);
break;
}

}

lcd.setCursor(0, 0);
lcd.print("P1= ");
lcd.setCursor(4, 0);
lcd.print(punteggio1);
lcd.setCursor(7, 0);
lcd.print("/ P2= ");
lcd.setCursor(14, 0);
lcd.print(punteggio2);

/* *************************************************************************************

BOUTON D'INCRÉMENTATION +1 DU COMPTEUR DU JOUEUR 1


*/

int contatoretemp1 = digitalRead(pin_giocatore1);
if (contatoretemp1 == LOW) {
delay(120);
punteggio1++;
tone(buzzer, 1000); // Send 1KHz sound signal...
delay(200);
noTone(buzzer);
}

/* *************************************************************************************

BOUTON D'INCRÉMENTATION +1 DU COMPTEUR DU JOUEUR 2


*/
int contatoretemp2 = digitalRead(pin_giocatore2);
if (contatoretemp2 == LOW) {
delay(120);
punteggio2++;
tone(buzzer, 1000); // Send 1KHz sound signal...
delay(200);
noTone(buzzer);

}
}
}

source:

Bonjour,tu n'a pas bien édité ton post relie la section :Bien editer son post pour les nuls - Français - Arduino Forum
C'ent tout debut.
Pour ton problème d'affichage connait tu l'adresse I2C de ton ecran? Parce que je pense que ça vient de la.
Si tu ne la connais pas va dans la bibliothèque« LiquidCrystal_I2C.h» est regarde dans les exemples si il y a un qui peut chercher l'adresse.

LiquidCrystal_I2C lcd(0x3F, 16, 2); // si cela ne fonctionne pas, l'écran utilise cette adresse:(0x27) al posto di (0x3F)

0x27 ou 0x3F ?
Pour le savoir : i2c-scanner

Ensuite il suffit de régler le potentiomètre de contraste sur le module i2c.

j'ai fait le scanner i2c et je trouve cette adresse (0x27)
quand je change dans le code sa ne change rien
les autre programme comme hello word eu fonctionne
auriez vous un code similaire a disposition a celui que j'ai trouver pour ess

hbachetti:

LiquidCrystal_I2C lcd(0x3F, 16, 2); // si cela ne fonctionne pas, l'écran utilise cette adresse:(0x27) al posto di (0x3F)

0x27 ou 0x3F ?
Pour le savoir : i2c-scanner

Ensuite il suffit de régler le potentiomètre de contraste sur le module i2c.

j'ai fait le scanner i2c et je trouve cette adresse (0x27)
quand je change dans le code sa ne change rien
les autre programme comme hello word eu fonctionne
auriez vous un code similaire a disposition a celui que j'ai trouver
mais merci quand meme

hello
en résumé:
ton scan dit : 0x27.
toi tu dis : 0x3F et que l'exemple "hello World" fonctionne.

un peu surpris quand meme!!! >:(

donc comme je suis curieux et que j'aime bien comprendre,
je suis allé voir dans l'exemple "Hello World" .........................

et là que vois je ? :o

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{
// initialize the LCD
lcd.begin();

eh oui, dans l'exemple de la librairie, l'écran est adressé en 0x27 :slight_smile:

edit: lire les tutos à l'attention des nouveaux, notamment pour poster correctement ton code
que je n'ai pas lu car pas posté dans les règles
https://forum.arduino.cc/index.php?topic=315372.0

dfgh:
hello
en résumé:
ton scan dit : 0x27.
toi tu dis : 0x3F et que l'exemple "hello World" fonctionne.

un peu surpris quand meme!!! >:(

donc comme je suis curieux et que j'aime bien comprendre,
je suis allé voir dans l'exemple "Hello World" .........................

et là que vois je ? :o

eh oui, dans l'exemple de la librairie, l'écran est adressé en 0x27 :slight_smile:

edit: lire les tutos à l'attention des nouveaux, notamment pour poster correctement ton code
que je n'ai pas lu car pas posté dans les règles
Faire un Nouveau Sujet ou le corriger avec les Balises... - Français - Arduino Forum

quiproquo car
mon adesse est 0x27 elle fonctionne avec des programme comme hello word
le programme ne fonctionne pas chaez moi peu un porte l'adresse

merci des conseil

bon déjà ton code ne compile pas chez moi je sais pas si quelqu' un d'autre à essayer mais apparemment il

est plein de faute du genre un mélange de français et d'italien ou d’espagnol je ne sais pas bien,puis on ne

mais pas d'accent dans le programme il ne sais pas les lire, corrige ton code pour que ça soit plus claire et

peut être que quelqu'un trouvera ton problème moi je pense que c'est la bibliothèque qu'il faut changer et

il faudrait la reprendre là ou tu as pris ton code.

sketch_feb24d:30: error: stray '\303' in program

Le code n'est pas entre balises.

https://forum.arduino.cc/index.php?topic=315372.0

oui moi aussi j'avais cette erreur mais pas que il y en avais une aussi au niveau lcd ,puis de truc pas déclarer dans le scop du au changement de langue je pense c'est ce que j'ai compris a mon humble niveau.

Jeremy:
bon déjà ton code ne compile pas chez moi je sais pas si quelqu' un d'autre à essayer mais apparemment il

est plein de faute du genre un mélange de français et d'italien ou d’espagnol je ne sais pas bien,puis on ne

mais pas d'accent dans le programme il ne sais pas les lire, corrige ton code pour que ça soit plus claire et

peut être que quelqu'un trouvera ton problème moi je pense que c'est la bibliothèque qu'il faut changer et

il faudrait la reprendre là ou tu as pris ton code.

quelqu'un veut le faire
ou quelqun peut me montrer comment le corriger
je n'y connais que dal pour l'instan
le code est dorigine seule les description son traduite
elle son en italien a l'origine

int Total seconde = 0;
ne peut pas compiler; (un blanc de trop)
J'écrirais uint16_t totalSecondes = 0;

Il doit y avoir plein d'horreurs comme ça:

Tant que votre programme ne peut pas compiler, il vous faut le corriger (en recopiant si besoin les messages d'erreurs, ou en essayant par soi même).

Pour savoir si ça c'est compilé, vous devriez soit :

a) faire attention
b) modifier une ligne qui s'affiche du genre

  lcd.print("Hockey sur table");

deviendrait:

  lcd.print("Hockey V1.1"); delay(10000);

(vous avez 10 secondes pour la voir)
(les deux conditions ne sont pas exclusives)

Faites attention avec le LCD : il ne connaît pas les caractères spécifiques au français (et mettra des choses pas jolies à la place)

hello
bon je viens de tester ton code, il fonctionne
je suis allé le récupérer sur la source.

chez moi le lcd est en 0x27
si ton scan te dit une autre adresse, mets la à la place de 0x27

c'est la 4ème ligne du code
LiquidCrystal_I2C lcd(0x27, 16, 2);

/*
  Air Hockey da tavolo

  Questo progetto è di libero utilizzo, basta che venga citato il programmat_Heures.
  Programmat_Heures Firmware: Tartaglia daniele
  sito: www.labdomotic.com
  email: edstarink@fastwebnet.it
  Youtube channel: https://www.youtube.com/channel/UCwMjr5HocO6S363x_-jzsmA
  Facebook: https://www.facebook.com/daniele.tartaglia.73?ref=bookmarks
*/





#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // se non dovesse funzionare il display utilizza questo indirizzo:(0x27) al posto di (0x3F)
unsigned long previousMillis1 = 0;
unsigned long interval1 = 1000;  //intervallo in (millisecondsi)
unsigned int counter = 0;


int timeRST = 0;
int _Heures = 45;
int _Minutes = 5;
int _Secondes = 6;



int buzzer = 49;
int Relais = 48;
int _Total_secondes = 0;

int reset = 0;
int start = A6;


int Score_1 = 0;
int Score_2 = 0;

int Joueur_1 = 2;
int Joueur_2 = 3;
int BP_Start = 5;

void setup() {
  // put your setup code here, to run once:

  lcd.begin();

  // PORTA A PULL UP I PIN DIGITALI IN INGRESSO
  pinMode(Joueur_1, INPUT_PULLUP);
  pinMode(Joueur_2, INPUT_PULLUP);
  pinMode(BP_Start, INPUT_PULLUP);

  // ASSEGNA I PIN OUT DEI RELè E DEL BUZZER
  pinMode(Relais, OUTPUT);
  pinMode (buzzer, OUTPUT);

  // PORTA FORZATAMENTE A LIVELLO ALTO IL RELè (PER ACCENDERLO DOVRAI PORTARLO A LIVELLO BASSO "LOW")
  digitalWrite(Relais, HIGH);


  // Introduzione prima della partenza
  lcd.setCursor(0, 0);
  lcd.print("Hockey sur table");
  lcd.setCursor(0, 1);
  lcd.print("par D. Tartaglia");
  delay(2000);
  lcd.clear();

  lcd.setCursor(0, 0);
  lcd.print("P1= ");
  lcd.setCursor(4, 0);
  lcd.print(Score_1);
  lcd.setCursor(7, 0);
  lcd.print("/  P2= ");
  lcd.setCursor(14, 0);
  lcd.print(Score_2);
  lcd.setCursor(0, 1);
  lcd.print("Appuyez sur START");

}

void loop() {

  /* *************************************************************************************

    PREMI START E INIZIA IL GIOCO

   *************************************************************************************
  */

  int START = digitalRead(BP_Start);
  if (START == LOW) {
    _Total_secondes = 29;
    Score_1 = 0;
    Score_2 = 0;
  }
  while (_Total_secondes > 0)
  {

    digitalWrite(Relais, LOW); // ACCENDI IL Relais' APPENA COMINCIA IL GIOCO

    //---------------------------------------------------------


    /* *************************************************************************************

        CONTAT_Heures PER RESETTARE IL GIOCO PRIMA DELLO SCADERE DEL TEMPO - MANTENIMENTO TEMPO 3 SEC CIRCA

    *************************************************************************************
    */

    int START = digitalRead(BP_Start);
    if (START == LOW) {
      timeRST++;
      delay(10);
    }
    else
    {
      timeRST = 0;
    }


    /* *************************************************************************************

        TEMPO MANTENIMENTO DEI 3 _Secondes RAGGIUNTO...RESETTA IL GIOCO

      *************************************************************************************
    */

    if (timeRST >= 50) {
      _Total_secondes = 0;
      lcd.clear();

      lcd.print(" remise a zero ");
      digitalWrite(Relais, HIGH);
      timeRST = 0;
      delay(1000);
      lcd.clear();
      delay(500);
      lcd.setCursor(0, 0);
      lcd.print("P1= ");
      lcd.setCursor(4, 0);
      lcd.print(Score_1);
      lcd.setCursor(7, 0);
      lcd.print("/  P2= ");
      lcd.setCursor(14, 0);
      lcd.print(Score_2);
      lcd.setCursor(0, 1);
      lcd.print("Appuyez sur START");
      //lcd.print("Premi START");
      delay(200);
      break;
    }


    //---------------------------------------------------------

    if (millis() - previousMillis1 > interval1) {
      previousMillis1 = millis(); //save the last time I blinked the LED

      _Total_secondes--;

      _Heures = ((_Total_secondes / 60) / 60);  // converte i _Secondes totali in _Heures
      _Minutes = (_Total_secondes / 60) % 60; // converte i _Secondes totali in _Minutes
      _Secondes = _Total_secondes % 60;       // converte i _Secondes totali in _Secondes



      lcd.setCursor(0, 1);
      lcd.print("Tempo res: ");

      if (_Minutes < 10) lcd.print("0");
      lcd.print(_Minutes);

      lcd.print(":");
      if (_Secondes < 10) lcd.print("0");
      lcd.print(_Secondes);


      /* *************************************************************************************

          TEMPO GIOCO FINITO, RESETTA GIOCO

        *************************************************************************************
      */

      if (_Total_secondes == 0)
      {
        digitalWrite(Relais, HIGH);
        break;
      }

    }


    lcd.setCursor(0, 0);
    lcd.print("P1= ");
    lcd.setCursor(4, 0);
    lcd.print(Score_1);
    lcd.setCursor(7, 0);
    lcd.print("/  P2= ");
    lcd.setCursor(14, 0);
    lcd.print(Score_2);


    /* *************************************************************************************

      PULSANTE INCREMENTO +1 DEL CONTAT_Heures GIOCAT_Heures 1

    *************************************************************************************
    */

    int compteur_temps_1 = digitalRead(Joueur_1);
    if (compteur_temps_1 == LOW) {
      delay(120);
      Score_1++;
      tone(buzzer, 1000); // Send 1KHz sound signal...
      delay(200);
      noTone(buzzer);
    }

    /* *************************************************************************************

      PULSANTE INCREMENTO +1 DEL CONTAT_Heures GIOCAT_Heures 2

    *************************************************************************************
    */
    int compteur_temps_2 = digitalRead(Joueur_2);
    if (compteur_temps_2 == LOW) {
      delay(120);
      Score_2++;
      tone(buzzer, 1000); // Send 1KHz sound signal...
      delay(200);
      noTone(buzzer);

    }
  }
}

lcd.begin();

à la ligne 50 mais afficher comme une erreur

es-que je dois compléter entre les parenthèse si oui quoi ?

voici la librairie que j'utilise

LiquidCrystal_I2C.zip (7.95 KB)

merci de l'aide mais se problème persiste toujours

Quel problème?
Fonctionne-t-il avec l'original? (l'italien n'a pas de caractères diacritiques).

je viens de réessayer avec le code que dfgh a poster et chez moi il ne compiler pas non plus a cause de "lcd.begin" je pense que c'est a cause de la bibliothèque que vous avez ce problème ça na doit pas être la bonne
dfgh la fourni aussi,recopier le code fourni et modifier juste cette ligne "lcd.begin()" par "lcd.init()"et je pense que ça devrait fonctionner c'est ce que je viens de faire.

dfgh ldbs266 et Jeremy : vous travaillez probablement avec 3 librairies différentes.

En matière de librairie LCD I2C c'est la jungle.

recopier le code fourni et modifier juste cette ligne "lcd.begin()" par "lcd.init()

Toutes les librairies ne possèdent pas cette méthode init().

CELLE-CI possède une méthode init() mais sa méthode begin() réclame des paramètres.

CELLE-CI ne possède pas de méthode init() et sa méthode begin() ne réclame pas de paramètres.
Elle conviendrait certainement.

Celle de dfgh aussi mais il serait bien de connaître son origine, pour les mises à jour.

Oui tout a fait d'accord c'était justement pour qu'il essaye pour voir ci le code compilé où pas pour faire avancer le schmilblink,le chmilblik ...,je sais que c'est la jungle avec les libraires j'en ai fait l'expérience au début j'ai du en changer au moins trois ou quatre fois avant de trouver la bonne.

Le problème aussi c'est qu'il n'a pas donné plus d'info sur son lcd,une photo ou d'où il provient etc,j'en est eu un où le module i2c a dégagé pourquoi je n'en sais rien j'ai du le desouder et je l'ai brancher normalement l'ecran fonctionné et j'en ai racheté un autre ,il refonctionne en i2c du coup.