Bonjour
Eric 52 balais, électronicien, pas de connaissance en programmation hormis ce que j'ai appris depuis 3 mois.
Je me permet ce post, parce-que mes recherche sur le sujet n'ont rien donné.
Mon Soucis
J'ai testé un code avec une RTC DS3231 et un afficheur LCD 20 x 4 I2c
il fonctionne
J'ai testé un code avec un encodeur + bouton poussoir
il fonctionne
Mais lorsque j'ajoute le code de l'encodeur à celui de l'affichage de l'heure j'ai un souci.
Explication:
Si je met en remarque la partie affichage de la datte et l'heure, et que je tourne l'encodeur, l'afficheur affiche bien un chiffre qui s'incrémente ou décrémente en fonction du sens de rotation.
La fonction bouton poussoir de l'encodeur affiche bien "bouton appuyé"
Si je laisse le code complet, la fonction incrémentation décrémentation fonctionne très mal, saute des pas voir compte à l'envers.
Je pense que le programme est mal construit, mais quoi ?
En vous remerciant d'avance pour vos conseils
Eric
#include <RotaryEncoder.h>
RotaryEncoder encoder(A2, A3);
int valeur = 0;
int nouvellePosition = 0;
#include <Wire.h>
#include "RTClib.h"
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
RTC_DS3231 rtc;
void setup()
{
// switch sur PIN 7
pinMode(7, INPUT);
Serial.begin(9600);// vitesse bus serie 9600 bauds
Wire.begin(); // initialisation I2C
lcd.begin(20,4); // initialisation lcd
lcd.backlight(); //initialisé le retroéclairage lcd
}
void loop()
{
//Lire les informations de l'encodeur
static int pos = 0;
encoder.tick();
int nouvellePosition = encoder.getPosition();
//Si la position a changé, affichez la valeur dans le LCD
if (pos != nouvellePosition)
{
pos = nouvellePosition;
lcd.clear();
lcd.setCursor(3, 3);
lcd.print(nouvellePosition);
}
// Vérifier si le bouton est appuyé
valeur = digitalRead(7);
if (valeur != 1)
{
lcd.setCursor(2, 2);
lcd.print("Bouton appuye");
while (digitalRead(7) == 0) //attendre tant que le bouton est appuyé
delay(10);
lcd.clear();
}
afficheheureetdate(); //appeler la fonction afficher la date et l'heure si je mais cette ligne en remarque, l'encodeur fonctionne bien
}
void afficheheureetdate()
{
DateTime now = rtc.now();
lcd.setCursor(0, 0);
lcd.print("Heure");
lcd.setCursor(6, 0);
lcd.print(now.hour(), DEC);
lcd.setCursor(8, 0);
lcd.print(":");
lcd.setCursor(9, 0);
lcd.print(now.minute(), DEC);
lcd.setCursor(11, 0);
lcd.print(":");
lcd.print(now.second(), DEC);
lcd.setCursor(0, 1);
lcd.print("Date");
lcd.setCursor(6, 1);
lcd.print(now.day(), DEC);
lcd.setCursor(8, 1);
lcd.print(":");
lcd.setCursor(9, 1);
lcd.print(now.month(), DEC);
lcd.setCursor(11, 1);
lcd.print(":");
lcd.setCursor(12, 1);
lcd.print(now.year(), DEC);
}