Skip to content

Commit a4d7d0c

Browse files
authored
Merge pull request #2679 from makermelissa/main
Add Qualia S3 Product Demo
2 parents 3d79a5e + bb2b0ca commit a4d7d0c

3 files changed

Lines changed: 247 additions & 0 deletions

File tree

Qualia/Qualia_S3_Product_Demo/.none.test.only

Whitespace-only changes.
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
// SPDX-FileCopyrightText: 2023 Limor Fried for Adafruit Industries
2+
//
3+
// SPDX-License-Identifier: MIT
4+
5+
#include <Arduino_GFX_Library.h>
6+
#include "inits.h"
7+
#include "Adafruit_FT6206.h"
8+
9+
Arduino_XCA9554SWSPI *expander = new Arduino_XCA9554SWSPI(
10+
PCA_TFT_RESET, PCA_TFT_CS, PCA_TFT_SCK, PCA_TFT_MOSI,
11+
&Wire, 0x3F);
12+
13+
Arduino_ESP32RGBPanel *rgbpanel = new Arduino_ESP32RGBPanel(
14+
TFT_DE, TFT_VSYNC, TFT_HSYNC, TFT_PCLK,
15+
TFT_R1, TFT_R2, TFT_R3, TFT_R4, TFT_R5,
16+
TFT_G0, TFT_G1, TFT_G2, TFT_G3, TFT_G4, TFT_G5,
17+
TFT_B1, TFT_B2, TFT_B3, TFT_B4, TFT_B5,
18+
1 /* hync_polarity */, 46 /* hsync_front_porch */, 2 /* hsync_pulse_width */, 44 /* hsync_back_porch */,
19+
1 /* vsync_polarity */, 50 /* vsync_front_porch */, 16 /* vsync_pulse_width */, 16 /* vsync_back_porch */);
20+
21+
Arduino_RGB_Display *gfx = new Arduino_RGB_Display(
22+
/* 3.4" square */
23+
// 480 /* width */, 480 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
24+
// expander, GFX_NOT_DEFINED /* RST */, tl034wvs05_b1477a_init_operations, sizeof(tl034wvs05_b1477a_init_operations));
25+
/* 3.2" bar */
26+
// 320 /* width */, 820 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
27+
// expander, GFX_NOT_DEFINED /* RST */, tl032fwv01_init_operations, sizeof(tl032fwv01_init_operations));
28+
/* 4.0" 720x720 square */
29+
// 720 /* width */, 720 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
30+
// expander, GFX_NOT_DEFINED /* RST */, NULL, 0);
31+
/* 4.0" 480x480 square */
32+
// 480 /* width */, 480 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
33+
// expander, GFX_NOT_DEFINED /* RST */, tl040wvs03_init_operations, sizeof(tl040wvs03_init_operations));
34+
// 2.1" round
35+
480 /* width */, 480 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
36+
expander, GFX_NOT_DEFINED /* RST */, TL021WVC02_init_operations, sizeof(TL021WVC02_init_operations));
37+
38+
39+
Adafruit_FT6206 ctp = Adafruit_FT6206(); // This library also supports FT6336U!
40+
#define I2C_TOUCH_ADDR 0x15
41+
bool touchOK = false;
42+
43+
void setup(void)
44+
{
45+
//while (!Serial) delay(100);
46+
47+
#ifdef GFX_EXTRA_PRE_INIT
48+
GFX_EXTRA_PRE_INIT();
49+
#endif
50+
51+
Serial.println("Starting touch paint");
52+
53+
// Init Display
54+
Wire.setClock(400000); // speed up I2C
55+
if (!gfx->begin()) {
56+
Serial.println("gfx->begin() failed!");
57+
while (1) yield();
58+
}
59+
60+
gfx->fillScreen(BLACK);
61+
62+
expander->pinMode(PCA_TFT_BACKLIGHT, OUTPUT);
63+
expander->digitalWrite(PCA_TFT_BACKLIGHT, HIGH);
64+
65+
Serial.println("Hello!");
66+
gfx->fillScreen(BLACK);
67+
gfx->setCursor(100, gfx->height() / 2 - 75);
68+
gfx->setTextSize(5);
69+
gfx->setTextColor(WHITE);
70+
gfx->println("Hello World!");
71+
72+
gfx->setCursor(100, gfx->height() / 2 - 25);
73+
gfx->setTextColor(RED);
74+
gfx->println("RED");
75+
76+
gfx->setCursor(100, gfx->height() / 2 + 25);
77+
gfx->setTextColor(GREEN);
78+
gfx->println("GREEN");
79+
80+
gfx->setCursor(100, gfx->height() / 2 + 75);
81+
gfx->setTextColor(BLUE);
82+
gfx->println("BLUE");
83+
84+
if (!ctp.begin(0, &Wire, I2C_TOUCH_ADDR)) {
85+
//gfx->setTextColor(RED);
86+
//gfx->println("\nTouch not found");
87+
Serial.println("No touchscreen found");
88+
touchOK = false;
89+
} else {
90+
gfx->setTextColor(WHITE);
91+
gfx->println("\nTouch found");
92+
Serial.println("Touchscreen found");
93+
touchOK = true;
94+
}
95+
96+
expander->pinMode(PCA_BUTTON_UP, INPUT);
97+
expander->pinMode(PCA_BUTTON_DOWN, INPUT);
98+
}
99+
100+
void loop()
101+
{
102+
if (touchOK && ctp.touched()) {
103+
TS_Point p = ctp.getPoint(0);
104+
Serial.printf("(%d, %d)\n", p.x, p.y);
105+
gfx->fillRect(p.x, p.y, 5, 5, WHITE);
106+
}
107+
108+
// use the buttons to turn off
109+
if (! expander->digitalRead(PCA_BUTTON_DOWN)) {
110+
expander->digitalWrite(PCA_TFT_BACKLIGHT, LOW);
111+
}
112+
// and on the backlight
113+
if (! expander->digitalRead(PCA_BUTTON_UP)) {
114+
expander->digitalWrite(PCA_TFT_BACKLIGHT, HIGH);
115+
}
116+
117+
}
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
// SPDX-FileCopyrightText: 2023 Limor Fried for Adafruit Industries
2+
//
3+
// SPDX-License-Identifier: MIT
4+
5+
static const uint8_t square34_init_operations[] = {
6+
BEGIN_WRITE,
7+
8+
WRITE_COMMAND_8, 0xFF,
9+
WRITE_BYTES, 5,
10+
0x77, 0x01, 0x00, 0x00, 0x13,
11+
WRITE_C8_D8, 0xEF, 0x08,
12+
13+
WRITE_COMMAND_8, 0xFF,
14+
WRITE_BYTES, 5,
15+
0x77, 0x01, 0x00, 0x00, 0x10,
16+
17+
WRITE_C8_D16, 0xC0, 0x3B, 0x00,
18+
WRITE_C8_D16, 0xC1, 0x12, 0x0A,
19+
WRITE_C8_D16, 0xC2, 0x07, 0x03,
20+
WRITE_C8_D8, 0xC3, 0x02, //80£ºHV mode
21+
WRITE_C8_D8, 0xCC, 0x10,
22+
WRITE_C8_D8, 0xCD, 0x08,
23+
24+
WRITE_COMMAND_8, 0xB0,
25+
WRITE_BYTES, 16,
26+
0x0F, 0x11, 0x17, 0x15,
27+
0x15, 0x09, 0x0C, 0x08,
28+
0x08, 0x26, 0x04, 0x59,
29+
0x16, 0x66, 0x2D, 0x1F,
30+
WRITE_COMMAND_8, 0xB1,
31+
WRITE_BYTES, 16,
32+
0x0F, 0x11, 0x17, 0x15,
33+
0x15, 0x09, 0x0C, 0x08,
34+
0x08, 0x26, 0x04, 0x59,
35+
0x16, 0x66, 0x2D, 0x1F,
36+
37+
WRITE_COMMAND_8, 0xFF,
38+
WRITE_BYTES, 5,
39+
0x77, 0x01, 0x00, 0x00, 0x11,
40+
41+
WRITE_C8_D8, 0xB0, 0x6D,
42+
WRITE_C8_D8, 0xB1, 0x3A, //30/47
43+
WRITE_C8_D8, 0xB2, 0x01,
44+
WRITE_C8_D8, 0xB3, 0x80,
45+
WRITE_C8_D8, 0xB5, 0x49,
46+
WRITE_C8_D8, 0xB7, 0x85,
47+
WRITE_C8_D8, 0xB8, 0x20,
48+
WRITE_C8_D8, 0xC1, 0x78,
49+
WRITE_C8_D8, 0xC2, 0x78,
50+
WRITE_C8_D8, 0xD0, 0x88,
51+
52+
WRITE_COMMAND_8, 0xE0,
53+
WRITE_BYTES, 3, 0x00, 0x00, 0x02,
54+
55+
WRITE_COMMAND_8, 0xE1,
56+
WRITE_BYTES, 11,
57+
0x07, 0x00, 0x09, 0x00,
58+
0x06, 0x00, 0x08, 0x00,
59+
0x00, 0x33, 0x33,
60+
61+
WRITE_COMMAND_8, 0xE2,
62+
WRITE_BYTES, 13,
63+
0x11, 0x11, 0x33, 0x33,
64+
0xF6, 0x00, 0xF6, 0x00,
65+
0xF6, 0x00, 0xF6, 0x00,
66+
0x00,
67+
68+
WRITE_COMMAND_8, 0xE3,
69+
WRITE_BYTES, 4,
70+
0x00, 0x00, 0x11, 0x11,
71+
72+
WRITE_C8_D16, 0xE4, 0x44, 0x44,
73+
74+
WRITE_COMMAND_8, 0xE5,
75+
WRITE_BYTES, 16,
76+
0x0F, 0xF3, 0x3D, 0xFF,
77+
0x11, 0xF5, 0x3D, 0xFF,
78+
0x0B, 0xEF, 0x3D, 0xFF,
79+
0x0D, 0xF1, 0x3D, 0xFF,
80+
81+
WRITE_COMMAND_8, 0xE6,
82+
WRITE_BYTES, 4,
83+
0x00, 0x00, 0x11, 0x11,
84+
85+
WRITE_C8_D16, 0xE7, 0x44, 0x44,
86+
87+
WRITE_COMMAND_8, 0xE8,
88+
WRITE_BYTES, 16,
89+
0x0E, 0xF2, 0x3D, 0xFF,
90+
0x10, 0xF4, 0x3D, 0xFF,
91+
0x0A, 0xEE, 0x3D, 0xFF,
92+
0x0C, 0xF0, 0x3D, 0xFF,
93+
94+
WRITE_C8_D16, 0xE9, 0x36, 0x00,
95+
96+
WRITE_COMMAND_8, 0xEB,
97+
WRITE_BYTES, 7,
98+
0x00, 0x01, 0xE4, 0xE4,
99+
0x44, 0xAA, 0x10,
100+
101+
WRITE_C8_D16, 0xEC, 0x3C, 0x00,
102+
103+
WRITE_COMMAND_8, 0xED,
104+
WRITE_BYTES, 16,
105+
0xFF, 0x45, 0x67, 0xFA,
106+
0x01, 0x2B, 0xCF, 0xFF,
107+
0xFF, 0xFC, 0xB2, 0x10,
108+
0xAF, 0x76, 0x54, 0xFF,
109+
110+
WRITE_COMMAND_8, 0xEF,
111+
WRITE_BYTES, 6,
112+
0x10, 0x0D, 0x04, 0x08, 0x3F, 0x1F,
113+
114+
WRITE_COMMAND_8, 0xFF,
115+
WRITE_BYTES, 5,
116+
0x77, 0x01, 0x00, 0x00, 0x00,
117+
118+
WRITE_C8_D8, 0x35, 0x00,
119+
WRITE_C8_D8, 0x3A, 0x66,
120+
121+
WRITE_COMMAND_8, 0x11, // Sleep Out
122+
END_WRITE,
123+
124+
DELAY, 120,
125+
126+
BEGIN_WRITE,
127+
WRITE_COMMAND_8, 0x29, // Display On
128+
END_WRITE,
129+
130+
DELAY, 50};

0 commit comments

Comments
 (0)