Go Down

Topic: HD44780 module avec l'écran LCD 1602, 2X16 caractères + i2c aucun afichage (Read 674 times) previous topic - next topic

ldbs266

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:


https://www.labdomotic.com/2017/05/07/youtube-air-hockey-soccer-table-fai-da-te/

Jeremy

Bonjour,tu n'a pas bien édité ton post relie la section :https://forum.arduino.cc/index.php?topic=394754.0
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.

hbachetti

Code: [Select]
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.
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

ldbs266

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
Code: [Select]
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

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

Quote
#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  :)

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

ldbs266

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  :)

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
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

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.

hbachetti

Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

Jeremy

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.

ldbs266

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

dbrion06

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

Code: [Select]
  lcd.print("Hockey sur table");


 deviendrait:

Code: [Select]
  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)



dfgh

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);

Code: [Select]
/*
  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);

    }
  }
}


ldbs266

  lcd.begin();

à la ligne 50 mais afficher comme une erreur

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

dfgh


ldbs266


Go Up