-
Notifications
You must be signed in to change notification settings - Fork 0
/
TFTpumpkin.ino
99 lines (85 loc) · 2.56 KB
/
TFTpumpkin.ino
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
// TFT Pumpkin Patch
// scruss - 2017-10 - for Elmwood Electronics
// https://elmwood.to/
// written for Arduino
// and Adafruit 3.5" TFT 320x480 + Touchscreen Breakout Board
// <https://www.adafruit.com/product/2050>
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library
#include "pumpkin.h"
/*
Wiring:
TFT Arduino
===== =========
GND GND
3-5V 5V
D0 8
D1 9
D2 2
D3 3
D4 4
D5 5
D6 6
D7 7
CS A3
C/D A2
WR A1
RD A0
*/
// LCD Control Pins
#define LCD_CS A3 // Chip Select → A3
#define LCD_CD A2 // Command/Data → A2
#define LCD_WR A1 // LCD Write → A1
#define LCD_RD A0 // LCD Read → A0
#define LCD_RESET A4 // Not used here
// It's Halloween - we only need two colours …
#define BLACK 0x0000
// orange is #ffa500 in RGB-888; RGB-565 conversion is 0xFD20
#define ORANGE 0xFD20
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
int width, height; // for screen size
struct point {
int16_t x;
int16_t y;
};
// array to keep track of pumpkin coordinates
// > 50 is a bit overlappy
// < 50 can look a bit sparse
#define PUMPCOUNT 50
struct point pumpkins[PUMPCOUNT];
void setup(void) {
// get screen size
width = tft.width();
height = tft.height();
// reset and clear the screen
tft.reset();
uint16_t identifier = tft.readID();
tft.begin(identifier);
tft.fillScreen(BLACK);
// draw initial pumpkins
for (int i = 0; i < PUMPCOUNT; i++) {
pumpkins[i].x = (int16_t) 4 * random(width / 4);
pumpkins[i].y = (int16_t) 4 * random(height / 4);
tft.drawBitmap(pumpkins[i].x, pumpkins[i].y,
(const uint8_t *)pgm_read_word(&img_and_mask[1]),
(int16_t) 32,
(int16_t) 32, ORANGE);
}
}
void loop(void) {
// draw the pumpkins!
for (int i = 0; i < PUMPCOUNT; i++) {
// erase previous pumpkin position by drawing it black
tft.drawBitmap(pumpkins[i].x, pumpkins[i].y,
(const uint8_t *)pgm_read_word(&img_and_mask[1]),
(int16_t) 32,
(int16_t) 32, BLACK);
// pick new random(ish) location and draw it in orange
pumpkins[i].x = (int16_t) 4 * random(width / 4);
pumpkins[i].y = (int16_t) 4 * random(height / 4);
tft.drawBitmap(pumpkins[i].x, pumpkins[i].y,
(const uint8_t *)pgm_read_word(&img_and_mask[1]),
(int16_t) 32,
(int16_t) 32, ORANGE);
}
}