fixed characters drawing orientation and array handling

This commit is contained in:
2026-01-27 07:59:50 +01:00
parent 8afb7cd747
commit c8a8f31477
4 changed files with 1192 additions and 66 deletions
+943
View File
@@ -0,0 +1,943 @@
constexpr bool font7x5[95][7][5] = {
// ! (ASCII 33)
{
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, false, false, false},
{false, false, true, false, false}
},
// " (ASCII 34)
{
{false, true, false, true, false},
{false, true, false, true, false},
{false, true, false, true, false},
{false, false, false, false, false},
{false, false, false, false, false},
{false, false, false, false, false},
{false, false, false, false, false}
},
// # (ASCII 35)
{
{false, true, false, true, false},
{false, true, false, true, false},
{true, true, true, true, true},
{false, true, false, true, false},
{true, true, true, true, true},
{false, true, false, true, false},
{false, true, false, true, false}
},
// $ (ASCII 36)
{
{false, false, true, false, false},
{false, true, true, true, true},
{true, false, true, false, false},
{false, true, true, true, false},
{false, false, true, false, true},
{true, true, true, true, false},
{false, false, true, false, false}
},
// % (ASCII 37)
{
{true, true, false, false, true},
{true, true, false, false, true},
{false, false, false, true, false},
{false, false, true, false, false},
{false, true, false, false, false},
{true, false, false, true, true},
{true, false, false, true, true}
},
// & (ASCII 38)
{
{false, true, true, false, false},
{true, false, false, true, false},
{true, false, false, true, false},
{false, true, true, false, false},
{true, false, true, false, true},
{true, false, false, true, false},
{false, true, true, false, true}
},
// ' (ASCII 39)
{
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, false, false, false},
{false, false, false, false, false},
{false, false, false, false, false},
{false, false, false, false, false}
},
// ( (ASCII 40)
{
{false, false, false, true, false},
{false, false, true, false, false},
{false, true, false, false, false},
{false, true, false, false, false},
{false, true, false, false, false},
{false, false, true, false, false},
{false, false, false, true, false}
},
// ) (ASCII 41)
{
{false, true, false, false, false},
{false, false, true, false, false},
{false, false, false, true, false},
{false, false, false, true, false},
{false, false, false, true, false},
{false, false, true, false, false},
{false, true, false, false, false}
},
// * (ASCII 42)
{
{false, false, false, false, false},
{false, true, false, true, false},
{false, false, true, false, false},
{true, true, true, true, true},
{false, false, true, false, false},
{false, true, false, true, false},
{false, false, false, false, false}
},
// + (ASCII 43)
{
{false, false, false, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{true, true, true, true, true},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, false, false, false}
},
// , (ASCII 44)
{
{false, false, false, false, false},
{false, false, false, false, false},
{false, false, false, false, false},
{false, false, false, false, false},
{false, false, true, true, false},
{false, false, true, true, false},
{false, true, true, false, false}
},
// - (ASCII 45)
{
{false, false, false, false, false},
{false, false, false, false, false},
{false, false, false, false, false},
{true, true, true, true, true},
{false, false, false, false, false},
{false, false, false, false, false},
{false, false, false, false, false}
},
// . (ASCII 46)
{
{false, false, false, false, false},
{false, false, false, false, false},
{false, false, false, false, false},
{false, false, false, false, false},
{false, false, false, false, false},
{false, true, true, false, false},
{false, true, true, false, false}
},
// / (ASCII 47)
{
{false, false, false, false, true},
{false, false, false, false, true},
{false, false, false, true, false},
{false, false, true, false, false},
{false, true, false, false, false},
{true, false, false, false, false},
{true, false, false, false, false}
},
// 0 (ASCII 48)
{
{false, true, true, true, false},
{true, false, false, false, true},
{true, false, false, true, true},
{true, false, true, false, true},
{true, true, false, false, true},
{true, false, false, false, true},
{false, true, true, true, false}
},
// 1 (ASCII 49)
{
{false, false, true, false, false},
{false, true, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, true, true, true, false}
},
// 2 (ASCII 50)
{
{false, true, true, true, false},
{true, false, false, false, true},
{false, false, false, false, true},
{false, false, false, true, false},
{false, false, true, false, false},
{false, true, false, false, false},
{true, true, true, true, true}
},
// 3 (ASCII 51)
{
{false, true, true, true, false},
{true, false, false, false, true},
{false, false, false, false, true},
{false, false, true, true, false},
{false, false, false, false, true},
{true, false, false, false, true},
{false, true, true, true, false}
},
// 4 (ASCII 52)
{
{false, false, false, true, false},
{false, false, true, true, false},
{false, true, false, true, false},
{true, false, false, true, false},
{true, true, true, true, true},
{false, false, false, true, false},
{false, false, false, true, false}
},
// 5 (ASCII 53)
{
{true, true, true, true, true},
{true, false, false, false, false},
{true, true, true, true, false},
{false, false, false, false, true},
{false, false, false, false, true},
{true, false, false, false, true},
{false, true, true, true, false}
},
// 6 (ASCII 54)
{
{false, false, true, true, false},
{false, true, false, false, false},
{true, false, false, false, false},
{true, true, true, true, false},
{true, false, false, false, true},
{true, false, false, false, true},
{false, true, true, true, false}
},
// 7 (ASCII 55)
{
{true, true, true, true, true},
{false, false, false, false, true},
{false, false, false, true, false},
{false, false, true, false, false},
{false, true, false, false, false},
{false, true, false, false, false},
{false, true, false, false, false}
},
// 8 (ASCII 56)
{
{false, true, true, true, false},
{true, false, false, false, true},
{true, false, false, false, true},
{false, true, true, true, false},
{true, false, false, false, true},
{true, false, false, false, true},
{false, true, true, true, false}
},
// 9 (ASCII 57)
{
{false, true, true, true, false},
{true, false, false, false, true},
{true, false, false, false, true},
{false, true, true, true, true},
{false, false, false, false, true},
{false, false, false, true, false},
{false, true, true, false, false}
},
// : (ASCII 58)
{
{false, false, false, false, false},
{false, true, true, false, false},
{false, true, true, false, false},
{false, false, false, false, false},
{false, true, true, false, false},
{false, true, true, false, false},
{false, false, false, false, false}
},
// ; (ASCII 59)
{
{false, false, false, false, false},
{false, true, true, false, false},
{false, true, true, false, false},
{false, false, false, false, false},
{false, false, true, true, false},
{false, false, true, true, false},
{false, true, true, false, false}
},
// < (ASCII 60)
{
{false, false, false, true, false},
{false, false, true, false, false},
{false, true, false, false, false},
{true, false, false, false, false},
{false, true, false, false, false},
{false, false, true, false, false},
{false, false, false, true, false}
},
// = (ASCII 61)
{
{false, false, false, false, false},
{false, false, false, false, false},
{true, true, true, true, true},
{false, false, false, false, false},
{true, true, true, true, true},
{false, false, false, false, false},
{false, false, false, false, false}
},
// > (ASCII 62)
{
{false, true, false, false, false},
{false, false, true, false, false},
{false, false, false, true, false},
{false, false, false, false, true},
{false, false, false, true, false},
{false, false, true, false, false},
{false, true, false, false, false}
},
// ? (ASCII 63)
{
{false, true, true, true, false},
{true, false, false, false, true},
{false, false, false, false, true},
{false, false, false, true, false},
{false, false, true, false, false},
{false, false, false, false, false},
{false, false, true, false, false}
},
// @ (ASCII 64)
{
{false, true, true, true, false},
{true, false, false, false, true},
{false, false, false, false, true},
{false, true, true, false, true},
{true, false, true, false, true},
{true, false, true, true, true},
{false, true, true, false, false}
},
// A (ASCII 65)
{
{false, true, true, true, false},
{true, false, false, false, true},
{true, false, false, false, true},
{true, true, true, true, true},
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true}
},
// B (ASCII 66)
{
{true, true, true, true, false},
{true, false, false, false, true},
{true, false, false, false, true},
{true, true, true, true, false},
{true, false, false, false, true},
{true, false, false, false, true},
{true, true, true, true, false}
},
// C (ASCII 67)
{
{false, true, true, true, false},
{true, false, false, false, true},
{true, false, false, false, false},
{true, false, false, false, false},
{true, false, false, false, false},
{true, false, false, false, true},
{false, true, true, true, false}
},
// D (ASCII 68)
{
{true, true, true, true, false},
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true},
{true, true, true, true, false}
},
// E (ASCII 69)
{
{true, true, true, true, true},
{true, false, false, false, false},
{true, false, false, false, false},
{true, true, true, true, false},
{true, false, false, false, false},
{true, false, false, false, false},
{true, true, true, true, true}
},
// F (ASCII 70)
{
{true, true, true, true, true},
{true, false, false, false, false},
{true, false, false, false, false},
{true, true, true, true, false},
{true, false, false, false, false},
{true, false, false, false, false},
{true, false, false, false, false}
},
// G (ASCII 71)
{
{false, true, true, true, false},
{true, false, false, false, true},
{true, false, false, false, false},
{true, false, true, true, true},
{true, false, false, false, true},
{true, false, false, false, true},
{false, true, true, true, true}
},
// H (ASCII 72)
{
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true},
{true, true, true, true, true},
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true}
},
// I (ASCII 73)
{
{false, true, true, true, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, true, true, true, false}
},
// J (ASCII 74)
{
{false, false, true, true, true},
{false, false, false, true, false},
{false, false, false, true, false},
{false, false, false, true, false},
{false, false, false, true, false},
{true, false, false, true, false},
{false, true, true, false, false}
},
// K (ASCII 75)
{
{true, false, false, false, true},
{true, false, false, true, false},
{true, false, true, false, false},
{true, true, false, false, false},
{true, false, true, false, false},
{true, false, false, true, false},
{true, false, false, false, true}
},
// L (ASCII 76)
{
{true, false, false, false, false},
{true, false, false, false, false},
{true, false, false, false, false},
{true, false, false, false, false},
{true, false, false, false, false},
{true, false, false, false, false},
{true, true, true, true, true}
},
// M (ASCII 77)
{
{true, false, false, false, true},
{true, true, false, true, true},
{true, false, true, false, true},
{true, false, true, false, true},
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true}
},
// N (ASCII 78)
{
{true, false, false, false, true},
{true, false, false, false, true},
{true, true, false, false, true},
{true, false, true, false, true},
{true, false, false, true, true},
{true, false, false, false, true},
{true, false, false, false, true}
},
// O (ASCII 79)
{
{false, true, true, true, false},
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true},
{false, true, true, true, false}
},
// P (ASCII 80)
{
{true, true, true, true, false},
{true, false, false, false, true},
{true, false, false, false, true},
{true, true, true, true, false},
{true, false, false, false, false},
{true, false, false, false, false},
{true, false, false, false, false}
},
// Q (ASCII 81)
{
{false, true, true, true, false},
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, true, false, true},
{true, false, false, true, false},
{false, true, true, false, true}
},
// R (ASCII 82)
{
{true, true, true, true, false},
{true, false, false, false, true},
{true, false, false, false, true},
{true, true, true, true, false},
{true, false, true, false, false},
{true, false, false, true, false},
{true, false, false, false, true}
},
// S (ASCII 83)
{
{false, true, true, true, false},
{true, false, false, false, true},
{true, false, false, false, false},
{false, true, true, true, false},
{false, false, false, false, true},
{true, false, false, false, true},
{false, true, true, true, false}
},
// T (ASCII 84)
{
{true, true, true, true, true},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false}
},
// U (ASCII 85)
{
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true},
{false, true, true, true, false}
},
// V (ASCII 86)
{
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true},
{false, true, false, true, false},
{false, false, true, false, false}
},
// W (ASCII 87)
{
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, true, false, true},
{true, false, true, false, true},
{true, true, false, true, true},
{true, false, false, false, true}
},
// X (ASCII 88)
{
{true, false, false, false, true},
{true, false, false, false, true},
{false, true, false, true, false},
{false, false, true, false, false},
{false, true, false, true, false},
{true, false, false, false, true},
{true, false, false, false, true}
},
// Y (ASCII 89)
{
{true, false, false, false, true},
{true, false, false, false, true},
{false, true, false, true, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false}
},
// Z (ASCII 90)
{
{true, true, true, true, true},
{false, false, false, false, true},
{false, false, false, true, false},
{false, false, true, false, false},
{false, true, false, false, false},
{true, false, false, false, false},
{true, true, true, true, true}
},
// [ (ASCII 91)
{
{false, true, true, true, false},
{false, true, false, false, false},
{false, true, false, false, false},
{false, true, false, false, false},
{false, true, false, false, false},
{false, true, false, false, false},
{false, true, true, true, false}
},
// \ (ASCII 92)
{
{true, false, false, false, false},
{true, false, false, false, false},
{false, true, false, false, false},
{false, false, true, false, false},
{false, false, false, true, false},
{false, false, false, false, true},
{false, false, false, false, true}
},
// ] (ASCII 93)
{
{false, true, true, true, false},
{false, false, false, true, false},
{false, false, false, true, false},
{false, false, false, true, false},
{false, false, false, true, false},
{false, false, false, true, false},
{false, true, true, true, false}
},
// ^ (ASCII 94)
{
{false, false, true, false, false},
{false, true, false, true, false},
{true, false, false, false, true},
{false, false, false, false, false},
{false, false, false, false, false},
{false, false, false, false, false},
{false, false, false, false, false}
},
// _ (ASCII 95)
{
{false, false, false, false, false},
{false, false, false, false, false},
{false, false, false, false, false},
{false, false, false, false, false},
{false, false, false, false, false},
{false, false, false, false, false},
{true, true, true, true, true}
},
// ` (ASCII 96)
{
{false, true, true, false, false},
{false, false, true, false, false},
{false, false, false, true, false},
{false, false, false, false, false},
{false, false, false, false, false},
{false, false, false, false, false},
{false, false, false, false, false}
},
// a (ASCII 97)
{
{false, false, false, false, false},
{false, false, false, false, false},
{false, true, true, true, false},
{false, false, false, false, true},
{false, true, true, true, true},
{true, false, false, false, true},
{false, true, true, true, true}
},
// b (ASCII 98)
{
{true, false, false, false, false},
{true, false, false, false, false},
{true, false, true, true, false},
{true, true, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true},
{true, true, true, true, false}
},
// c (ASCII 99)
{
{false, false, false, false, false},
{false, false, false, false, false},
{false, true, true, true, false},
{true, false, false, false, true},
{true, false, false, false, false},
{true, false, false, false, true},
{false, true, true, true, false}
},
// d (ASCII 100)
{
{false, false, false, false, true},
{false, false, false, false, true},
{false, true, true, false, true},
{true, false, false, true, true},
{true, false, false, false, true},
{true, false, false, false, true},
{false, true, true, true, true}
},
// e (ASCII 101)
{
{false, false, false, false, false},
{false, false, false, false, false},
{false, true, true, true, false},
{true, false, false, false, true},
{true, true, true, true, true},
{true, false, false, false, false},
{false, true, true, true, false}
},
// f (ASCII 102)
{
{false, false, true, true, false},
{false, true, false, false, true},
{false, true, false, false, false},
{true, true, true, false, false},
{false, true, false, false, false},
{false, true, false, false, false},
{false, true, false, false, false}
},
// g (ASCII 103)
{
{false, false, false, false, false},
{false, false, false, false, false},
{false, true, true, true, true},
{true, false, false, false, true},
{true, false, false, false, true},
{false, true, true, true, true},
{false, false, false, false, true},
// Note: This would typically have a 7th row showing the descender
},
// h (ASCII 104)
{
{true, false, false, false, false},
{true, false, false, false, false},
{true, false, true, true, false},
{true, true, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true}
},
// i (ASCII 105)
{
{false, false, true, false, false},
{false, false, false, false, false},
{false, true, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, true, true, true, false}
},
// j (ASCII 106)
{
{false, false, false, true, false},
{false, false, false, false, false},
{false, false, true, true, false},
{false, false, false, true, false},
{false, false, false, true, false},
{false, false, false, true, false},
{true, false, false, true, false}
},
// k (ASCII 107)
{
{true, false, false, false, false},
{true, false, false, false, false},
{true, false, false, true, false},
{true, false, true, false, false},
{true, true, false, false, false},
{true, false, true, false, false},
{true, false, false, true, false}
},
// l (ASCII 108)
{
{false, true, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, true, true, true, false}
},
// m (ASCII 109)
{
{false, false, false, false, false},
{false, false, false, false, false},
{true, true, false, true, false},
{true, false, true, false, true},
{true, false, true, false, true},
{true, false, true, false, true},
{true, false, true, false, true}
},
// n (ASCII 110)
{
{false, false, false, false, false},
{false, false, false, false, false},
{true, false, true, true, false},
{true, true, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true}
},
// o (ASCII 111)
{
{false, false, false, false, false},
{false, false, false, false, false},
{false, true, true, true, false},
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true},
{false, true, true, true, false}
},
// p (ASCII 112)
{
{false, false, false, false, false},
{false, false, false, false, false},
{true, true, true, true, false},
{true, false, false, false, true},
{true, false, false, false, true},
{true, true, true, true, false},
{true, false, false, false, false}
},
// q (ASCII 113)
{
{false, false, false, false, false},
{false, false, false, false, false},
{false, true, true, false, true},
{true, false, false, true, true},
{true, false, false, false, true},
{false, true, true, true, true},
{false, false, false, false, true}
},
// r (ASCII 114)
{
{false, false, false, false, false},
{false, false, false, false, false},
{true, false, true, true, false},
{true, true, false, false, true},
{true, false, false, false, false},
{true, false, false, false, false},
{true, false, false, false, false}
},
// s (ASCII 115)
{
{false, false, false, false, false},
{false, false, false, false, false},
{false, true, true, true, false},
{true, false, false, false, false},
{false, true, true, true, false},
{false, false, false, false, true},
{true, true, true, true, false}
},
// t (ASCII 116)
{
{false, true, false, false, false},
{false, true, false, false, false},
{true, true, true, true, false},
{false, true, false, false, false},
{false, true, false, false, false},
{false, true, false, false, true},
{false, false, true, true, false}
},
// u (ASCII 117)
{
{false, false, false, false, false},
{false, false, false, false, false},
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, true, true},
{false, true, true, false, true}
},
// v (ASCII 118)
{
{false, false, false, false, false},
{false, false, false, false, false},
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true},
{false, true, false, true, false},
{false, false, true, false, false}
},
// w (ASCII 119)
{
{false, false, false, false, false},
{false, false, false, false, false},
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, true, false, true},
{true, false, true, false, true},
{false, true, false, true, false}
},
// x (ASCII 120)
{
{false, false, false, false, false},
{false, false, false, false, false},
{true, false, false, false, true},
{false, true, false, true, false},
{false, false, true, false, false},
{false, true, false, true, false},
{true, false, false, false, true}
},
// y (ASCII 121)
{
{false, false, false, false, false},
{false, false, false, false, false},
{true, false, false, false, true},
{true, false, false, false, true},
{true, false, false, false, true},
{false, true, true, true, true},
{false, false, false, false, true}
},
// z (ASCII 122)
{
{false, false, false, false, false},
{false, false, false, false, false},
{true, true, true, true, true},
{false, false, false, true, false},
{false, false, true, false, false},
{false, true, false, false, false},
{true, true, true, true, true}
},
// { (ASCII 123)
{
{false, false, false, true, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, true, false, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, false, true, false}
},
// | (ASCII 124)
{
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, true, false, false}
},
// } (ASCII 125)
{
{false, true, false, false, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, false, false, true, false},
{false, false, true, false, false},
{false, false, true, false, false},
{false, true, false, false, false}
},
// ~ (ASCII 126)
{
{false, false, false, false, false},
{false, true, false, false, false},
{true, false, true, false, true},
{false, false, false, true, false},
{false, false, false, false, false},
{false, false, false, false, false},
{false, false, false, false, false}
}
};
+41 -61
View File
@@ -3,10 +3,7 @@
#include <WebServer.h>
#include <ArduinoJson.h>
#include "index.h"
// For ESP8266, you would use:
// #include <ESP8266WiFi.h>
// #include <ESP8266WebServer.h>
#include "fonts.h"
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
@@ -19,70 +16,63 @@
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
struct Pixel
{
unsigned short x = 0;
unsigned short y = 0;
uint32_t color;
};
unsigned char saved_images_count = 0;
Pixel new_image[PANEL_PIXEL_COUNT][PANEL_PIXEL_COUNT];
// dont change this
Pixel saved_imaged[12][16][16] = {
uint32_t saved_imaged[12][16][16] = {
{
{
{0, 0, 0xFF000000}, {1, 0, 0xFF000000}, {2, 0, 0xFF000000}, {3, 0, 0xFF000000}, {4, 0, 0xFF000000}, {5, 0, 0xFF000000}, {6, 0, 0xFF000000}, {7, 0, 0xFF000000}, {8, 0, 0xFF000000}, {9, 0, 0xFF000000}, {10, 0, 0xFF000000}, {11, 0, 0xFF000000}, {12, 0, 0xFF000000}, {13, 0, 0xFF000000}, {14, 0, 0xFF000000}, {15, 0, 0xFF000000}
0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000
},
{
{0, 1, 0xFF000000}, {1, 1, 0xFF000000}, {2, 1, 0xFF000000}, {3, 1, 0xFF000000}, {4, 1, 0xFF000000}, {5, 1, 0xFF000000}, {6, 1, 0xFF000000}, {7, 1, 0xFF000000}, {8, 1, 0xFF000000}, {9, 1, 0xFF000000}, {10, 1, 0xFF000000}, {11, 1, 0xFF000000}, {12, 1, 0xFF000000}, {13, 1, 0xFF000000}, {14, 1, 0xFF000000}, {15, 1, 0xFF000000}
0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000
},
{
{0, 2, 0xFF000000}, {1, 2, 0xFF000000}, {2, 2, 0xFF000000}, {3, 2, 0xFF000000}, {4, 2, 0xFF000000}, {5, 2, 0xFFFFFF00}, {6, 2, 0xFFFFFF00}, {7, 2, 0xFFFFFF00}, {8, 2, 0xFFFFFF00}, {9, 2, 0xFFFFFF00}, {10, 2, 0xFFFFFF00}, {11, 2, 0xFF000000}, {12, 2, 0xFF000000}, {13, 2, 0xFF000000}, {14, 2, 0xFF000000}, {15, 2, 0xFF000000}
0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000
},
{
{0, 3, 0xFF000000}, {1, 3, 0xFF000000}, {2, 3, 0xFF000000}, {3, 3, 0xFFFFFF00}, {4, 3, 0xFFFFFF00}, {5, 3, 0xFFFFFF00}, {6, 3, 0xFFFFFF00}, {7, 3, 0xFFFFFF00}, {8, 3, 0xFFFFFF00}, {9, 3, 0xFFFFFF00}, {10, 3, 0xFFFFFF00}, {11, 3, 0xFFFFFF00}, {12, 3, 0xFFFFFF00}, {13, 3, 0xFF000000}, {14, 3, 0xFF000000}, {15, 3, 0xFF000000}
0xFF000000, 0xFF000000, 0xFF000000, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFF000000, 0xFF000000, 0xFF000000
},
{
{0, 4, 0xFF000000}, {1, 4, 0xFF000000}, {2, 4, 0xFF000000}, {3, 4, 0xFFFFFF00}, {4, 4, 0xFFFFFF00}, {5, 4, 0xFFFFFF00}, {6, 4, 0xFFFFFF00}, {7, 4, 0xFFFFFF00}, {8, 4, 0xFFFFFF00}, {9, 4, 0xFFFFFF00}, {10, 4, 0xFFFFFF00}, {11, 4, 0xFFFFFF00}, {12, 4, 0xFFFFFF00}, {13, 4, 0xFF000000}, {14, 4, 0xFF000000}, {15, 4, 0xFF000000}
0xFF000000, 0xFF000000, 0xFF000000, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFF000000, 0xFF000000, 0xFF000000
},
{
{0, 5, 0xFF000000}, {1, 5, 0xFF000000}, {2, 5, 0xFFFFFF00}, {3, 5, 0xFFFFFF00}, {4, 5, 0xFF000000}, {5, 5, 0xFF000000}, {6, 5, 0xFFFFFF00}, {7, 5, 0xFFFFFF00}, {8, 5, 0xFFFFFF00}, {9, 5, 0xFFFFFF00}, {10, 5, 0xFF000000}, {11, 5, 0xFF000000}, {12, 5, 0xFFFFFF00}, {13, 5, 0xFFFFFF00}, {14, 5, 0xFF000000}, {15, 5, 0xFF000000}
0xFF000000, 0xFF000000, 0xFFFFFF00, 0xFFFFFF00, 0xFF000000, 0xFF000000, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFF000000, 0xFF000000, 0xFFFFFF00, 0xFFFFFF00, 0xFF000000, 0xFF000000
},
{
{0, 6, 0xFF000000}, {1, 6, 0xFF000000}, {2, 6, 0xFFFFFF00}, {3, 6, 0xFFFFFF00}, {4, 6, 0xFF000000}, {5, 6, 0xFF000000}, {6, 6, 0xFFFFFF00}, {7, 6, 0xFFFFFF00}, {8, 6, 0xFFFFFF00}, {9, 6, 0xFFFFFF00}, {10, 6, 0xFF000000}, {11, 6, 0xFF000000}, {12, 6, 0xFFFFFF00}, {13, 6, 0xFFFFFF00}, {14, 6, 0xFF000000}, {15, 6, 0xFF000000}
0xFF000000, 0xFF000000, 0xFFFFFF00, 0xFFFFFF00, 0xFF000000, 0xFF000000, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFF000000, 0xFF000000, 0xFFFFFF00, 0xFFFFFF00, 0xFF000000, 0xFF000000
},
{
{0, 7, 0xFF000000}, {1, 7, 0xFF000000}, {2, 7, 0xFFFFFF00}, {3, 7, 0xFFFFFF00}, {4, 7, 0xFF000000}, {5, 7, 0xFF000000}, {6, 7, 0xFFFFFF00}, {7, 7, 0xFFFFFF00}, {8, 7, 0xFFFFFF00}, {9, 7, 0xFFFFFF00}, {10, 7, 0xFF000000}, {11, 7, 0xFF000000}, {12, 7, 0xFFFFFF00}, {13, 7, 0xFFFFFF00}, {14, 7, 0xFF000000}, {15, 7, 0xFF000000}
0xFF000000, 0xFF000000, 0xFFFFFF00, 0xFFFFFF00, 0xFF000000, 0xFF000000, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFF000000, 0xFF000000, 0xFFFFFF00, 0xFFFFFF00, 0xFF000000, 0xFF000000
},
{
{0, 8, 0xFF000000}, {1, 8, 0xFF000000}, {2, 8, 0xFFFFFF00}, {3, 8, 0xFFFFFF00}, {4, 8, 0xFFFFFF00}, {5, 8, 0xFFFFFF00}, {6, 8, 0xFFFFFF00}, {7, 8, 0xFFFFFF00}, {8, 8, 0xFFFFFF00}, {9, 8, 0xFFFFFF00}, {10, 8, 0xFFFFFF00}, {11, 8, 0xFFFFFF00}, {12, 8, 0xFFFFFF00}, {13, 8, 0xFFFFFF00}, {14, 8, 0xFF000000}, {15, 8, 0xFF000000}
0xFF000000, 0xFF000000, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFF000000, 0xFF000000
},
{
{0, 9, 0xFF000000}, {1, 9, 0xFF000000}, {2, 9, 0xFFFFFF00}, {3, 9, 0xFFFFFF00}, {4, 9, 0xFFFFFF00}, {5, 9, 0xFFFFFF00}, {6, 9, 0xFFFFFF00}, {7, 9, 0xFFFFFF00}, {8, 9, 0xFF000000}, {9, 9, 0xFF000000}, {10, 9, 0xFFFFFF00}, {11, 9, 0xFFFFFF00}, {12, 9, 0xFFFFFF00}, {13, 9, 0xFFFFFF00}, {14, 9, 0xFF000000}, {15, 9, 0xFF000000}
0xFF000000, 0xFF000000, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFF000000, 0xFF000000, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFF000000, 0xFF000000
},
{
{0, 10, 0xFF000000}, {1, 10, 0xFF000000}, {2, 10, 0xFFFFFF00}, {3, 10, 0xFFFFFF00}, {4, 10, 0xFFFFFF00}, {5, 10, 0xFFFFFF00}, {6, 10, 0xFFFFFF00}, {7, 10, 0xFF000000}, {8, 10, 0xFF000000}, {9, 10, 0xFFFFFF00}, {10, 10, 0xFF000000}, {11, 10, 0xFFFFFF00}, {12, 10, 0xFFFFFF00}, {13, 10, 0xFFFFFF00}, {14, 10, 0xFF000000}, {15, 10, 0xFF000000}
0xFF000000, 0xFF000000, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFF000000, 0xFF000000, 0xFFFFFF00, 0xFF000000, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFF000000, 0xFF000000
},
{
{0, 11, 0xFF000000}, {1, 11, 0xFF000000}, {2, 11, 0xFF000000}, {3, 11, 0xFFFFFF00}, {4, 11, 0xFFFFFF00}, {5, 11, 0xFFFFFF00}, {6, 11, 0xFFFFFF00}, {7, 11, 0xFF000000}, {8, 11, 0xFF000000}, {9, 11, 0xFFFFFF00}, {10, 11, 0xFF000000}, {11, 11, 0xFFFFFF00}, {12, 11, 0xFFFFFF00}, {13, 11, 0xFF000000}, {14, 11, 0xFF000000}, {15, 11, 0xFF000000}
0xFF000000, 0xFF000000, 0xFF000000, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFF000000, 0xFF000000, 0xFFFFFF00, 0xFF000000, 0xFFFFFF00, 0xFFFFFF00, 0xFF000000, 0xFF000000, 0xFF000000
},
{
{0, 12, 0xFF000000}, {1, 12, 0xFF000000}, {2, 12, 0xFF000000}, {3, 12, 0xFFFFFF00}, {4, 12, 0xFFFFFF00}, {5, 12, 0xFFFFFF00}, {6, 12, 0xFFFFFF00}, {7, 12, 0xFFFFFF00}, {8, 12, 0xFF000000}, {9, 12, 0xFF000000}, {10, 12, 0xFFFFFF00}, {11, 12, 0xFFFFFF00}, {12, 12, 0xFFFFFF00}, {13, 12, 0xFF000000}, {14, 12, 0xFF000000}, {15, 12, 0xFF000000}
0xFF000000, 0xFF000000, 0xFF000000, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFF000000, 0xFF000000, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFF000000, 0xFF000000, 0xFF000000
},
{
{0, 13, 0xFF000000}, {1, 13, 0xFF000000}, {2, 13, 0xFF000000}, {3, 13, 0xFF000000}, {4, 13, 0xFF000000}, {5, 13, 0xFFFFFF00}, {6, 13, 0xFFFFFF00}, {7, 13, 0xFFFFFF00}, {8, 13, 0xFFFFFF00}, {9, 13, 0xFFFFFF00}, {10, 13, 0xFFFFFF00}, {11, 13, 0xFF000000}, {12, 13, 0xFF000000}, {13, 13, 0xFF000000}, {14, 13, 0xFF000000}, {15, 13, 0xFF000000}
0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFFFFFF00, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000
},
{
{0, 14, 0xFF000000}, {1, 14, 0xFF000000}, {2, 14, 0xFF000000}, {3, 14, 0xFF000000}, {4, 14, 0xFF000000}, {5, 14, 0xFF000000}, {6, 14, 0xFF000000}, {7, 14, 0xFF000000}, {8, 14, 0xFF000000}, {9, 14, 0xFF000000}, {10, 14, 0xFF000000}, {11, 14, 0xFF000000}, {12, 14, 0xFF000000}, {13, 14, 0xFF000000}, {14, 14, 0xFF000000}, {15, 14, 0xFF000000}
0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000
},
{
{0, 15, 0xFF000000}, {1, 15, 0xFF000000}, {2, 15, 0xFF000000}, {3, 15, 0xFF000000}, {4, 15, 0xFF000000}, {5, 15, 0xFF000000}, {6, 15, 0xFF000000}, {7, 15, 0xFF000000}, {8, 15, 0xFF000000}, {9, 15, 0xFF000000}, {10, 15, 0xFF000000}, {11, 15, 0xFF000000}, {12, 15, 0xFF000000}, {13, 15, 0xFF000000}, {14, 15, 0xFF000000}, {15, 15, 0xFF000000}
0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000
}
}
};
void setPixel(unsigned short x, unsigned short y, uint32_t color)
void setPixel(unsigned short y, unsigned short x, uint32_t color)
{
if (y % 2 == 1)
{
@@ -91,48 +81,35 @@ void setPixel(unsigned short x, unsigned short y, uint32_t color)
pixels.setPixelColor(x + (y * PANEL_PIXEL_COUNT), color);
}
Pixel getPixelFromSaved(unsigned char i, int row, int col)
{
return saved_imaged[i][row][col];
}
Pixel getPixel(int row, int col)
{
return new_image[row][col];
}
void drawImageFromArr(int offset_x, int offset_y) {
void drawImageFromSaved(unsigned short offset_x, unsigned short offset_y, unsigned char i) {
for (int row = 0; row < 16; row++) {
for (int col = 0; col < 16; col++) {
Pixel px = getPixel(row, col);
if (px.color == 0) {
uint32_t px_color = saved_imaged[i][row][col];
if (!px_color) {
continue;
}
int pixel_x = px.x + offset_x;
int pixel_y = px.y + offset_y;
unsigned short pixel_x = col + offset_x;
unsigned short pixel_y = row + offset_y;
if (pixel_x >= 0 && pixel_x < PANEL_PIXEL_COUNT &&
pixel_y >= 0 && pixel_y < PANEL_PIXEL_COUNT) {
setPixel(pixel_x, pixel_y, px.color);
setPixel(pixel_x, pixel_y, px_color);
}
}
}
}
void drawImageFromSaved(int offset_x, int offset_y, unsigned char i) {
for (int row = 0; row < 16; row++) {
for (int col = 0; col < 16; col++) {
Pixel px = getPixelFromSaved(i, row, col);
if (px.color == 0) {
continue;
}
int pixel_x = px.x + offset_x;
int pixel_y = px.y + offset_y;
void drawCharacter(const bool (*character)[5], unsigned char offset_x, unsigned char offset_y, uint32_t color) {
for (unsigned char row = 0; row < 7; row++) {
for (unsigned char col = 0; col < 5; col++) {
if (character[row][col]) {
unsigned short pixel_x = col + offset_x;
unsigned short pixel_y = row + offset_y;
if (pixel_x >= 0 && pixel_x < PANEL_PIXEL_COUNT &&
pixel_y >= 0 && pixel_y < PANEL_PIXEL_COUNT) {
setPixel(pixel_x, pixel_y, px.color);
if (pixel_x >= 0 && pixel_x < PANEL_PIXEL_COUNT &&
pixel_y >= 0 && pixel_y < PANEL_PIXEL_COUNT) {
setPixel(pixel_x, pixel_y, color);
}
}
}
}
@@ -140,10 +117,13 @@ void drawImageFromSaved(int offset_x, int offset_y, unsigned char i) {
void setup() {
Serial.begin(115200);
pixels.begin();
pixels.clear();
drawCharacter(font7x5[0], 7, 5, 0xFFFFFFFF);
pixels.show();
drawImageFromSaved(0, 0, 0);
start_server();
}
+178
View File
@@ -0,0 +1,178 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
body {
font-family: Arial, sans-serif;
padding: 20px;
max-width: 800px;
margin: 0 auto;
}
h1 {
text-align: center;
color: #333;
}
.grid-container {
display: inline-grid;
grid-template-columns: repeat(5, 25px);
gap: 5px;
margin: 20px 0;
padding: 10px;
background-color: #f5f5f5;
border-radius: 8px;
}
.checkbox-cell {
width: 25px;
height: 25px;
cursor: pointer;
}
.controls {
margin: 20px 0;
text-align: center;
}
button {
padding: 10px 20px;
font-size: 16px;
cursor: pointer;
background-color: #0969da;
color: white;
border: none;
border-radius: 6px;
margin: 0 5px;
}
button:hover {
background-color: #0860ca;
}
.json-output {
margin-top: 20px;
padding: 15px;
background-color: #f6f8fa;
border: 1px solid #d0d7de;
border-radius: 6px;
font-family: 'Courier New', monospace;
font-size: 12px;
white-space: pre-wrap;
word-wrap: break-word;
max-height: 400px;
overflow-y: auto;
}
.hidden {
display: none;
}
.copy-button {
background-color: #2da44e;
margin-top: 10px;
}
.copy-button:hover {
background-color: #2c974b;
}
.copied-message {
color: #2da44e;
margin-left: 10px;
font-weight: bold;
}
</style>
</head>
<body>
<div class="grid-container" id="checkboxGrid"></div>
<div class="controls">
<button onclick="generateJSON()">Generate JSON</button>
<button onclick="clearGrid()">Clear All</button>
<button onclick="checkAll()">Check All</button>
</div>
<div id="jsonOutputContainer" class="hidden">
<h3>JSON Output:</h3>
<div class="json-output" id="jsonOutput"></div>
<button class="copy-button" onclick="copyToClipboard()">Copy to Clipboard</button>
<span id="copiedMessage" class="copied-message hidden">✓ Copied!</span>
</div>
<script>
// Initialize the 7x5 grid (7 rows, 5 columns)
function initializeGrid() {
const grid = document.getElementById('checkboxGrid');
grid.innerHTML = '';
for (let i = 0; i < 7; i++) {
for (let j = 0; j < 5; j++) {
const checkbox = document.createElement('input');
checkbox.type = 'checkbox';
checkbox.className = 'checkbox-cell';
checkbox.dataset.row = i;
checkbox.dataset.col = j;
grid.appendChild(checkbox);
}
}
}
// Generate JSON from checkbox states
function generateJSON() {
const checkboxes = document.querySelectorAll('.checkbox-cell');
const grid = [];
// Create 2D array (7 rows x 5 columns)
for (let i = 0; i < 7; i++) {
grid[i] = [];
for (let j = 0; j < 5; j++) {
const checkbox = document.querySelector(`[data-row="${i}"][data-col="${j}"]`);
grid[i][j] = checkbox.checked;
}
}
// Display JSON
const jsonOutput = document.getElementById('jsonOutput');
const jsonOutputContainer = document.getElementById('jsonOutputContainer');
jsonOutput.textContent = JSON.stringify(grid, null, 2);
jsonOutputContainer.classList.remove('hidden');
// Hide copied message
document.getElementById('copiedMessage').classList.add('hidden');
}
// Clear all checkboxes
function clearGrid() {
const checkboxes = document.querySelectorAll('.checkbox-cell');
checkboxes.forEach(cb => cb.checked = false);
}
// Check all checkboxes
function checkAll() {
const checkboxes = document.querySelectorAll('.checkbox-cell');
checkboxes.forEach(cb => cb.checked = true);
}
// Copy JSON to clipboard
function copyToClipboard() {
const jsonText = document.getElementById('jsonOutput').textContent;
navigator.clipboard.writeText(jsonText).then(() => {
const message = document.getElementById('copiedMessage');
message.classList.remove('hidden');
setTimeout(() => {
message.classList.add('hidden');
}, 2000);
}).catch(err => {
alert('Failed to copy to clipboard');
console.error('Copy failed:', err);
});
}
// Initialize grid on page load
initializeGrid();
</script>
</body>
</html>
+27 -2
View File
@@ -1,8 +1,21 @@
#include <WiFi.h>
#include <WebServer.h>
#include <ArduinoJson.h>
const char* ssid = "PPIA";
const char* password = "pawelpdaldonejta";
WebServer server(80);
// Declare the new_image buffer to temporarily store uploaded image
struct Pixel {
unsigned short x;
unsigned short y;
uint32_t color;
};
Pixel new_image[16][16];
void handleRoot() {
server.send(200, "text/html", index_html);
}
@@ -20,15 +33,27 @@ void handleUpload() {
for (JsonVariant val : arr) {
int col = 0;
for (JsonVariant val2 : val.as<JsonArray>()) {
long color = strtol(val2.as<const char*>(), NULL, 16);
unsigned long color = strtoul(val2.as<const char*>(), NULL, 16);
new_image[row][col] = { (unsigned short)col, (unsigned short)row, (uint32_t)color };
col++;
}
row++;
}
// Save the new image to the next slot
if (saved_images_count < 11) { // Ensure we don't overflow (max index is 11)
saved_images_count++;
}
// Copy new_image data to saved_imaged array
for (int r = 0; r < 16; r++) {
for (int c = 0; c < 16; c++) {
saved_imaged[saved_images_count][r][c] = new_image[r][c].color;
}
}
pixels.clear();
drawImageFromArr(0, 0);
drawImageFromSaved(0, 0, saved_images_count);
pixels.show();
server.send(200, "text/plain", "OK");
}