This project builds a simple counter display using an Arduino Uno, a 16×2 LCD screen, and a joystick module. Move the joystick up or down to increment the counter, and press the joystick button to reset it to zero. The counter value updates in real-time on the LCD display.
The guide provides a complete wiring diagram showing how to connect the HD44780-compatible LCD, KY-023 joystick module, and supporting components to the Arduino. Assembly steps cover powering up the display, adjusting contrast with a potentiometer, connecting all data lines, and verifying connections before final power-on. Firmware code and a parts list are included.
Wiring diagram

Gather all the parts
Assemble it in 6 steps
1. Placez les pièces sans alimentation
Posez l’Arduino Uno, l’écran LCD 16×2, le module joystick KY-023, le potentiomètre de 10 kΩ et la résistance de 220 Ω sur la plaque d’essai. Gardez le câble USB débranché pendant tous les branchements.
- Repérez le repère « 1 » ou la première broche de l’écran : elle est habituellement du côté gauche quand vous regardez les caractères.
- L’écran et le joystick doivent partager les mêmes lignes 5V et GND de la plaque d’essai.
- Ne branchez pas l’USB pendant le câblage : un fil placé au mauvais endroit peut créer un court-circuit.
2. Alimentez l’écran et réglez son contraste
Reliez VSS de l’écran à GND et VDD à 5V (alimentation). Reliez RW à GND pour que l’écran reçoive uniquement des écritures. Sur le potentiomètre 10 kΩ, reliez une patte extérieure à 5V, l’autre patte extérieure à GND et la patte centrale à V0 de l’écran (réglage du contraste).
- Si aucun caractère n’est visible après la mise sous tension, tournez doucement la molette du potentiomètre : elle règle le contraste.
- Les deux pattes extérieures du potentiomètre peuvent être inversées ; cela change seulement le sens de rotation.
- Ne reliez pas VDD à GND : l’alimentation inversée peut endommager l’écran.
3. Branchez les fils de données de l’écran
Reliez RS de l’écran à D12 (commande), EN à D11 (validation), D4 à D5 (données), D5 à D4 (données), D6 à D3 (données) et D7 à D2 (données). Les broches D0 à D3 de l’écran ne sont pas utilisées dans ce montage à quatre fils de données.
- Les noms D4 à D7 près de l’écran ne correspondent pas aux numéros des broches Arduino : suivez chaque paire écrite dans cette étape.
- Utilisez des fils de couleurs différentes pour les six fils de commande et de données afin de pouvoir les vérifier facilement.
- Un seul fil de données décalé d’une broche peut faire apparaître des caractères illisibles, sans forcément abîmer l’écran.
4. Allumez le rétroéclairage de l’écran
Reliez 5V à une patte de la résistance 220 Ω, puis l’autre patte de la résistance à LED+ de l’écran (protection du rétroéclairage). Reliez LED− de l’écran à GND (retour).
- La résistance n’a pas de sens : ses deux pattes sont interchangeables.
- La résistance doit être en série entre 5V et LED+ ; ne reliez pas LED+ directement au 5V.
- Sans la résistance de 220 Ω, le rétroéclairage peut recevoir trop de courant et être endommagé.
5. Branchez le joystick
Reliez VCC du joystick à 5V (alimentation), GND à GND (ground), VRy à A1 (signal haut/bas), VRx à A0 (signal horizontal non utilisé par le programme) et SW à D8 (bouton de remise à zéro).
- Le programme utilise seulement le mouvement haut/bas ; le fil VRx vers A0 est présent pour raccorder complètement le module mais ne modifie pas le compteur.
- Le bouton intégré au joystick fonctionne quand vous appuyez verticalement sur le manche.
- Assurez-vous que VCC et GND ne sont pas inversés : une alimentation inversée peut endommager le module.
6. Vérifiez puis alimentez le montage
Vérifiez une dernière fois les lignes 5V et GND, puis branchez l’Arduino Uno à l’ordinateur avec son câble USB. L’écran doit afficher « Compteur: » puis « Valeur: 0 ». Poussez le joystick vers le haut ou le bas, ramenez-le au centre entre deux mouvements, et appuyez dessus pour revenir à zéro.
- Si l’écran est éclairé mais vide, réglez d’abord la molette de contraste.
- Le programme est déjà associé au montage : utilisez le bouton Deploy de Schematik pour le compiler et le téléverser.
- Si l’écran chauffe, débranchez immédiatement l’USB et vérifiez surtout VDD, VSS, LED+ et LED−.
Review all connections
1. Connections between "lcd_16x2" and "Arduino"
2. Connections between "joystick" and "Arduino"
3. Connections between "contrast_pot" and "Arduino"
4. Connections between "backlight_resistor" and "Arduino"
Deploy the firmware
#include <Arduino.h>
#include <LiquidCrystal.h>
// LCD: RS, EN, D4, D5, D6, D7
// Forward declarations
void afficherCompteur();
const uint8_t LCD_RS = 12;
const uint8_t LCD_EN = 11;
const uint8_t LCD_D4 = 5;
const uint8_t LCD_D5 = 4;
const uint8_t LCD_D6 = 3;
const uint8_t LCD_D7 = 2;
LiquidCrystal lcd(LCD_RS, LCD_EN, LCD_D4, LCD_D5, LCD_D6, LCD_D7);
const uint8_t JOYSTICK_Y_PIN = A1;
const uint8_t JOYSTICK_SW_PIN = 8;
const int SEUIL_HAUT = 300;
const int SEUIL_BAS = 700;
int compteur = 0;
bool joystickHorsCentre = false;
bool boutonEtaitAppuye = false;
int derniereValeurAffichee = 32767;
void afficherCompteur() {
if (compteur == derniereValeurAffichee) {
return;
}
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("Valeur: ");
lcd.print(compteur);
derniereValeurAffichee = compteur;
}
void setup() {
lcd.begin(16, 2);
pinMode(JOYSTICK_SW_PIN, INPUT_PULLUP);
lcd.setCursor(0, 0);
lcd.print("Compteur:");
afficherCompteur();
}
void loop() {
const int yVal = analogRead(JOYSTICK_Y_PIN);
const bool boutonAppuye = digitalRead(JOYSTICK_SW_PIN) == LOW;
// A press resets once; holding the stick down does not repeatedly reset it.
if (boutonAppuye && !boutonEtaitAppuye) {
compteur = 0;
afficherCompteur();
}
boutonEtaitAppuye = boutonAppuye;
// Count once when the stick first leaves its central zone.
if (!joystickHorsCentre) {
if (yVal < SEUIL_HAUT) {
compteur++;
joystickHorsCentre = true;
afficherCompteur();
} else if (yVal > SEUIL_BAS) {
compteur--;
joystickHorsCentre = true;
afficherCompteur();
}
} else if (yVal >= SEUIL_HAUT && yVal <= SEUIL_BAS) {
joystickHorsCentre = false;
}
delay(50);
}Remix this project
Make it yours in one click
Open a full copy of this project in your own Schematik workspace, diagram, code, parts, and assembly steps included. Swap the sensor, add features, or redesign the whole thing with AI. The author's original stays untouched.




