La stragrande maggioranza dei possessori di una board di Arduino è alla costante ricerca di display (touch e non) innovativi, in modo da rendere i propri progetti interessanti ed originali. Un display a basso costo molto interessante è un display TFT 2.4″ ILI9341 Touch-Screen dotato di una risoluzione di 240*320 pixel che utilizza la connessione SPI. Inoltre vi è data anche la possibilità di utilizzare una micro SD card, quest’ultima feature gestibile tramite 4 pin dedicati.
Inoltre vi sono 14 pin di connessione di cui 5 dedicati al touch screen. Il dispositivo in questione è corredato dal processore ILITEK ILI9341.
Ecco una tabella che riporta uno schema di collegamento di ciascun pin del display con il corrispettivo pin di Arduino UNO da collegare :
TFT Dispaly 2.4″ SPI | Arduino UNO |
---|---|
VCC | 5 V |
GND | GND |
CS | 10 |
RESET | 8 |
DC | 9 |
SDI/MOSI | 11 |
SCK | 13 |
LED | 5 V |
SDD/MISO | 12 |
T_CLK | 3 |
T_CS | 4 |
T_DIN | 5 |
T_DO | 6 |
T_IRQ | 7 |
Per quanto concerne il diagramma di connessione è riportato nell’immagine sottostante:
In seguito è disponibile lo sketch per utilizzare il display nelle sue potenzialità. Tale sketch è stato realizzato dallo youtuber KB1UIF.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
//KB1UIF (A.Tedds) //Paint Sketch for Arduino LCD TFT 2.4" Touch Display 8 bit ILI9341. #include <Adafruit_GFX_AS.h> #include <Adafruit_ILI9341_8bit_AS.h> #include <TouchScreen.h> #define LCD_CS A3 #define LCD_CD A2 #define LCD_WR A1 #define LCD_RD A0 #define LCD_RESET A4 #define YP A1 // must be an analog pin. #define XM A2 // must be an analog pin. #define YM 7 // can be a digital pin. #define XP 6 // can be a digital pin. #define TS_MINX 150 #define TS_MINY 120 #define TS_MAXX 920 #define TS_MAXY 940 #define BOXSIZE 40 #define PENRADIUS 3 int oldcolor, currentcolor; // For better pressure precision, we need to know the resistance // between X+ and X- Use any multimeter to read it // Its about 300 ohms across the X plate on mine. TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300); // Assign human-readable names to some common 16-bit color values: #define BLACK 0xFFFF #define BLUE 0xFFE0 #define GREEN 0xF81F #define CYAN 0xF800 #define GRAY1 0x8410 #define RED 0x07FF #define GRAY2 0x4208 #define MAGENTA 0x07E0 #define YELLOW 0x001F #define WHITE 0x0000 Adafruit_ILI9341_8bit_AS tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET); void setup(void) { //Serial.begin(9600); //Serial.println(F("Paint!")); tft.reset(); uint16_t identifier = tft.readID(); //Serial.print(F("LCD driver chip: ")); //Serial.println(identifier,HEX); // tft.begin(identifier); tft.begin(0x9341); tft.fillScreen(BLACK); tft.setRotation(0); tft.fillRect(0, 0, BOXSIZE, BOXSIZE, RED); tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, YELLOW); tft.fillRect(BOXSIZE * 2, 0, BOXSIZE, BOXSIZE, GREEN); tft.fillRect(BOXSIZE * 3, 0, BOXSIZE, BOXSIZE, CYAN); tft.fillRect(BOXSIZE * 4, 0, BOXSIZE, BOXSIZE, BLUE); tft.fillRect(BOXSIZE * 5, 0, BOXSIZE, BOXSIZE, MAGENTA); //Draw a dot for graphic co-ordinations //tft.fillCircle(10, 10, PENRADIUS, GREEN); //y,x,size,color //tft.fillCircle(230, 310, PENRADIUS, RED); //y,x,size,color tft.drawRect(0, 0, BOXSIZE, BOXSIZE, WHITE); currentcolor = RED; //pinMode(13, OUTPUT); } #define MINPRESSURE 5 #define MAXPRESSURE 1500 void loop() { //digitalWrite(13, HIGH); // Recently Point was renamed TSPoint in the TouchScreen library // If you are using an older version of the library, use the // commented definition instead. Point p = ts.getPoint(); pinMode(XM, OUTPUT); pinMode(YP, OUTPUT); // we have some minimum pressure we consider 'valid' // pressure of 0 means no pressing! if (p.z > MINPRESSURE && p.z < MAXPRESSURE) { if (p.x < (TS_MINX - 5)) { //Serial.println("erase"); // press the bottom of the screen to erase tft.fillRect(0, BOXSIZE, tft.width(), tft.height() - BOXSIZE, BLACK); } p.x = map(p.x, TS_MINX, TS_MAXX, 0, 320); p.y = map(p.y, TS_MINY, TS_MAXY, 0, 240); if (p.x < BOXSIZE) { oldcolor = currentcolor; if (p.y < BOXSIZE) { currentcolor = RED; tft.drawRect(0, 0, BOXSIZE, BOXSIZE, WHITE); } else if (p.y < BOXSIZE * 2) { currentcolor = YELLOW; tft.drawRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, WHITE); } else if (p.y < BOXSIZE * 3) { currentcolor = GREEN; tft.drawRect(BOXSIZE * 2, 0, BOXSIZE, BOXSIZE, WHITE); } else if (p.y < BOXSIZE * 4) { currentcolor = CYAN; tft.drawRect(BOXSIZE * 3, 0, BOXSIZE, BOXSIZE, WHITE); } else if (p.y < BOXSIZE * 5) { currentcolor = BLUE; tft.drawRect(BOXSIZE * 4, 0, BOXSIZE, BOXSIZE, WHITE); } else if (p.x < BOXSIZE * 6) { currentcolor = MAGENTA; tft.drawRect(BOXSIZE * 5, 0, BOXSIZE, BOXSIZE, WHITE); } if (oldcolor != currentcolor) { if (oldcolor == RED) tft.fillRect(0, 0, BOXSIZE, BOXSIZE, RED); if (oldcolor == YELLOW) tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, YELLOW); if (oldcolor == GREEN) tft.fillRect(BOXSIZE * 2, 0, BOXSIZE, BOXSIZE, GREEN); if (oldcolor == CYAN) tft.fillRect(BOXSIZE * 3, 0, BOXSIZE, BOXSIZE, CYAN); if (oldcolor == BLUE) tft.fillRect(BOXSIZE * 4, 0, BOXSIZE, BOXSIZE, BLUE); if (oldcolor == MAGENTA) tft.fillRect(BOXSIZE * 5, 0, BOXSIZE, BOXSIZE, MAGENTA); } } if (((p.x - PENRADIUS) > BOXSIZE) && ((p.y + PENRADIUS) < tft.height())) { tft.fillCircle(p.y, p.x, PENRADIUS, currentcolor); } } } |
Il display in questione è acquistabile su Amazon (clicca qui) per il prezzo di 10 euro (comprese spese di spedizioni)
Salve Simone, ti sarei grato se tu mi potessi fornire le tre librerie Adafruit e Touchscreen. Dimmi quanto devo pagare e provvederò di conseguenza. Ho problemi col mio Mac a scaricare i file. Non so perché ma ricevo un errore di download. Puoi rispondermi alla mia mail gianbattistapettinelli@gmail.com
Grazie, ciao.
Gian Battista Pettinelli
Ciao, secondo me per scambiare info piu velocemente potremmo sentirci su telegram , scrivimi a @Simonecandido