Table des matières:
2025 Auteur: John Day | [email protected]. Dernière modifié: 2025-01-23 14:45
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
- Arduino Uno - original ou un clone compatible
- Écran tactile TFT - J'ai utilisé un écran Elegoo, ce qui signifie que j'avais besoin de pilotes Elegoo.
- 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.
- Stylet - mon écran est venu avec un. Les ongles fonctionnent bien aussi.
- 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.
- Ordinateur avec IDE Arduino
- Câble de programmation - USB A vers USB B. Mon Arduino est livré avec un.
- 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
- Prenez la carte Micro SD et connectez-la à votre ordinateur à l'aide de votre lecteur de carte SD
- Ouvrez l'explorateur de fichiers et recherchez la carte SD.
- Cliquez dessus avec le bouton droit et sélectionnez Formater.
- Définissez les options en fonction de la capture d'écran.
- Cliquez sur Démarrer.
- É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
- Appuyez votre écran de protection sur l'Arduino, en prenant soin d'aligner les broches.
- 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,
- Mettre à jour les variables de position avec les données analysées de storage.txt
- 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
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:
- Branchez la carte SD contenant les données sur votre ordinateur.
- Ouvrez storage.txt dans votre éditeur de texte/code préféré.
- Copiez toutes les valeurs dans storage.txt.
- Suivez ce lien vers un programme de pointage.
- Supprimez les deux exemples de points sur la gauche.
- 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é:
Robot Arduino 5 en 1 - Suivez-moi - Suivi de ligne - Sumo - Dessin - Éviter les obstacles : 6 étapes
Robot Arduino 5 en 1 | Suivez-moi | Suivi de ligne | Sumo | Dessin | Éviter les obstacles : cette carte de commande de robot contient un microcontrôleur ATmega328P et un pilote de moteur L293D. Bien sûr, elle n'est pas différente d'une carte Arduino Uno mais elle est plus utile car elle n'a pas besoin d'un autre shield pour piloter le moteur ! Il est sans saut
Utilisation d'un robot de dessin pour Arduino avec les didacticiels Hour of Code : 3 étapes
Utilisation d'un robot de dessin pour Arduino avec des didacticiels Hour of Code : j'ai créé un robot de dessin Arduino pour un atelier visant à aider les adolescentes à s'intéresser aux sujets STEM (voir https://www.instructables.com/id/Arduino-Drawing-Robot/ ). Le robot a été conçu pour utiliser des commandes de programmation de style Tortue telles que forward(distanc
Robot de dessin pour Arduino : 18 étapes (avec photos)
Robot de dessin pour Arduino : Remarque : j'ai une nouvelle version de ce robot qui utilise une carte de circuit imprimé, est plus facile à construire et dispose d'une détection d'obstacle IR ! Découvrez-le sur http://bit.ly/OSTurtleJ'ai conçu ce projet pour un atelier de 10 heures pour ChickTech.org dont le but est d'i
Traceur CNC Arduino (MACHINE À DESSIN): 10 étapes (avec photos)
Traceur CNC Arduino (MACHINE À DESSIN) : Hé les gars ! J'espère que vous avez déjà apprécié mon précédent instructable "Comment créer votre propre plate-forme de formation Arduino" et vous êtes prêt pour un nouveau, comme d'habitude j'ai fait ce tutoriel pour vous guider pas à pas tout en faisant ce genre de super incroyable
Robot de dessin à faible coût et compatible Arduino : 15 étapes (avec photos)
Robot de dessin à faible coût, compatible Arduino : Remarque : j'ai une nouvelle version de ce robot qui utilise une carte de circuit imprimé, est plus facile à construire et dispose d'une détection d'obstacle IR ! Découvrez-le sur http://bit.ly/OSTurtleJ'ai conçu ce projet pour un atelier de 10 heures pour ChickTech.org dont le but est d'i