Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Créer des animations et jeux sur LCD avec Arduino UNO

Composants et fournitures

Arduino UNO × 1
Écran LCD alphanumérique 16×2 × 1

Applications et services en ligne

À propos de ce projet

Ce tutoriel couvre les bases de l'animation sur un écran LCD 16×2 avec Arduino. Les principes s'appliquent à d'autres dimensions d'écrans.

Câblage du LCD

Le schéma ci-dessus montre les connexions :

Broche LCDConnexion
1 : VSSRail + du breadboard (5 V Arduino)
2 : VDDRail – du breadboard (GND Arduino)
3 : VO (contraste)Curseur du potentiomètre (extrémités sur rails + et –)
4 : RSBroche Arduino 12
5 : R/WRail – (masse)
6 : EBroche Arduino 11
15 : A (anode rétroéclairage)Rail + via résistance 220 Ω
16 : K (cathode rétroéclairage)Rail –

N.connectez pas encore les broches de données. Mettez sous tension : la ligne du bas doit s'allumer. Sinon, vérifiez soudures et câblage.

Si l'écran s'allume, connectez les broches de données :

Téléversez le code test :

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 4, 5, 6, 7); // rs, e, d4, d5, d6, d7
void setup() {
  lcd.begin(16, 2);
  lcd.setCursor(0, 1);
  lcd.print("Working");
}
void loop() {}

Si des caractères aléatoires apparaissent ou rien ne s'affiche : ajustez le contraste, vérifiez les soudures des broches de données (pas de court-circuit), et contrôlez que les numéros de broches dans le code correspondent au câblage.

Si « Working » s'affiche, le câblage est réussi.

Explication du code de test

Texte défilant (scrolling)

Seules setup() et loop() changent :

void setup() { lcd.begin(16,2); }
void loop() {
  int n = 15;
  char message[] = "scrolling text!";
  char* ptr = message;
  while(n != -14) {
    lcd.clear();
    lcd.setCursor(n, 1);
    if(n < 0) ptr++;
    lcd.print(ptr);
    n--;
    delay(250);
  }
}

Le pointeur ptr avance pour afficher la portion visible du message quand le début sort de l'écran à gauche. La bibliothèque gère la sortie à droite. Ajustez delay(250) pour la vitesse.

Caractères personnalisés

On définit un octet par ligne (1 = pixel allumé, 0 = éteint) :

byte dino[] = {
  B01110, B01110, B01100, B01111,
  B11101, B01010, B01010, B01010
};

Créez les vôtres ici : LCD Character Creator.

Pour les afficher :

void setup() {
  lcd.createChar(0, dino);
  lcd.begin(16,2);
  lcd.setCursor(0,1);
  lcd.write(byte(0));
}

createChar(0, dino) enregistre le caractère à l'index 0. lcd.write(byte(0)) l'affiche.

Animation : flèches tirées

Trois caractères personnalisés (pointe, corps, queue) simulent une flèche en mouvement :

byte arrowhead[] = { B00001, B00011, B00111, B01111, B00111, B00011, B00001, B00000 };
byte arrowbody[] = { B00000, B00000, B00000, B11111, B11111, B00000, B00000, B00000 };
byte arrowtail[] = { B00011, B00111, B11111, B11111, B11111, B00111, B00011, B00000 };

void setup() {
  lcd.createChar(0, arrowhead);
  lcd.createChar(1, arrowbody);
  lcd.createChar(2, arrowtail);
  lcd.begin(16,2);
}
void loop() {
  int n = 15;
  while(n != -1) {
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.write(byte(0));
    lcd.write(byte(1));
    lcd.write(byte(2));
    n--;
    delay(50);
  }
}

Un léger « trainée » peut apparaître derrière la queue – c'est normal (rémanence de l'affichage).

Jeu sur LCD : esquive les flèches

Objectif : Un héros (bonhomme) sur la ligne 1 (index 1) doit éviter des flèches qui défilent. Appuyez sur un bouton (broche 2) pour sauter sur la ligne 0. Le score s'incrémente à chaque frame et s'affiche en haut à droite. Si une flèche touche le héros : Game Over.

Le code complet (avec interruptions et génération aléatoire) est fourni dans la section Code. Points clés :

Code

Animation (flèches)

#include <LiquidCrystal.h>
const int rs=12, en=11, d4=4, d5=5, d6=6, d7=7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

byte arrowhead[] = { B00001, B00011, B00111, B01111, B00111, B00011, B00001, B00000 };
byte arrowbody[] = { B00000, B00000, B00000, B11111, B11111, B00000, B00000, B00000 };
byte arrowtail[] = { B00011, B00111, B11111, B11111, B11111, B00111, B00011, B00000 };
byte man[]       = { B01110, B01110, B00100, B01110, B10101, B00100, B01010, B10001 };

void setup() {
  lcd.createChar(0, arrowhead);
  lcd.createChar(1, arrowbody);
  lcd.createChar(2, arrowtail);
  lcd.createChar(3, man);
  lcd.begin(16,2);
}
void loop() {
  int n = 15;
  while(n != -1) {
    lcd.clear();
    delay(10);
    lcd.setCursor(0,0);
    lcd.print("by Debanshu Das");
    delay(65);
    n--;
  }
}

Jeu complet

#include <LiquidCrystal.h>
const int rs=12, en=11, d4=4, d5=5, d6=6, d7=7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

int level = 1;
int score = 0;
byte arrowhead[] = { B00001, B00011, B00111, B01111, B00111, B00011, B00001, B00000 };
byte arrowbody[] = { B00000, B00000, B00000, B11111, B11111, B00000, B00000, B00000 };
byte arrowtail[] = { B00011, B00111, B11111, B11111, B11111, B00111, B00011, B00000 };
byte man[]       = { B01110, B01110, B00100, B01110, B10101, B00100, B01010, B10001 };

void setup() {
  lcd.createChar(0, arrowhead);
  lcd.createChar(1, arrowbody);
  lcd.createChar(2, arrowtail);
  lcd.createChar(3, man);
  lcd.begin(16,2);
  attachInterrupt(0, buttonin, CHANGE);
  randomSeed(analogRead(A0));
}

int n;
void loop() {
  n = 15;
  int rnd = random(15,25);
  while(n != -1) {
    lcd.clear();
    delay(10);
    drawman();
    lcd.setCursor(n,1);
    if(n == 1 && level == 1) { stopgame(); continue; }
    lcd.write(byte(0));
    lcd.write(byte(1));
    lcd.write(byte(2));
    lcd.setCursor(10,0);
    lcd.print(score);
    delay(100 - rnd);
    n--;
    score++;
    if(level == 0) score--;
  }
}
void drawman() { lcd.setCursor(1, level); lcd.write(byte(3)); }
void buttonin() { level = (digitalRead(2) == LOW) ? 0 : 1; }
void stopgame() {
  lcd.clear();
  lcd.setCursor(0,0); lcd.print("Game over");
  lcd.setCursor(10,0); lcd.print(score);
  level = 1; score = 0; n = 15;
  delay(3000);
}

Schéma

Créer des animations et jeux sur LCD avec Arduino UNO

Processus de fabrication

  1. Capteurs Arduino : Types, Applications et Projets Réels
  2. Construire une console de jeu portable Arduboy DIY (Arduino Micro + PCB)
  3. Construire un Voltmètre Intelligent avec Arduino et Smartphone – Projet DIY Facile
  4. Enregistreur de Température et Humidité Arduino avec DHT11 et Shield Ethernet
  5. Contrôle Arduino UNO depuis Python 3 – Communication Série et Démo LED
  6. Automates Cellulaires Temps Réel sur Arduino avec Écran OLED 128x64
  7. Construire une Radio FM Compacte avec Arduino Nano et RDA5807M
  8. Construire une Station Météo Arduino Fiable avec Capteurs DHT
  9. Construisez un jeu d'arcade LCD classique avec Arduino, buzzer et joystick