diff --git a/welcome_demo/.pio/build/rp2040_usb/.sconsign314.dblite b/welcome_demo/.pio/build/rp2040_usb/.sconsign314.dblite index b54e966..6c5f96e 100644 Binary files a/welcome_demo/.pio/build/rp2040_usb/.sconsign314.dblite and b/welcome_demo/.pio/build/rp2040_usb/.sconsign314.dblite differ diff --git a/welcome_demo/.pio/build/rp2040_usb/firmware.elf b/welcome_demo/.pio/build/rp2040_usb/firmware.elf index 1fbf7cb..eeff32d 100755 Binary files a/welcome_demo/.pio/build/rp2040_usb/firmware.elf and b/welcome_demo/.pio/build/rp2040_usb/firmware.elf differ diff --git a/welcome_demo/.pio/build/rp2040_usb/firmware.uf2 b/welcome_demo/.pio/build/rp2040_usb/firmware.uf2 index 650c697..4464a90 100644 Binary files a/welcome_demo/.pio/build/rp2040_usb/firmware.uf2 and b/welcome_demo/.pio/build/rp2040_usb/firmware.uf2 differ diff --git a/welcome_demo/.pio/build/rp2040_usb/src/main.cpp.o b/welcome_demo/.pio/build/rp2040_usb/src/main.cpp.o index 030e57c..0a774c2 100644 Binary files a/welcome_demo/.pio/build/rp2040_usb/src/main.cpp.o and b/welcome_demo/.pio/build/rp2040_usb/src/main.cpp.o differ diff --git a/welcome_demo/src/main.cpp b/welcome_demo/src/main.cpp index 1469d27..99cc2ac 100644 --- a/welcome_demo/src/main.cpp +++ b/welcome_demo/src/main.cpp @@ -65,11 +65,13 @@ static inline void fbClear() { static inline void fbSet(int x, int y, uint8_t b) { if (x < 0 || x >= W || y < 0 || y >= H) return; + //if (x == y) return; // charlieplex diagonal — no LED exists here fb[y][x] = b; } static inline void fbOr(int x, int y, uint8_t b) { if (x < 0 || x >= W || y < 0 || y >= H) return; + //if (x == y) return; // charlieplex diagonal — no LED exists here if (b > fb[y][x]) fb[y][x] = b; } @@ -437,25 +439,42 @@ static int simonBtnToFront(int bi) { } // Draw a small arrow on the matrix for a given direction button. +// Arrows designed so the arrowhead contains no diagonal pixels (x == y). +// The shaft passes through (4,4) which is a non-existent diagonal LED; +// that pixel is simply omitted — the fbSet guard silently drops it anyway. +// The resulting one-pixel gap in the shaft is a hardware reality. static void simonDrawArrow(int bi, uint8_t b) { fbClear(); if (bi == BI_UP) { - fbSet(4, 1, b); fbSet(3, 2, b); fbSet(4, 2, b); fbSet(5, 2, b); - fbSet(2, 3, b); fbSet(4, 3, b); fbSet(6, 3, b); - fbSet(4, 4, b); fbSet(4, 5, b); fbSet(4, 6, b); fbSet(4, 7, b); + // tip + fbSet(2, 3, b); + // arrowhead — all pixels clear of diagonal + fbSet(3, 4, b); + fbSet(1, 4, b); + // shaft — (4,4) is diagonal, not drawn; gap is intentional + fbSet(2, 4, b); fbSet(2, 5, b); fbSet(2, 6, b); fbSet(2, 7, b); } else if (bi == BI_DOWN) { - fbSet(4, 1, b); fbSet(4, 2, b); fbSet(4, 3, b); fbSet(4, 4, b); - fbSet(2, 5, b); fbSet(4, 5, b); fbSet(6, 5, b); - fbSet(3, 6, b); fbSet(4, 6, b); fbSet(5, 6, b); - fbSet(4, 7, b); + // shaft — (4,4) is diagonal, not drawn; gap is intentional + fbSet(2, 3, b); fbSet(2, 4, b); fbSet(2, 5, b); fbSet(2, 6, b); + // head + fbSet(3, 6, b); fbSet(1, 6, b); + // tip + fbSet(2, 7, b); } else if (bi == BI_LEFT) { - fbSet(1, 4, b); fbSet(2, 3, b); fbSet(2, 4, b); fbSet(2, 5, b); - fbSet(3, 2, b); fbSet(3, 4, b); fbSet(3, 6, b); - fbSet(4, 4, b); fbSet(5, 4, b); fbSet(6, 4, b); fbSet(7, 4, b); + // tip + fbSet(0, 5, b); + // head + fbSet(1, 6, b); fbSet(1, 4, b); + // shaft + fbSet(1, 5, b); fbSet(2, 5, b); fbSet(3, 5, b); fbSet(4, 5, b); + } else if (bi == BI_RIGHT) { - fbSet(7, 4, b); fbSet(6, 3, b); fbSet(6, 4, b); fbSet(6, 5, b); - fbSet(5, 2, b); fbSet(5, 4, b); fbSet(5, 6, b); - fbSet(4, 4, b); fbSet(3, 4, b); fbSet(2, 4, b); fbSet(1, 4, b); + // tip + fbSet(4,5,b); + // head + fbSet(3,4,b); fbSet(3,6,b); + //Shaft + fbSet(0,5,b); fbSet(1, 5, b); fbSet(2, 5, b); fbSet(3, 5, b); } }