Bonjour,
J'ai un petit souci de compilation concernant ma déclaration d'écran lcd 20,4
Voici mon code:
#include <FastIO.h>
#include <I2CIO.h>
#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <LiquidCrystal_I2C_ByVac.h>
#include <LiquidCrystal_SI2C.h> // permet d'utiliser le module I2C afin de n'utiliser que 4 fils
#include <LiquidCrystal_SR.h>
#include <LiquidCrystal_SR1W.h>
#include <LiquidCrystal_SR2W.h>
#include <LiquidCrystal_SR3W.h>
#include <SI2CIO.h>
#include <SoftI2CMaster.h>
#include <Wire.h> // permet de communiquer avec les composants utilisant le protocole I2C / TWI
// Déclaration des variables ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int etat_boutonB, etat_boutonR;
const int pinBoutonB =2;
const int pinBoutonR = 3;
const int pinLed = 4;
int jeu = 0;
// Déclaration des pins ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Void Menu ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void menu() {
// CHOIX JEU
Serial.begin(9600);
pinMode(pinBoutonB, INPUT); //On indique à l’Arduino le mode du pin (entrée)
pinMode(pinBoutonR, INPUT); //On indique à l’Arduino le mode du pin (entrée)
lcd.clear();
lcd.setCursor(6, 0 );
lcd.print("MENU");
delay (1500);
lcd.clear();
//Serial.println("menu");
while (1)
{
lcd.setCursor(0, 0 );lcd.print("(B)-Parcours");
lcd.setCursor(0, 1 );lcd.print("(R)-Distance");
etat_boutonB = digitalRead(pinBoutonB);
etat_boutonR = digitalRead(pinBoutonR);
if (etat_boutonB == HIGH )
{
//Serial.print("BP_B = ");Serial.print(etat_boutonB);Serial.print(" pour choix checkpoint ");Serial.print("x = ");Serial.println(x);
etat_boutonB=LOW;
delay(300);
jeu = 1;
}
if (etat_boutonR == HIGH )
{
//Serial.print("BP_R = ");Serial.print(etat_boutonR);Serial.print(" pour choix Bombe ");Serial.print("x = ");Serial.println(x);
etat_boutonR=LOW;
delay(300);
jeu = 2;
}
if (jeu > 0){break;}
}
lcd.clear();
}
et voici l'erreur affichée:
C:\Users\Jean-Christophe\Documents\Arduino\libraries\Newliquidcrystal_1.3.5/LiquidCrystal_I2C.h:53:4: note: initializing argument 3 of 'LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, t_backlighPol)'
LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t backlighPin, t_backlighPol pol);
^
exit status 1
Erreur de compilation pour la carte Arduino Nano
Je n'arrive pas à comprendre l'erreur.
Merci pour votre aide.
/**
* Constructor
*
* @param lcd_addr I2C slave address of the LCD display. Most likely printed on the
* LCD circuit board, or look in the supplied LCD documentation.
* @param lcd_cols Number of columns your LCD display has.
* @param lcd_rows Number of rows your LCD display has.
* @param charsize The size in dots that the display has, use LCD_5x10DOTS or LCD_5x8DOTS.
*/
LiquidCrystal_I2C(uint8_t lcd_addr, uint8_t lcd_cols, uint8_t lcd_rows, uint8_t charsize = LCD_5x8DOTS);
Il y a 4 arguments et tu en mets 3 : LiquidCrystal_I2C lcd(0x27, 20, 4);ce qui ne pose normalement pas de problème. Je te conseille d'effacer la ligne et de la retaper à la main. Tu as peut-être un ou des caractères cachés (genre doigt qui dérape sur le clavier) qui créent cette erreur.
Il existe plusieurs librairies LiquidCrystal_I2C, pas forcément compatibles.
Dans ton exemple :
LiquidCrystal_I2C lcd(0x27, 20, 4);
Les paramètres sont
0x27 = adresse I2C
20 = nombres de colonnes
4 = nombre dde lignes
Or le constructeur de la classe LiquidCrystal_I2C de la librairie Newliquidcrystal_1.3.5 n'attend pas du tout ces paramètres.
adresse I2C
backlighPin
pol
Soit tu adoptes la librairie qui correspond à ton exemple, soit tu t'inspires d'un exemple de la librairie Newliquidcrystal_1.3.5.
On ne mélange pas.
Personnellement j'utilise celle-ci, qui fonctionnera probablement avec ton code.
Ensuite, si tu changes de librairie, tu vires la Newliquidcrystal_1.3.5, car ces messieurs les concepteurs ont eu la merveilleuse idée de nommer leurs fichiers de la même façon.
Il existe plusieurs librairies LiquidCrystal_I2C, pas forcément compatibles.
Dans ton exemple :
LiquidCrystal_I2C lcd(0x27, 20, 4);
Les paramètres sont
0x27 = adresse I2C
20 = nombres de colonnes
4 = nombre dde lignes
Or le constructeur de la classe LiquidCrystal_I2C de la librairie Newliquidcrystal_1.3.5 n'attend pas du tout ces paramètres.
adresse I2C
backlighPin
pol
Soit tu adoptes la librairie qui correspond à ton exemple, soit tu t'inspires d'un exemple de la librairie Newliquidcrystal_1.3.5.
On ne mélange pas.
Personnellement j'utilise celle-ci, qui fonctionnera probablement avec ton code.
Ensuite, si tu changes de librairie, tu vires la Newliquidcrystal_1.3.5, car ces messieurs les concepteurs ont eu la merveilleuse idée de nommer leurs fichiers de la même façon.
@+
D'accord merci pour les informations.
J'ai essayé avec la tienne comme tu as dis mais j'ai un autre message d'erreur:
C:\Users\JEAN-C~1\AppData\Local\Temp\ccH7VHx0.ltrans0.ltrans.o: In function `main':
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/main.cpp:43: undefined reference to `setup'
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/main.cpp:46: undefined reference to `loop'
La fonction setup() , même vide, est obligatoire dans tout programme Arduino.
La fonction loop() est obligatoire, même vide, dans tout programme.
Pour comprendre : les habitués du C seront surpris de ne pas trouver la classique fonction main() obligatoire dans tout programme C. En fait, la fonction setup() et la fonction loop() sont implémentées au sein de la fonction main() (Voir dans le répertoire arduino le fichier \hardware\cores\arduino\main.cxx) qui est appelée en premier lors de l'exécution de tout programme en C, langage sur lequel est basé le langage Arduino.
Dans ton cas, le setup doit prendre ces 3 lignes de ta fonction :
void setup()
{
Serial.begin(9600);
pinMode(pinBoutonB, INPUT); //On indique à l'Arduino le mode du pin (entrée)
pinMode(pinBoutonR, INPUT); //On indique à l'Arduino le mode du pin (entrée)
}
Tu peux même mettre l'appel de la fonction menu dans le setup et laisser la loop vide, c'est selon ton besoin. Le setup est exécuté une seule fois, la loop est exécutée en boucle ensuite sans arrêt.
D'accord dans mon cas je ne sais pas trop si je dois le mettre dans le setup ou dans la loop!
PAr contre j'ai juste un soucis du fait que j'ai changé la librairie.
Voilà le message d'erreur:
menu:19: error: 'Serial' does not name a type
Serial.begin(9600);
^
menu:20: error: expected constructor, destructor, or type conversion before '(' token
menu:25: error: expected constructor, destructor, or type conversion before ';' token
menu();
^
exit status 1
'Serial' does not name a type
Serial je l'utilisais avec la librairie d'avant mais avec la tienne celà ne fonctionne pas. J'ai bien essayé d'ouvrir la librairie afin de trouver à l'intérieur la syntaxe exacte mais je n'ai pas trouvé.
C'est bon j'ai trouvé mon erreur. Encore merci beaucoup pour ton aide.
Peux tu juste m'expliquer à quoi sert le Serial et #include <SoftwareSerial.h> stp?
Serial (lis ce lien) sert à définir la communication série entre l'Arduino et (par exemple) le PC. SoftwareSerial est une bibliothèque qui permet de construire une telle liaison quand on en veut plusieurs (pour communication bluetooth par exemple).
Je pense que ton erreur n'avait rien à voir avec SoftwareSerial : si l'ajout de cette bibliothèque l'a corrigé, c'est un hasard, et il peut cacher un problème plus important plus tard.
C'est bon j'ai trouvé mon erreur. Encore merci beaucoup pour ton aide.
Peux tu juste m'expliquer à quoi sert le Serial et #include <SoftwareSerial.h> stp?
lesept: Serial (lis ce lien) sert à définir la communication série entre l'Arduino et (par exemple) le PC. SoftwareSerial est une bibliothèque qui permet de construire une telle liaison quand on en veut plusieurs (pour communication bluetooth par exemple).
Je pense que ton erreur n'avait rien à voir avec SoftwareSerial : si l'ajout de cette bibliothèque l'a corrigé, c'est un hasard, et il peut cacher un problème plus important plus tard.
Non non ce n'est pas la bibliothèque qui a corrigé l'erreur jsute moi qui avait fait un oubli dans mon code. JE n'utilise pas cette bibliothèque, je t'ai jsute demandé car je ne l'ai jamais utilisé celle-ci c'est pour ça, afin de savoirà quoi elle sert.
La bibliothèque SofwareSerial permet d'émuler un UART (L'UART est le composant permettant la communication série). On peut par exemple s'en servir pour communiquer avec l'UART d'un composant lorsqu'on n'a plus de port série disponible. Ce qui n'est pas ton cas