Skip to content

Commit 85766e3

Browse files
committed
add CPX gizmo support
1 parent e3fea33 commit 85766e3

1 file changed

Lines changed: 34 additions & 14 deletions

File tree

Hallowing_Googly_Eye/Hallowing_Googly_Eye.ino

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,23 @@
1717
// whose radius is the eye radius minus the pupil radius.
1818
#define INNER_RADIUS (EYE_RADIUS - PUPIL_RADIUS)
1919

20-
#define TFT_CS 39 // Hallowing display control pins: chip select
21-
#define TFT_RST 37 // Display reset
22-
#define TFT_DC 38 // Display data/command select
23-
#define TFT_BACKLIGHT 7 // Display backlight pin
20+
#if defined(ADAFRUIT_HALLOWING)
21+
#define TFT_CS 39 // Hallowing display control pins: chip select
22+
#define TFT_RST 37 // Display reset
23+
#define TFT_DC 38 // Display data/command select
24+
#define TFT_BACKLIGHT 7 // Display backlight pin
25+
#define TFT_SPI SPI
26+
#define TFT_PERIPH PERIPH_SPI
27+
Adafruit_LIS3DH accel = Adafruit_LIS3DH();
28+
#elif defined(ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS)
29+
#define TFT_CS A7 // Display select
30+
#define TFT_DC A6 // Display data/command pin
31+
#define TFT_RST -1 // Display reset pin
32+
#define TFT_BACKLIGHT A3
33+
#define TFT_PERIPH PERIPH_SPI1
34+
#define TFT_SPI SPI1
35+
Adafruit_LIS3DH accel(&Wire1);
36+
#endif
2437

2538
// For the sake of math comprehension and simplicity, movement takes place
2639
// in a traditional Cartesian coordinate system (+Y is up), floating point
@@ -34,8 +47,8 @@ bool firstFrame = true; // Force full-screen update on initial frame
3447

3548
// Declarations for various Hallowing hardware -- display, accelerometer
3649
// and SPI rate & mode.
37-
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
38-
Adafruit_LIS3DH accel = Adafruit_LIS3DH();
50+
Adafruit_ST7735 tft = Adafruit_ST7735(&TFT_SPI, TFT_CS, TFT_DC, TFT_RST);
51+
3952
SPISettings settings(12000000, MSBFIRST, SPI_MODE0);
4053

4154
// Declarations related to DMA (direct memory access), which lets us walk
@@ -72,31 +85,31 @@ void setup(void) {
7285
int dmac_id;
7386
volatile uint32_t *data_reg;
7487
dma.allocate();
75-
if(&PERIPH_SPI == &sercom0) {
88+
if(&TFT_PERIPH == &sercom0) {
7689
dma.setTrigger(SERCOM0_DMAC_ID_TX);
7790
data_reg = &SERCOM0->SPI.DATA.reg;
7891
#if defined SERCOM1
79-
} else if(&PERIPH_SPI == &sercom1) {
92+
} else if(&TFT_PERIPH == &sercom1) {
8093
dma.setTrigger(SERCOM1_DMAC_ID_TX);
8194
data_reg = &SERCOM1->SPI.DATA.reg;
8295
#endif
8396
#if defined SERCOM2
84-
} else if(&PERIPH_SPI == &sercom2) {
97+
} else if(&TFT_PERIPH == &sercom2) {
8598
dma.setTrigger(SERCOM2_DMAC_ID_TX);
8699
data_reg = &SERCOM2->SPI.DATA.reg;
87100
#endif
88101
#if defined SERCOM3
89-
} else if(&PERIPH_SPI == &sercom3) {
102+
} else if(&TFT_PERIPH == &sercom3) {
90103
dma.setTrigger(SERCOM3_DMAC_ID_TX);
91104
data_reg = &SERCOM3->SPI.DATA.reg;
92105
#endif
93106
#if defined SERCOM4
94-
} else if(&PERIPH_SPI == &sercom4) {
107+
} else if(&TFT_PERIPH == &sercom4) {
95108
dma.setTrigger(SERCOM4_DMAC_ID_TX);
96109
data_reg = &SERCOM4->SPI.DATA.reg;
97110
#endif
98111
#if defined SERCOM5
99-
} else if(&PERIPH_SPI == &sercom5) {
112+
} else if(&TFT_PERIPH == &sercom5) {
100113
dma.setTrigger(SERCOM5_DMAC_ID_TX);
101114
data_reg = &SERCOM5->SPI.DATA.reg;
102115
#endif
@@ -134,6 +147,13 @@ void loop(void) {
134147
float ax = accel.y_g * scale, // Horizontal acceleration, pixel units
135148
ay = accel.x_g * scale; // Vertical acceleration "
136149

150+
#if defined(ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS)
151+
// CPX has different accel orientations
152+
float temp = ay;
153+
ay = ax;
154+
ax = -temp;
155+
#endif
156+
137157
// Add scaled accelerometer readings to pupil velocity, store interim
138158
// values in vxNew, vyNew...a little friction prevents infinite bounce.
139159
float vxNew = (vx + ax) * DRAG,
@@ -272,7 +292,7 @@ void loop(void) {
272292
if(x2 > 127) x2 = 127;
273293
if(y2 > 127) y2 = 127;
274294

275-
SPI.beginTransaction(settings); // SPI init
295+
TFT_SPI.beginTransaction(settings); // SPI init
276296
digitalWrite(TFT_CS, LOW); // Chip select
277297
tft.setAddrWindow(x1, y1, x2-x1+1, y2-y1+1);
278298
digitalWrite(TFT_CS, LOW); // Re-select after addr function
@@ -398,7 +418,7 @@ void loop(void) {
398418

399419
while(dma_busy); // Wait for last DMA transfer to complete
400420
digitalWrite(TFT_CS, HIGH); // Deselect
401-
SPI.endTransaction(); // SPI done
421+
TFT_SPI.endTransaction(); // SPI done
402422
}
403423

404424
void dmaXfer(uint16_t n) { // n = Transfer size in bytes

0 commit comments

Comments
 (0)