Community project
Joystick LCD Counter
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.




