Je ne comprends pas ce qui se passe !
J'ai branché un afficheur LCD 4x16 caractères sur une carte Arduino mega 2560
=> pas de problème (si ce n'est un décalage de 4 caractères pour les lignes 3 et 4 => il faut mettre -4 pour les colonnes).
voici le code qui fonctionne :
// --- Programme Arduino ---
// --- Que fait ce programme ? ---
/* Affiche des messages texte sur l'afficheur LCD*/
// --- Fonctionnalités utilisées ---
// Utilise un afficheur LCD 4x16 en mode 4 bits
// --- Circuit à réaliser ---
// Connexion du LCD sur les broches de la carte Arduino
// Connecter broche RS du LCD sur la broche 2
// Connecter broche E du LCD sur la broche 3
// Connecter broche D4 du LCD sur la broche 4
// Connecter broche D5 du LCD sur la broche 5
// Connecter broche D6 du LCD sur la broche 6
// Connecter broche D7 du LCD sur la broche 7
//**************** Entête déclarative *******
// A ce niveau sont déclarées les librairies, les constantes, les variables...
// --- Inclusion des librairies utilisées ---
#include <LiquidCrystal.h> // Inclusion de la librairie pour afficheur LCD
// --- Déclaration des constantes ---
// --- constantes des broches ---
const int RS=2; //declaration constante de broche
const int E=3; //declaration constante de broche
const int D4=4; //declaration constante de broche
const int D5=5; //declaration constante de broche
const int D6=6; //declaration constante de broche
const int D7=7; //declaration constante de broche
// --- Déclaration des variables globales ---
// --- Initialisation des fonctionnalités utilisées ---
LiquidCrystal lcd(RS, E, D4, D5, D6, D7);// initialisation LCD en mode 4 bits
//**************** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme
void setup() { // debut de la fonction setup()
// --- ici instructions à exécuter au démarrage ---
lcd.begin(16,4); // Initialise le LCD avec 16 colonnes x 4 lignes
delay(10); // pause rapide pour laisser temps initialisation
// Test du LCD
lcd.print("TEST LCD 4x16") ; // affiche la chaîne texte - message de test
delay(2000); // pause de 2 secondes
} // fin de la fonction setup()
// ********************************************************************************
//*************** FONCTION LOOP = Boucle sans fin = coeur du programme *************
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension
void loop(){ // debut de la fonction loop()
lcd.setCursor(0, 1) ; // 1ère col - 2ème ligne - positionne le curseur à l'endroit voulu (colonne, ligne) (1ère colonne =0, 2ème ligne=1 !)
lcd.print("Salut...") ; // affiche la chaîne texte - message de test
delay(2000); // pause de 2 secondes
lcd.setCursor(-4, 2) ; // 1ère col - 2ème ligne - positionne le curseur à l'endroit voulu (colonne, ligne) (1ère colonne =-4, 3ème ligne=2 !)
lcd.print("essais affichage") ; // affiche la chaîne texte - message de test
delay(2000); // pause de 2 secondes
lcd.setCursor(-4, 3) ; // 1ère col - 2ème ligne - positionne le curseur à l'endroit voulu (colonne, ligne) (1ère colonne =-4, 4ème ligne=3 !)
lcd.print("LCD 4x16 carac.") ; // affiche la chaîne texte - message de test
delay(2000); // pause de 2 secondes
lcd.clear(); // // efface écran et met le curseur en haut à gauche
delay(10); // pour laisser temps effacer écran
// --- ici instructions à exécuter par le programme principal ---
} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
Ensuite j'ai branché mon horloge RTC DS1307 tout fonctionne, sauf pour l'affichage, où la ligne 4 vient se positionner à la ligne 2.
J'ai fait différents essais => j'ai toujours le même problème.
Voici le code pour l'affichage avec l'horloge :
Affichage date et heure sur afficheur LCD 4x16
Real Time Clock DS1307
*/
#include <WProgram.h> // nécessaire (je ne sais pas pourquoi !!!)
#include <Wire.h> // librairie I2C
#include <DS1307.h> // librairie pour RTC DS1307
#include <LiquidCrystal.h> // librairie pour afficheur LCD
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); // mode 4 bits - RW non connectée
// rs = broche 4 LCD => broche 2 Arduino
// enable = broche 6 LCD => broche 3 Arduino
// d4 = broche 11 LCD => broche 4 Arduino
// d5 = broche 12 LCD => broche 5 Arduino
// d6 = broche 13 LCD => broche 6 Arduino
// d7 = broche 17 LCD => broche 7 Arduino
int rtc[7]; // déclaration d'un tableau de 7 entiers
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2); // afficheur 16 colonnes, 2 lignes
lcd.clear(); // efface LCD
lcd.setCursor(0,0); // positionne curseur colonne 0, ligne 0
lcd.print("TEST LCD + RTC");
// Décommenter la partie suivante et mettez vos valeurs pour initialiser l'horloge
/*
RTC.stop();
RTC.set(DS1307_SEC,0); // Secondes
RTC.set(DS1307_MIN,15); // Minutes
RTC.set(DS1307_HR,11); // Heures
RTC.set(DS1307_DOW,6); // Jour de la semaine
RTC.set(DS1307_DATE,10); // Jour du mois
RTC.set(DS1307_MTH,03); // Mois
RTC.set(DS1307_YR,12); // Année
RTC.start();
*/
}
void loop()
{
RTC.get(rtc,true);
for(int i=0; i<7; i++)
{
Serial.print(rtc[i]); // lecture donnée RTC DS 1307
Serial.print(" ");
}
Serial.println();
//lcd.clear(); // efface LCD
lcd.setCursor(0, 1); // positionne curseur colonne 0, ligne 2
// affichage jour
if (rtc[4]<10)
{
lcd.print("0");
}
lcd.print(rtc[4]);
lcd.print("/");
// affichage mois
if (rtc[5]<10)
{
lcd.print("0");
}
lcd.print(rtc[5]);
lcd.print("/");
lcd.print(rtc[6]);
lcd.setCursor(-4, 2); // positionne curseur colonne 0, ligne 3
// affichage heures
if (rtc[2]<10)
{
lcd.print("0");
}
lcd.print(rtc[2]);
lcd.print(":");
// affichage minutes
if (rtc[1]<10)
{
lcd.print("0");
}
lcd.print(rtc[1]);
lcd.print(":");
// affichage secondes
if (rtc[0]<10)
{
lcd.print("0");
}
lcd.print(rtc[0]);
lcd.setCursor(-4, 3); // positionne curseur colonne 0, ligne 4
lcd.print("ver. 0.0 03/12");
delay(500); // attente 0,5 sec.
}
Si quelqu'un avait une idée, ou a déjà rencontré ce problème.
Merci pour votre aide.