Les écrans sont partout! Il suffit de se déplacer dans le métro pour constater que même les affiches sont progressivement remplacées par des grands écrans. Idem dans certaines communes où les informations communales et des publicités sont diffusées non-stop. Nous vous proposons de découvrir comment mettre en œuvre de petits écrans pour moderniser les décors de vos réseaux où pour d'autres applications en modélisme.
Les écrans TFT
Le premier modèle, TFT 1.8, que nous allons utiliser est le plus petit mais aussi le plus simple. Il sera associé à un Arduino Uno ou MEGA. L'alimentation est faite par le port USB.
L'écran comporte 8 broches qui sont :
VCC (5V), GND, CS, RESET, A0, SDA, SCK, LED (3.3V)
Le schéma de câblage est simple. Le voici sous forme de tableau.
TFT Arduino
SCK 13
SDA 11
RST 8
DC ou A0 9
CS 10
Le code :
Tout repose sur les deux librairies à télécharger pour l'ILI9341 (TFT et SPI). Pour les fonctions, vous pouvez vous référer aux liens utiles.
Voici le code de ce premier exemple de mise en œuvre avec des drapeaux de pays et un dessin de vélo :
[code]
#include <TFT.h>
#include <SPI.h>
// LCD pinout
#define cs 10
#define dc 9
#define rst 8
//Colors
#define BLACK 0x0000
#define NAVY 0x000F
#define DARKGREEN 0x03E0
#define DARKCYAN 0x03EF
#define MAROON 0x7800
#define PURPLE 0x780F
#define OLIVE 0x7BE0
#define LIGHTGREY 0xC618
#define DARKGREY 0x7BEF
#define BLUE 0x001F
#define GREEN 0x07E0
#define CYAN 0x07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define ORANGE 0xFD20
#define GREENYELLOW 0xAFE5
#define PINK 0xF81F
// create an instance of the library
TFT TFTscreen = TFT(cs, dc, rst);
void setup() {
//initialize the library
TFTscreen.begin();
// clear the screen with a black background
TFTscreen.background(0, 0, 0);
//set the text size
TFTscreen.setTextSize(2);
// Screen orientation
//TFTscreen.setRotation(0);
}
void loop() {
//generate a random color
int redRandom = random(0, 255);
int greenRandom = random (0, 255);
int blueRandom = random (0, 255);
// set a random font color
TFTscreen.stroke(redRandom, greenRandom, blueRandom);
TFTscreen.text("Velodrome", 4, 10);
TFTscreen.text("National", 4, 30);
TFTscreen.text("de Saint", 4, 50);
TFTscreen.text("Quentin en", 4, 70);
TFTscreen.text("Yvelines", 4, 90);
// wait 200 miliseconds until change to next color
delay(2000);
//draw a cycle
TFTscreen.background(0,0,0);
TFTscreen.circle(50,50,20);
TFTscreen.circle(100,50,20);
TFTscreen.triangle(60,30,90,30,80,50);
TFTscreen.line(50,50,60,20);
TFTscreen.line(100,50,90,30);
TFTscreen.line(60,20,70,20);
TFTscreen.rect(85,25,10,5);
TFTscreen.text("Record ", 30, 70);
TFTscreen.text("mondial!", 30, 90);
delay(3000);
// French Flag
//function draws a filled rectangle in x and y location. w is width, h is height and t is color of the rectangle
TFTscreen.fillRect(0,0,45,255,BLUE);
TFTscreen.fillRect(45,0,45,255,WHITE);
TFTscreen.fillRect(85,0,45,255,RED);
delay(2000);
// Belgium Flag
TFTscreen.fillRect(0,0,45,255,BLACK);
TFTscreen.fillRect(45,0,45,255,YELLOW);
TFTscreen.fillRect(85,0,45,255,RED);
delay(2000);
// Italian Flag
TFTscreen.fillRect(0,0,45,255,DARKGREEN);
TFTscreen.fillRect(45,0,45,255,WHITE);
TFTscreen.fillRect(85,0,45,255,RED);
delay(2000);
// German Flag
TFTscreen.fillRect(0,0,255,45,BLACK);
TFTscreen.fillRect(0,45,255,45,RED);
TFTscreen.fillRect(0,85,255,45,YELLOW);
delay(2000);
// Holland Flag
TFTscreen.fillRect(0,0,255,45,RED);
TFTscreen.fillRect(0,45,255,45,WHITE);
TFTscreen.fillRect(0,85,255,45,BLUE);
delay(2000);
// Russia Flag
TFTscreen.fillRect(0,0,255,45,WHITE);
TFTscreen.fillRect(0,45,255,45,BLUE);
TFTscreen.fillRect(0,85,255,45,RED);
delay(2000);
// Austria Flag
TFTscreen.fillRect(0,0,255,45,RED);
TFTscreen.fillRect(0,45,255,45,WHITE);
TFTscreen.fillRect(0,85,255,45,RED);
delay(2000);
// Austria Flag
TFTscreen.fillRect(0,0,255,255,WHITE);
TFTscreen.fillCircle(70,70,30,RED);
delay(2000);
// Bulgaria Flag
TFTscreen.fillRect(0,0,255,45,WHITE);
TFTscreen.fillRect(0,45,255,45,GREEN);
TFTscreen.fillRect(0,85,255,45,RED);
delay(2000);
// light up a single point
//TFTscreen.point(80,64);
//delay(500);
//erase all figures
TFTscreen.background(0,0,0);
}
[/code]
Une petite vidéo pour illustrer :
Pour voir plus grand :
Pour faire des diffusions sur un écran plus grand, il faut passer au 2.2" SPI TFT Display Module ILI9341 (240x320).
Montage avec Arduino MEGA
Si vous voulez utiliser l'alimentation par le port USB, le schéma de câblage est le suivant:
Si vous voulez utiliser l'alimentation extérieure 3,3V le schéma de câblage est le suivant:
Le code :
Le mieux est d'utiliser l'exemple de la librairie Adafruit ILI9341 qui se nomme graphictest. Pour être en phase avec le câblage que nous proposons, il faut faire l'adaptation suivante au début du programme :
#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
// For the Adafruit shield, these are the default.
#define TFT_CS 8
#define TFT_RST 9
#define TFT_DC 10
#define TFT_MOSI 11
#define TFT_CLK 13
#define TFT_MISO 12
//Colors
#define BLACK 0x0000
#define NAVY 0x000F
#define DARKGREEN 0x03E0
#define DARKCYAN 0x03EF
#define MAROON 0x7800
#define PURPLE 0x780F
#define OLIVE 0x7BE0
#define LIGHTGREY 0xC618
#define DARKGREY 0x7BEF
#define BLUE 0x001F
#define GREEN 0x07E0
#define CYAN 0x07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define ORANGE 0xFD20
#define GREENYELLOW 0xAFE5
#define PINK 0xF81F
// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
// If using the breakout, change pins as desired
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
void setup() {
Serial.begin(9600);
Serial.println("ILI9341 Test!");
tft.begin();
tft.setRotation(1);
tft.fillScreen(GREEN);
Les images avec une cartes SD :
Carte SD du TFT
TFT SD fonction TFT SD pin Arduino
SD_CS 1 5
SD_MOSI 2 11
SD_MISO 3 12
SD_SCK 4 13
A ce stade de nos essais, nous n'avons pas réussi à lire la carte SD (et pourtant elle fonctionne sur le PC)... Encore un mystère à résoudre.
liens utiles :
TFT 1.8 ici
Pour tout savoir sur les fonctions graphiques ici