Table des matières:

Programme de dessin Arduino TFT : 4 étapes
Programme de dessin Arduino TFT : 4 étapes

Vidéo: Programme de dessin Arduino TFT : 4 étapes

Vidéo: Programme de dessin Arduino TFT : 4 étapes
Vidéo: DTMF Home Automation TFT LCD #Shorts #Arduino 2024, Juillet
Anonim
Programme de dessin Arduino TFT
Programme de dessin Arduino TFT
Programme de dessin Arduino TFT
Programme de dessin Arduino TFT
Programme de dessin Arduino TFT
Programme de dessin Arduino TFT

Cette instructable détaille le code qui entre dans la création d'un programme de dessin pour un écran Arduino TFT. Ce programme est unique, cependant, car il permet de sauvegarder un dessin sur la carte SD et de le charger plus tard pour faire plus de modifications !

Fournitures

  1. Arduino Uno - original ou un clone compatible
  2. Écran tactile TFT - J'ai utilisé un écran Elegoo, ce qui signifie que j'avais besoin de pilotes Elegoo.
  3. Carte de lecteur Micro SD - utilisée pour stocker les données de dessin sur une carte SD. Mon écran avait un lecteur intégré sous l'écran.
  4. Stylet - mon écran est venu avec un. Les ongles fonctionnent bien aussi.
  5. Carte Micro SD - pas plus de 32 Go, en raison des limitations de formatage exFAT (L'Arduino peut lire les cartes formatées FAT32 mais PAS exFAT. La plupart des cartes plus grandes sont formatées avec exFAT.). C'est le genre que vous mettriez dans un téléphone avec un stockage extensible.
  6. Ordinateur avec IDE Arduino
  7. Câble de programmation - USB A vers USB B. Mon Arduino est livré avec un.
  8. Adaptateur de carte SD - utilisé pour convertir la carte Micro SD en une carte SD normale à mettre dans la fente SD OU une carte qui connecte une carte SD à une fente USB.

Étape 1: Formatez la carte SD

Formater la carte SD
Formater la carte SD
Formater la carte SD
Formater la carte SD
  1. Prenez la carte Micro SD et connectez-la à votre ordinateur à l'aide de votre lecteur de carte SD
  2. Ouvrez l'explorateur de fichiers et recherchez la carte SD.
  3. Cliquez dessus avec le bouton droit et sélectionnez Formater.
  4. Définissez les options en fonction de la capture d'écran.
  5. Cliquez sur Démarrer.
  6. Éjectez la carte lorsque le processus est terminé.

Si vous n'exécutez pas Windows, essayez d'utiliser SD Formatter de l'association SD.

Étape 2: préparer l'Arduino

Préparer l'Arduino
Préparer l'Arduino
Préparer l'Arduino
Préparer l'Arduino
  1. Appuyez votre écran de protection sur l'Arduino, en prenant soin d'aligner les broches.
  2. Insérez la carte SD dans le lecteur sous l'écran.

Étape 3: Esquisse Arduino

Bien que la liste des pièces soit assez simple, il y a une tonne de code. Je vais le parcourir étape par étape ici.

#comprendre

#include #include #include #include

Elegoo_GFX, _TFTLCD et TouchScreen sont tous spécifiques au matériel. Si vous utilisez un écran différent, utilisez les bibliothèques fournies par le fabricant.

SPI et SD sont utilisés pour communiquer avec la carte SD. SPI est le protocole utilisé par le contrôleur de carte SD.

#ifdefined(_SAM3X8E_)#undef _FlashStringHelper::F(string_literal) #define F(string_literal) string_literal #endif

Ceci est également spécifique au matériel.

#define YP A3 // doit être une broche analogique#define XM A2 // doit être une broche analogique #define YM 9 #define XP 8

//Touchez pour le nouveau ILI9341 TP

#définir TS_MINX 120 #définir TS_MAXX 900 #définir TS_MINY 70 #définir TS_MAXY 920

#définir le CSPIN 10

#define LCD_CS A3

#définir LCD_CD A2 #définir LCD_WR A1 #définir LCD_RD A0 #définir LCD_RESET A4

Chacune de ces instructions #define oblige l'IDE à remplacer le nom par la valeur. Ici, ils définissent les broches d'E/S LCD et SD.

// Attribuez des noms à certaines valeurs de couleur 16 bits: #define BLACK 0x0000 #define WHITE 0xFFFF #define RED 0xF800 #define BLUE 0x001F #define GREEN 0x07E0

Ce sont quelques-unes des couleurs utilisées dans le code. Les #définir facilite la lecture du code.

#définir PENRADIUS 3

Ceci définit la taille du stylo de dessin.

#define MINPRESSURE 10#define MAXPRESSURE 1000

// Pour une meilleure précision de la pression, il faut connaître la résistance

// entre X+ et X- Utilisez n'importe quel multimètre pour le lire // Pour celui que j'utilise, ses 300 ohms sur la plaque X TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

Elegoo_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);

Ces instructions définissent la pression nécessaire pour enregistrer un toucher, initialiser la fonction tactile et démarrer l'écran.

Stockage de fichiers;int storageSize; int stoX = 1; int stoY = 1;

Ce sont des variables pour la partie stockage du programme.

void setup(void) { Serial.begin(9600); Serial.println("Programme de peinture");

tft.reset();

identifiant uint16_t = tft.readID();

if (identifiant == 0x0101) { identifiant = 0x9341; Serial.println(F("Pilote LCD 0x9341 trouvé")); }

//Démarrer l'écran

tft.begin(identifiant); tft.setRotation(2);

pinMode(13, SORTIE);

//Démarrer la carte SD

if (!SD.begin(CSPIN)) { Serial.println("Échec de l'initialisation SD"); revenir; } Serial.println("SD initialisé");

// Dessiner le fond

drawBackground(); }

La fonction de configuration démarre Serial si elle est disponible, réinitialise l'écran, détecte le pilote TFT, démarre l'écran, démarre la carte et appelle une fonction pour dessiner l'arrière-plan.

Je vais passer à la majeure partie de la fonction de boucle. Tout le reste est simplement utilisé pour piloter l'écran tactile.

//Détecter la pression d'écran et la stocker dans des variables if (p.z > MINPRESSURE && p.z < MAXPRESSURE) { // Échelle p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0); p.y = (tft.height() - map(p.y, TS_MINY, TS_MAXY, tft.height(), 0));

//Dessiner

if (p.y > 21) { //Enregistrer les données sur le stockage de la carte SD = SD.open("storage.txt", FILE_WRITE); storage.print(p.x); stockage.print(", "); stockage.println(p.y); stockage.close();

//Point à la position tactile

tft.fillCircle(p.x, p.y, PENRADIUS, BLANC); }

//Bouton Supprimer

if ((p.y 198) && (p.x < 219)) { deleteStorage(); }

//Charger l'action du bouton

if ((p.y 219)) { loadStorage(); } }

Si une presse est détectée, définissez des variables pour l'emplacement de la presse.

Ensuite, si la presse se trouve dans la zone de dessin, enregistrez le point sur la carte SD dans storage.txt et dessinez un cercle au point pressé, avec une taille et une couleur définies.

Ensuite, si la presse se trouve à l'emplacement du bouton de suppression, exécutez une fonction qui supprime le dessin stocké. Si vous utilisez un écran de taille différente, essayez de jouer avec les valeurs d'emplacement des boutons.

Ensuite, si la presse se trouve à l'emplacement du bouton de chargement, exécutez une fonction qui charge le dessin stocké. Si vous utilisez un écran de taille différente, essayez de jouer avec les valeurs d'emplacement des boutons.

Maintenant, je vais expliquer les fonctions.

La première fonction est appelée dans setup pour dessiner le fond et les boutons.

void drawBackground() { //Définir l'arrière-plan tft.fillScreen(BLACK);

//Peindre le texte

tft.setTextColor(BLANC); tft.setTextSize(3); tft.setCursor(0, 0); tft.println("Peinture");

//Bouton de chargement

tft.fillRect(219, 0, 21, 21, VERT);

//Bouton Effacer

tft.fillRect(198, 0, 21, 21, ROUGE); }

Il remplit l'écran en noir, écrit le mot Paint et dessine des carrés de couleur pour les boutons. Si vous utilisez un écran de taille différente, essayez de jouer avec les valeurs d'emplacement des boutons.

void deleteStorage() { //Supprimer le fichier SD.remove("storage.txt");

//Définir l'arrière-plan

tft.fillScreen(NOIR);

//Supprimer le texte de réussite

tft.setTextColor(BLANC); tft.setTextSize(2); tft.setCursor(0, 0); tft.println("storage.txt supprimé");

//Laisse l'utilisateur le lire

retard (2000);

//Continuer le dessin

drawBackground(); }

La fonction deleteStorage supprime storage.txt, remplit l'écran en noir et envoie un message de réussite pour la suppression. Il appelle ensuite la fonction drawBackground pour vous permettre de commencer à peindre autre chose.

void loadStorage() { //Évite les répétitions du délai des doigts lents (250);

//Vérification du fichier de stockage

if (!SD.exists("storage.txt")) { Serial.println("Pas de fichier storage.txt"); revenir; }

//Ouvrir le fichier en lecture seule

stockage = SD.open("storage.txt", FILE_READ);

// Tant qu'il y a des données, while (stoY > 0) { //Mise à jour des variables de position stoX = storage.parseInt(); stoY = stockage.parseInt();

//Puis à partir du stockage

tft.fillCircle(stoX, stoY, PENRADIUS, WHITE); } //Ferme le fichier storage.close(); }

Enfin, la fonction loadStorage recherche un fichier de stockage, l'ouvre en lecture seule, puis répète cette boucle:

Tant qu'il y a plus de données,

  1. Mettre à jour les variables de position avec les données analysées de storage.txt
  2. Tracer un cercle au point chargé

Lorsque la boucle se termine et qu'il n'y a plus de données, il ferme le fichier de stockage.

Le code de ce croquis se trouve ci-dessous. Il suffit de le télécharger, de l'ouvrir dans Arduino et de le télécharger sur votre carte !

Étape 4: Utilisation de ce programme

Utilisation de ce programme
Utilisation de ce programme

Branchez simplement votre Arduino à une source d'alimentation - ordinateur, batterie, verrue murale, etc. et commencez à dessiner. Pour effacer votre dessin et ses données stockées, appuyez sur le bouton rouge. Pour charger un dessin depuis le stockage et continuer à travailler dessus, cliquez sur le bouton vert. De cette façon, vous pouvez itérer plusieurs fois sur un dessin !

En guise d'extension, essayez de tracer le dessin sur votre ordinateur:

  1. Branchez la carte SD contenant les données sur votre ordinateur.
  2. Ouvrez storage.txt dans votre éditeur de texte/code préféré.
  3. Copiez toutes les valeurs dans storage.txt.
  4. Suivez ce lien vers un programme de pointage.
  5. Supprimez les deux exemples de points sur la gauche.
  6. Collez vos données là où se trouvaient les points d'exemple.

C'est un bon moyen de montrer vos dessins - essayez peut-être même de changer la couleur des points sur l'Arduino ou dans le traceur de points !

Les modifications sont les bienvenues et j'aimerais voir des suggestions dans les commentaires. Merci d'avoir jeté un coup d'œil à cela et j'espère que vous en trouverez de bonnes utilisations dans vos propres projets !

Conseillé: