ecran-i2c-lcd.ino

Arduino Pro Mini · Fichier : ecran-i2c-lcd.ino · Langage : Arduino · Usage : Afficher des mesures sur un écran LCD 16x2 avec convertisseur I2C

Un écran LCD 16x2 équipé d'un convertisseur I2C PCF8574 n'occupe que deux broches (SDA/SCL). Le croquis affiche la tension mesurée sur A0 et le temps de fonctionnement, avec rafraîchissement deux fois par seconde.

Matériel requis

Une Arduino Pro Mini (ATmega328P, existe en 5 V/16 MHz et 3,3 V/8 MHz) reliée à un convertisseur USB-série (FTDI) ou un programmeur ICSP. 1 écran LCD 16x2 avec backpack I2C PCF8574 (adresse 0x27 ou 0x3F).

Câblage

SDA sur A4, SCL sur A5 (broches I2C des AVR), VCC 5V, GND. L'adresse I2C se vérifie avec un scanner (ex. i2c_scanner).

Fonctionnement

Wire pilote le bus I2C ; LiquidCrystal_I2C traduit print() en ordres LCD. setCursor positionne le curseur, les espaces finaux effacent les restes d'affichage.

Exécution

Choisissez « Arduino Pro Mini » dans l'IDE (5 V/16 MHz ou 3,3 V/8 MHz selon votre modèle), le processeur ATmega328P, le bon port, puis Téléverser. Le convertisseur doit être câblé DTR-DTR, RX-TX, TX-RX, VCC-VCC, GND-GND.

Variantes

Changez l'adresse (0x3F) si rien ne s'affiche, ou empilez plusieurs capteurs avec un défilement automatique des pages toutes les 5 s.

ecran-i2c-lcd.ino

// LCD 16x2 + convertisseur I2C PCF8574 : affichage de mesures.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2); // adresse usuelle 0x27 (0x3F sur certains)

void setup() {
  Serial.begin(9600);
  Wire.begin();
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Hello, monde !");
  delay(1500);
  lcd.clear();
}

void loop() {
  // Exemple : tension d'alimentation mesuree sur la reference interne.
  analogRead(A0); // rechauffe de l'ADC
  long brut = analogRead(A0);
  float tension = brut * 5.0 / 1023.0;

  lcd.setCursor(0, 0);
  lcd.print("A0:");
  lcd.print(tension, 2);
  lcd.print("V     "); // efface les chiffres residuels

  lcd.setCursor(0, 1);
  lcd.print("Uptime:");
  lcd.print(millis() / 1000);
  lcd.print("s    ");

  delay(500);
}

← Retour à la fiche