Programme avec algorithme et afficheur lcd

Même avec le programme Hello world, le texte s'affiche aléatoirement et parfois même pas en entier!

Cela peut-il être un problème de branchements ou d'écran?

Voici le programme

#include "LiquidCrystal.h"

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() { lcd.begin(20, 4);

}

void loop() {
  // Print a message to the LCD.
  lcd.print("hello, world!");
  delay (2000);
  lcd.clear();
  }

vérifies tes branchements les contacts des cables dans ta platine coté LCD, pas de soudures qui se touchent ?

Après 5 vérifications, aucun problème visible...

Sur les soudures du lcd, la pin 3 et la pin 4 semblent très proche, mais à l’œil nu, je dirais qu'elle ne se touche pas (je vais vérifier à la loupe). Serait-elle la cause de ce dérèglement?

Je viens de séparer clairement ces 2 pins et j'obtiens le même résultat... C'est décevant de ne pas réussir cette commande qui paraît si simple.

sur le LCD tu peux encore mettre D0,D1,D2,D3 à "GND" histoire de les "fixer"

OK je ferais ça et les pins 15 et 16?

Je viens d'essayer en reliant les pin GND, mais rien y fait le texte suit toujours son anarchie. J'ai également essayer avec un caractère. Cela doit venir du lcd, malheureusement!

Bon,je continue le projet et je dois maintenant insérer un clavier.

Je suis sur un tuto et je ne comprends pas cette ligne.

// création d'un objet keypad = initialisation clavier 
Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
// les broches de lignes sont automatiquement configurées en ENTREE avec pullup interne activé 
// les broches de colonnes sont automatiquement configurées en SORTIE

que dois-je mettre ici?

voici mon programme pour le moment (jusqu’au moment où je bloque):

#include <Keypad.h>
const byte LIGNES = 4;
const byte COLONNES = 3; 

const int C3=2
const int C2=3
const int C1=4
const int L4=16
const int L3=17
const int L2=18
const int L1=19

char touches [LIGNES] [COLONNES] = {
  {'1','2','3'},
  {'4','5','6'},
  {'6','7','8'},
  {'*','9','#'}
};

byte BrochesLignes[LIGNES] = {L1, L2, L3, L4};
byte BrochesColonnes[COLONNES] = {C1, C2, C3};

char touche;

Keypad clavier = Keypad(

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

}

void loop() {
  // put your main code here, to run repeatedly:

}

hello
broche ligne, broche colonne, ligne et colonne sont déclarées au dessus

compiles ça

#include <Keypad.h>
const byte LIGNES = 4;
const byte COLONNES = 3;

const int C3=2;
const int C2=3;
const int C1=4;
const int L4=16;
const int L3=17;
const int L2=18;
const int L1=19;

char touches [LIGNES] [COLONNES] = {
  {'1','2','3'},
  {'4','5','6'},
  {'6','7','8'},
  {'*','9','#'}
};

byte BrochesLignes[LIGNES] = {L1, L2, L3, L4};
byte BrochesColonnes[COLONNES] = {C1, C2, C3};

char touche;

Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );

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

}

void loop() {
  // put your main code here, to run repeatedly:

}

ok merci dfgh

Je viens de programmer, désormais mon clavier afin d’afficher ce que je souhaite; voici mon programme:

#include <LiquidCrystal.h>
#include <Keypad.h>
const byte LIGNES = 4;
const byte COLONNES = 3; 

const int C3=2;
const int C2=3;
const int C1=4;
const int L4=16;
const int L3=17;
const int L2=18;
const int L1=19;

char touches [LIGNES] [COLONNES] = {
  {'1','2','3'},
  {'4','5','6'},
  {'6','7','8'},
  {'*','9','#'}
}

byte BrochesLignes[LIGNES] = {L1, L2, L3, L4};
byte BrochesColonnes[COLONNES] = {C1, C2, C3};

char touche;

LiquidCrystal lcd(8, 9, 10, 11, 12, 13);

Keypad clavier = Keypad( makeKeymap (touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );

void setup() {
lcd.begin (16,2);
delay(10);  
}

void loop() {
touche = clavier.getKey();
if (touche != NO_KEY){
if (touche=='#') lcd.clear(); else lcd.print(touche);
delay(300);
}
}

Ce code m’a 'air bon pourtant on m’indique une erreur lors de la compilation :slightly_frowning_face: :

Arduino : 1.6.5 (Mac OS X), Carte : “Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)”

Clavier.ino:2:20: fatal error: Keypad.h: No such file or directory
compilation terminated.
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.

Avez-vous une idée??

Clavier.ino:2:20: fatal error: Keypad.h: No such file or directory

Il te dit que le fichier Keypad.h n'existe pas. As-tu bien installé cette librairie

Mais avec ça, j’inclus la librairie, si je ne me trompe pas:

#include <Keypad.h>

AntoineEiffel:
Mais avec ça, j’inclus la librairie, si je ne me trompe pas:

#include <Keypad.h>

avant de l’inclure il faut l’avoir installée
"Pour utiliser les librairies “hors référence” fournies par la communauté, il faut télécharger un fichier zip, le décompresser et copier le répertoire obtenu dans le répertoire /arduino-00xx/libraries/. La nouvelle librairie ainsi installée sera insérée dans un programme à l’aide de l’instruction #include. "

Dans l'IDE, tu vas dans : Croquis/Include Library/Manage Libraries Là, dans filter your search tu tapes keypad Tu sélectionnes la librairie en cliquant dessus et tu choisis Install

ok merci, je vais faire cela!

sinon, petite question concernant le contraste de mon lcd. Même à fond celui-ci fournit une luminosité médiocre. Est-ce que les pins 15 et 16 du lcd peuvent régler le problème?

#include <LiquidCrystal.h>
#include <Keypad.h>
const byte LIGNES = 4;
const byte COLONNES = 3; 

const int C3=2;
const int C2=3;
const int C1=4;
const int L4=16;
const int L3=17;
const int L2=18;
const int L1=19;

char touches [LIGNES] [COLONNES] = {
  {'1','2','3'},
  {'4','5','6'},
  {'6','7','8'},
  {'*','9','#'}
}

byte BrochesLignes[LIGNES] = {L1, L2, L3, L4};
byte BrochesColonnes[COLONNES] = {C1, C2, C3};

char touche;

LiquidCrystal lcd(8, 9, 10, 11, 12, 13);

Keypad clavier = Keypad( makeKeymap (touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );

void setup() {
lcd.begin (16,2);
delay(10);  
}

void loop() {
touche = clavier.getKey();
if (touche != NO_KEY){
if (touche=='#') lcd.clear(); 
else lcd.print(touche);
delay(300);
}
}

Voici mon programme, mais on me dit encore qu’il y a un problème au niveau de la déclaration byte:

Arduino : 1.6.5 (Mac OS X), Carte : “Arduino/Genuino Uno”

Clavier:21: error: expected ‘,’ or ‘;’ before ‘byte’
Clavier:28: error: ‘BrochesLignes’ was not declared in this scope
expected ‘,’ or ‘;’ before ‘byte’

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.

Il te dit qu'il manque un ; avant byte ligne 21. Effectivement tu n'as pas terminé la déclaration du tableau touches avec un point-virgule.

merci beaucoup, erreur de débutant, encore une fois!

salut

auriez-vous une librairie pour le servomoteur de ce prgm

#include "LiquidCrystal.h"
#include <Servo.h>
const int numRows = 4;
const int numCols = 20;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

unsigned long c = 300000000;
unsigned long u = 0;
unsigned long l = 0;
unsigned long n = 0;
unsigned long t = 0;

const int POS_MIN=550;
const int POS_MAX=2330;
const int broche_servo=8;
int position_servo=0;
Servo mon_servo;
int Reception=0;

void setup() {}

void loop () {
  
pinMode(13, OUTPUT);//lcd
pinMode(14, OUTPUT);//clavier
pinMode(15, OUTPUT);//servomoteur




delay(100);


lcd.begin (20,4);
delay (10);
unsigned long u = 200000000;
lcd.print ("VITESSE OBJET =");
delay (2000);
digitalWrite(1, HIGH);
lcd.setCursor (0,1);
lcd.print (u);
lcd.print(" m/s");
delay (2000);
unsigned long l = 30;
lcd.clear();
lcd.print ("LONGUEUR OBJET =");
delay (2000);
lcd.setCursor (0,1);
lcd.print (l);
lcd.print (" m");
delay (2000);
if(u>=300000000){
lcd.clear();
lcd.print ("VIT >= C");
delay (2000);
lcd.setCursor (0,1);
lcd.print ("INTERDIT!");
delay (2000);
}
else {
unsigned long n = l*sqrt(1-pow(u,2)/pow(c,2));
lcd.clear();
lcd.print  ("NOUV. L. OBJET =");
delay (2000);
lcd.setCursor (0,1);
lcd.print (n);
lcd.print (" m");
delay (2000);
}
delay(100);

Serial.begin(115200);
mon_servo.attach(broche_servo, POS_MIN, POS_MAX);
pinMode(broche_servo, OUTPUT);
mon_servo.write(position_servo);
delay(2000);
position_servo=map(n,0,l,0,180);
mon_servo.write(position_servo);

delay(200);
delay(100);

  }

La librairie servo est installée de base avec l'IDE. Quel est ton problème, ce code compile sans problème?

Il y a quand même des trucs étranges dans ton code. Le code d'initialisation est mélangé avec le code de l'application. Normalement, les pinMode(), le lcd.begin() et le servo.attach() devrait être dans le setup(). Tu as beaucoup de delay() dans ton loop() qui doit bloquer ton code pour plusieurs secondes.

concernant mon clavier, on m’indique un problème de téléchargement malgré la librairie que vous m’avez donné.

voici mon programme:

#include <LiquidCrystal.h>
#include <Keypad.h>
const byte LIGNES = 4;
const byte COLONNES = 3;

const int C3=10;
const int C2=9;
const int C1=8;
const int L4=2;
const int L3=3;
const int L2=4;
const int L1=5;

char touches [LIGNES] [COLONNES] = {
  {'1','2','3'},
  {'4','5','6'},
  {'6','7','8'},
  {'*','9','#'}
};

byte BrochesLignes[LIGNES] = {L1, L2, L3, L4};
byte BrochesColonnes[COLONNES] = {C1, C2, C3};

char touche;

LiquidCrystal lcd(8, 9, 10, 11, 12, 13);

Keypad clavier = Keypad( makeKeymap (touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );

void setup() {
lcd.begin (16,2);
delay(10); 
}

void loop() {
touche = clavier.getKey();
if (touche != NO_KEY){
if (touche=='#') lcd.clear();
else lcd.print(touche);
delay(300);
}
}

voici l’erreur qui est indiquée:

Arduino : 1.6.5 (Mac OS X), Carte : “Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)”

Multiple libraries were found for “Keypad.h”
Used: /Users/utilisateur/Documents/Arduino/libraries/Keypad-master
Not used: /Users/utilisateur/Documents/Arduino/libraries/Keypad

Le croquis utilise 4 236 octets (1%) de l’espace de stockage de programmes. Le maximum est de 253 952 octets.
Les variables globales utilisent 183 octets (2%) de mémoire dynamique, ce qui laisse 8 009 octets pour les variables locales. Le maximum est de 8 192 octets.
avrdude: ser_open(): can’t open device “/dev/cu.usbmodem621”: No such file or directory
ioctl(“TIOCMGET”): Inappropriate ioctl for device
ioctl(“TIOCMGET”): Inappropriate ioctl for device
avrdude: ser_send(): write error: Bad file descriptor
Problème de téléversement vers la carte. Voir http://www.arduino.cc/en/Guide/Troubleshooting#upload pour suggestions.

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.