Reference to particular drivers in examples have been removed as multiple display drivers are now supported. Tabs replaced by spaces in header file by file editor. RPi TFT with write strobe SPI clock rate dropped to 20MHz (display cannot cope with new high rate siWriteBlock() function)
94 lines
2.9 KiB
Arduino
94 lines
2.9 KiB
Arduino
// A fun MATRIX-like screen demo of scrolling
|
|
// Screen will flicker initially until fully drawn
|
|
// then scroll smoothly
|
|
|
|
// Needs GLCD font
|
|
|
|
/*
|
|
Make sure all the display driver and pin comnenctions are correct by
|
|
editting the User_Setup.h file in the TFT_eSPI library folder.
|
|
|
|
#########################################################################
|
|
###### DON'T FORGET TO UPDATE THE User_Setup.h FILE IN THE LIBRARY ######
|
|
#########################################################################
|
|
*/
|
|
|
|
#include <TFT_eSPI.h> // Hardware-specific library
|
|
#include <SPI.h>
|
|
|
|
TFT_eSPI tft = TFT_eSPI(); // Invoke custom library
|
|
|
|
#define TEXT_HEIGHT 8 // Height of text to be printed and scrolled
|
|
#define BOT_FIXED_AREA 0 // Number of lines in bottom fixed area (lines counted from bottom of screen)
|
|
#define TOP_FIXED_AREA 0 // Number of lines in top fixed area (lines counted from top of screen)
|
|
|
|
uint16_t yStart = TOP_FIXED_AREA;
|
|
uint16_t yArea = 320 - TOP_FIXED_AREA - BOT_FIXED_AREA;
|
|
uint16_t yDraw = 320 - BOT_FIXED_AREA - TEXT_HEIGHT;
|
|
byte pos[42];
|
|
uint16_t xPos = 0;
|
|
|
|
void setup() {
|
|
Serial.begin(115200);
|
|
randomSeed(analogRead(A0));
|
|
tft.init();
|
|
tft.setRotation(2);
|
|
tft.fillScreen(ILI9341_BLACK);
|
|
setupScrollArea(TOP_FIXED_AREA, BOT_FIXED_AREA);
|
|
}
|
|
|
|
void loop(void) {
|
|
// First fill the screen with random streaks of characters
|
|
for (int j = 0; j < 600; j += TEXT_HEIGHT) {
|
|
for (int i = 0; i < 40; i++) {
|
|
if (pos[i] > 20) pos[i] -= 3; // Rapid fade initially brightness values
|
|
if (pos[i] > 0) pos[i] -= 1; // Slow fade later
|
|
if ((random(20) == 1) && (j<400)) pos[i] = 63; // ~1 in 20 probability of a new character
|
|
tft.setTextColor(pos[i] << 5, ILI9341_BLACK); // Set the green character brightness
|
|
if (pos[i] == 63) tft.setTextColor(ILI9341_WHITE, ILI9341_BLACK); // Draw white character
|
|
xPos += tft.drawChar(random(32, 128), xPos, yDraw, 1); // Draw the character
|
|
}
|
|
yDraw = scroll_slow(TEXT_HEIGHT, 14); // Scroll, 14ms per pixel line
|
|
xPos = 0;
|
|
}
|
|
|
|
//tft.setRotation(2);
|
|
//tft.setTextColor(63 << 5, ILI9341_BLACK);
|
|
//tft.drawCentreString("MATRIX",120,60,4);
|
|
//tft.setRotation(0);
|
|
|
|
// Now scroll smoothly forever
|
|
while (1) {yield(); yDraw = scroll_slow(320,5); }// Scroll 320 lines, 5ms per line
|
|
|
|
}
|
|
|
|
void setupScrollArea(uint16_t TFA, uint16_t BFA) {
|
|
tft.writecommand(ILI9341_VSCRDEF); // Vertical scroll definition
|
|
tft.writedata(TFA >> 8);
|
|
tft.writedata(TFA);
|
|
tft.writedata((320 - TFA - BFA) >> 8);
|
|
tft.writedata(320 - TFA - BFA);
|
|
tft.writedata(BFA >> 8);
|
|
tft.writedata(BFA);
|
|
}
|
|
|
|
int scroll_slow(int lines, int wait) {
|
|
int yTemp = yStart;
|
|
for (int i = 0; i < lines; i++) {
|
|
yStart++;
|
|
if (yStart == 320 - BOT_FIXED_AREA) yStart = TOP_FIXED_AREA;
|
|
scrollAddress(yStart);
|
|
delay(wait);
|
|
}
|
|
return yTemp;
|
|
}
|
|
|
|
void scrollAddress(uint16_t VSP) {
|
|
tft.writecommand(ILI9341_VSCRSADD); // Vertical scrolling start address
|
|
tft.writedata(VSP >> 8);
|
|
tft.writedata(VSP);
|
|
}
|
|
|
|
|
|
|