#include <Wire.h>
#include <hd44780.h> // https://github.com/duinoWitchery/hd44780
#include <hd44780ioClass/hd44780_I2Cexp.h> // i2c expander i/o class header
#include <Toggle.h> // https://github.com/Dlloydev/Toggle
// LES 2 BOUTONS
const byte brochePlus = 2;
const byte brocheMoins = 3;
Toggle boutonPlus, boutonMoins;
// LE LCD
hd44780_I2Cexp lcd;
const int nbCols = 16;
const int nbLignes = 2;
// LE COMPTEUR
long compteur = 0;
const char unite[] = " mg";
const byte longueurUnite = sizeof unite - 1;
void afficherCompteur() {
static long compteurSurLCD = -100000;
const int tailleChampCompteur = 6;
char format[10]; // on fabrique dynamiquement le format de sprintf "%+ 6d", la notation * ne fonctionne pas sur UNO
char buffer[nbCols + 1]; // +1 pour le caractère nul de fin de chaîne
if (compteurSurLCD != compteur) {
snprintf(format, sizeof format, "%%+ %dd", tailleChampCompteur+1); // on fabrique un format avec la bonne dimension
snprintf(buffer, sizeof buffer, format, compteur);
lcd.setCursor(nbCols - tailleChampCompteur - longueurUnite, 0);
lcd.print(buffer);
compteurSurLCD = compteur;
}
}
void setup() {
Serial.begin(115200);
boutonPlus.begin(brochePlus);
boutonMoins.begin(brocheMoins);
int result = lcd.begin(nbCols, nbLignes);
if (result) {
Serial.print("LCD initialization failed: ");
Serial.println(result);
hd44780::fatalError(result);
}
lcd.clear();
lcd.print(F("Tare : "));
afficherCompteur(); // va positionner le curseur juste après le nombre
lcd.print(unite);
}
void loop() {
boutonPlus.poll();
if (boutonPlus.onPress()) {
compteur++;
afficherCompteur();
}
boutonMoins.poll();
if (boutonMoins.onPress()) {
compteur--;
afficherCompteur();
}
}