Saisie de texte à l'aide d'un encodeur Arduino

Ce mini projet Arduino permet de créer du texte (variable String) avec le module encodeur et de le stocker dans la RAM du microcontrôleur. Vous pouvez utiliser le code dans vos propres programmes, par exemple pour écrire des informations dans l’EEPROM (mémoire morte programmable effaçable électriquement) ou pour créer un fichier sur une carte SD. Pour ce mini-projet, il suffit de connecter l’encodeur à la carte sans utiliser l’afficheur 16×2 i2c.


Ce dont vous aurez besoin

Matériel supplémentaire sur ce sujet:

  1. Comment faire caractère spécial sur LCD 1602
  2. Arrays Arduino IDE: tableaux de aractères
  3. Arduino Game « Dinosaur » sur afficheur LCD 1602

Saisie de texte avec un encodeur rotatif

Saisie de texte avec un encodeur rotatif
Saisie de texte avec un encodeur rotatif
Encoder Arduino Uno Arduino Nano Arduino Mega
GND GND GND GND
+ 5V 5V 5V
SW 6 6 6
DT 4 4 4
CLC 2 2 2

Pour le premier programme d’exemple, connectez l’encodeur rotatif (ky-040) à l’Arduino selon le schéma ci-dessus et installez la bibliothèque RotaryEncoder.h. La bibliothèque peut être téléchargée sur notre site Internet arduino-spain.site. Toutes les informations seront affichées sur le moniteur du port Arduino IDE. Et la chaîne finale sera stockée dans la variable String stroka. La plupart des paramètres du programme peuvent être modifiés à volonté.

Programme Arduino saisie de texte avec un encodeur

#include "RotaryEncoder.h"
RotaryEncoder encoder(4, 2);  // (DT, CLK)
#define SW 6                              // SW

byte scale = 5;

char massiv[39] = {
  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'G', 'K', 'L', 'M',
  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
  ' ', '-', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
};

String simvol;
String stroka;
byte w;
int pos;
int newPos;
boolean buttonWasUp = true;

void setup() {
   Serial.begin(9600);
   pinMode(SW, INPUT_PULLUP);

   simvol = massiv[pos];
   Serial.println(simvol);
}

void loop() {

   while (w < scale) {
     encoder.tick(); newPos = encoder.getPosition();

     if (newPos > 38) { encoder.setPosition(0); }
     if (newPos < 0) { encoder.setPosition(38); }

     if (pos != newPos && newPos <= 38 && newPos >= 0) {
        pos = newPos;
        simvol = massiv[pos];
        Serial.println(simvol);
     }

     boolean buttonIsUp = digitalRead(SW);
     if (buttonWasUp && !buttonIsUp) {
        delay(10);
        buttonIsUp = digitalRead(SW);
        if (!buttonIsUp) {
           w = w + 1;
           stroka = stroka + simvol;
           Serial.println(stroka);
           encoder.setPosition(0);
      }
    }
    buttonWasUp = buttonIsUp;
   }

   Serial.println(stroka);
   delay(1000);
}

Explication du code saisie de texte avec un encodeur:

  1. le tableau char massiv contient 39 caractères, dont la numérotation commence à zéro. Par exemple, la position « 0 » du codeur correspond au caractère « A »;
  2. la boucle while est exécutée 5 fois dans le programme Arduino – ceci est spécifié dans la variable byte scale, qui est responsable de la longueur finale de la chaîne entière.

Création de variables String avec un encodeur

Création String avec un encodeur rotatif
Création de variables String avec un encodeur rotatif
LCD 1602 i2c Arduino Uno Arduino Nano Arduino Mega
GND GND GND GND
VCC 5V 5V 5V
SDA A4 A4 20
SCL A5 A5 21

Dans l’exemple de programme suivant, la fonction d’utilisation de l’affichage pour la sortie de caractères et de lignes a été ajoutée. Si nécessaire, le codeur peut être connecté à d’autres ports (y compris les broches analogiques du microcontrôleur) en apportant les modifications nécessaires au croquis. Connectez l’écran et le codeur 1602 à l’Arduino Uno selon le schéma ci-dessus et chargez la deuxième version du programme sur la carte Arduino.

Programme Arduino création String avec un encodeur rotatif

#include "Wire.h"
#include "LiquidCrystal_I2C.h"
LiquidCrystal_I2C LCD(0x27,20,2);

#include "RotaryEncoder.h"
RotaryEncoder encoder(4, 2);  // DT, CLK
#define SW 6                              // SW

byte scale = 5;

char massiv[39] = {
  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'G', 'K', 'L', 'M',
  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
  ' ', '-', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
};

String simvol;
String stroka;
byte w;
int pos;
int newPos;
boolean buttonWasUp = true;

void setup() {
   LCD.init();
   LCD.backlight();
   pinMode(SW, INPUT_PULLUP);

   simvol = massiv[pos];
   LCD.setCursor(w, 0);
   LCD.print(simvol);
}

void loop() {

   while (w < scale) {
     encoder.tick(); newPos = encoder.getPosition();

     if (newPos > 38) { encoder.setPosition(0); }
     if (newPos < 0) { encoder.setPosition(38); }

     if (pos != newPos && newPos <= 38 && newPos >= 0) {
        pos = newPos;
        simvol = massiv[pos];
        LCD.setCursor(w, 0);
        LCD.print(simvol);
     }

     boolean buttonIsUp = digitalRead(SW);
     if (buttonWasUp && !buttonIsUp) {
        delay(10);
        buttonIsUp = digitalRead(SW);
        if (!buttonIsUp) {
           w = w + 1;
           stroka = stroka + simvol;
           encoder.setPosition(0);
           LCD.setCursor(w, 0);
           LCD.print(simvol);
      }
    }
    buttonWasUp = buttonIsUp;
    }

   LCD.clear();
   LCD.setCursor(0, 0);
   LCD.print("ITOG:");
   LCD.setCursor(0, 1);
   LCD.print(stroka);
   delay(1000);
}

Explication du code création String avec un encodeur:

  1. la variable w dans ce programme est responsable non seulement de la sortie de la boucle while, mais aussi de la position du curseur sur l’écran ligne 1602;
  2. lorsque le bouton de l’encodeur est pressé, la variable w est incrémentée, le caractère est stocké dans une chaîne de caractères et la position de l’encodeur est mise à zéro.

Conclusion. Saisie de texte avec un encodeur rotatif. Utilisez la fonction delay Arduino dans le langage de programmation. Ce code peut être mis en œuvre dans vos projets lorsque vous avez besoin de créer une variable texte. Si vous avez des questions sur ce mini-projet ou des ajouts, vous pouvez les laisser dans les commentaires de ce post.





2 Replies to “Saisie de texte à l’aide d’un encodeur Arduino”

  1. Bonjour,Admin

    Tu fais ce projet où il faut faire un code spécial pour que sur l’écran si c’est le bon code ça affiche soit verrouillé ou déverrouillé.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. Découvrez comment les données de vos commentaires sont traitées.