lcd

j’ai un problème je ne peux pas afficher une valeur sur un lcd
avec ce code

#include <LiquidCrystal.h>
#include <DS3232RTC.h>
#include <Streaming.h>
#include <Time.h> 
#include <Wire.h>

boolean bp = 0;
boolean bp2= 0;
boolean bp3 = 0;
boolean etat1 = 0;
boolean etat2 = 0 ;
char hours = 0;
float minutes = 0;
char hoursd = 9;
float hourstt = 0;
float pourcent = 0;
long temps;
boolean e = 0;
boolean e2 = 0;



void setup()
{
   pinMode(A0 , INPUT);
   pinMode(A1 , INPUT);
   pinMode(A2, INPUT);
   temps = millis();
   Serial.begin(9600);
   LiquidCrystal lcd(12,11,5,4,3,2); //liaison 4 bits de données
   lcd.begin(16,2);
   lcd.print("hello world");
}
void loop ()
{
    bp = digitalRead(A0);
    bp2 = digitalRead(A1);
    bp3 = digitalRead(A2);

if(bp == HIGH) 
{
    e2 = 1;
    etat1 = 1;
    Serial.println("minuterie lancé");
}
if(etat1 == 1 && etat2 == 0)
{
  if(e2 == 1)
  {
  e2 = 0;
  }
  if(bp2 == HIGH)
{
  etat2 = 1;
  etat1 = 0;
  Serial.println("boucle cassé");
  Serial.println("bp2 appuyé ");
}
 Serial.print("millis");
 Serial.print(millis());
 Serial.print("     minutes");
 Serial.print(minutes);
 Serial.print("           hours");
 Serial.println(hours);
 Serial.print("temps:");
 Serial.println(temps);
 //delay(1000);
//  delay(60000);  METTRE MILLIS A LA PLACE 
if((millis()-temps)>60000) 
{
  minutes++;
  temps = millis();
}
}
  if(etat2 == 1)
 {
   e = 1;
   if(bp == HIGH)
   {
     etat2 = 0;
     etat1 = 1;
   }
   if(e == 1)
   {
   Serial.println("calcul en cour");
   minutes /=60;
   Serial.println(minutes);
   pourcent = minutes;
   pourcent *= 100;
   pourcent /= hoursd;
   Serial.print("pourcent:");
   Serial.println(pourcent);
   e = 0;
   etat2 = 0;
   }
 }
if(bp3 == HIGH)
{
   lcd.write(pourcent);
}
}

voilà l’erreur

Arduino : 1.6.3 (Windows 7), Carte : "Arduino Uno"

Les options de compilation ont été modifiées, tout sera recompilé

sketch_sep19b.ino: In function 'void loop()':

sketch_sep19b.ino:99:4: error: 'lcd' was not declared in this scope

Erreur lors de la compilation.

  Ce rapport contiendrait plus d'informations si l'option
  "Montrer les informations de sortie pendant la compilation"
  était activée dans Fichier > Préférences.

C’est parce que ta ligne

LiquidCrystal lcd(12,11,5,4,3,2); //liaison 4 bits de données

doit se trouver avant la partie void setup(), la ou tu déclare tes variables et librairie

merci mais avec ce code

#include <LiquidCrystal.h>
#include <DS3232RTC.h>
#include <Streaming.h>
#include <Time.h> 
#include <Wire.h>

boolean bp = 0;
boolean bp2= 0;
boolean bp3 = 0;
boolean etat1 = 0;
boolean etat2 = 0 ;
char hours = 0;
float minutes = 0;
char hoursd = 9;
float hourstt = 0;
float pourcent = 100;
char  pourcents = 0;
long temps;
boolean e = 0;
boolean e2 = 0;
LiquidCrystal lcd(12,11,5,4,3,2); //liaison 4 bits de données



void setup()
{
   pinMode(A0 , INPUT);
   pinMode(A1 , INPUT);
   pinMode(A2, INPUT);
   temps = millis();
   Serial.begin(9600);
   lcd.begin(16,2);
   lcd.print("hello world");
}
void loop ()
{
    bp = digitalRead(A0);
    bp2 = digitalRead(A1);
    bp3 = digitalRead(A2);

if(bp == HIGH) 
{
    e2 = 1;
    etat1 = 1;
    Serial.println("minuterie lancé");
}
if(etat1 == 1 && etat2 == 0)
{
  if(bp2 == HIGH)
{
  etat2 = 1;
  etat1 = 0;
  Serial.println("boucle cassé");
  Serial.println("bp2 appuyé ");
}
 Serial.print("millis");
 Serial.print(millis());
 Serial.print("     minutes");
 Serial.print(minutes);
 Serial.print("           hours");
 Serial.println(hours);
 Serial.print("temps:");
 Serial.println(temps);
 //delay(1000);
//  delay(60000);  METTRE MILLIS A LA PLACE 
if((millis()-temps)>60000) 
{
  minutes++;
  temps = millis();
}
}
  if(etat2 == 1)
 {
   e = 1;
   if(bp == HIGH)
   {
     etat2 = 0;
     etat1 = 1;
   }
   if(e == 1)
   {
   Serial.println("calcul en cour");
   minutes /=60;
   Serial.println(minutes);
  // pourcent = minutes;
  // pourcent *= 100;
  // pourcent /= hoursd;
   pourcents = pourcent ;
   Serial.print("pourcent:");
   Serial.println(pourcent);
   e = 0;
   etat2 = 0;
   }
 }
if(bp3 == HIGH)
{
   lcd.print("pourcents =");
   lcd.print(pourcents);
}
}

l’écran affiche des choses bizarres

Polua: l’écran affiche des choses bizarres

C'est à dire des choses bizarres?

1) Déjà tu fais pourcents = pourcent; tu affiches l'un sur le serial et l'autre sur le lcd, pour debugger affiche les 2 à la fois sur le LCD et sur le serial, voir si tout concorde.

2) et en plus de ça, pourcents et pourcent sont 2 variables qui ne sont pas du même type

oui des trucs bizarres comme 0.10001001 et oui je vais régler ça merci ! je tiens à préciser que le hello world n'est affiché qu'à moitié sur l'écran comme ça "hello, w " et ça s'arrête là !

Tu dois avoir la mauvaise librairie. J'ai du en télécharger des tas avant de trouver la bonne. Il faut qu'elle soit compatible avec ton IDE mais aussi avec ton écran LCD.

Bonne recherche...

mais c'est le lcd du kit arduino ! et la librairie c'est celle de l'IDE au départ ?

La lib est bonne, j'utilise la même avec un LCD 16,2, j'ai pas ce genre de soucis

As tu bien vérifier l'absence de faux contacts? Et avec un sketch hyper simpliste qui fait que afficher Hello world! et rien d'autre branché sur l'arduino, l'affichage est il correct?

non il me met comme avant "hello wo "

Polua: non il me met comme avant "hello wo "

bonjour ça donne quoi déjà avec juste un hello world pour le lcd ? https://www.arduino.cc/en/Tutorial/HelloWorld

non même avec ça j’obtiens
http://www.casimages.com/i/150920122248227644.jpg.html" title=“image.”

J'ai essayé différentes choses de chez moi pour essayer de reproduire ton bug, je n'y arrive pas

Avant de conclure à un défaut matériel, tu as essayé une liaison 8 bit?

non je vais m'y mettre !

Polua:
non même avec ça j’obtiens
http://www.casimages.com/i/150920122248227644.jpg.html" title=“image.”

plus d’affichage apres les 8 premiers caracteres qui sont affichés correctement, c’est pas bon signe
ça met hors de cause le cablage

donc c'est matériel mais j'avais déjà essayé il y a longtemps cette écran en 8bits je crois et il marchait très bien !

Polua: donc c'est matériel mais j'avais déjà essayé il y a longtemps cette écran en 8bits je crois et il marchait très bien !

pour faire simple avec un .setcursor lorsque tu affiche par programme "ABCDEFGH12345678" sur la premiere ligne et "87654321HGFEDCBA" sur la 2eme tu obtiens/vois quoi sur ton LCD ?

et tente la meme chose en déclarant ton LCD en 20X4 (vieux souvenir 8) ) avec 4 lignes à afficher ex 1234567890ABCDEFGHIJ J 1 ABCDEFGHIJKLMNOPQR R A