diff --git a/8By8/8By8.ino b/8By8/8By8.ino index 723e264..19f6a3c 100644 --- a/8By8/8By8.ino +++ b/8By8/8By8.ino @@ -23,6 +23,43 @@ #define DEBUG true #define TRACE false +// 3 width, 4 height + +const uint16_t numbers[10] = { + 0xF6F, 0x592, 0xE57, 0xE8F, 0x979, 0xF8F, 0xF3F, 0xE54, 0xFEF, 0xFCF, +}; + +// 8 width, 7 height + +const uint64_t letters[26]{ + 0x3C66667E666666, // A + 0x7C66667C66667C, // B + 0x3C66606060663C, // C + 0x7C66666666667C, // D + 0x7E60607C60607E, // E + 0x7E60607C606060, // F + 0x3C6660606E663C, // G + 0x6666667E666666, // H + 0x3C18181818183C, // I + 0x1E0C0C0C6C6C38, // J + 0x666C7870786C66, // K + 0x6060606060607E, // L + 0x63777F6B636363, // M + 0x63737B6F676363, // N + 0x3C66666666663C, // O + 0x7C6666667C6060, // P + 0x3C6666666E3C06, // Q + 0x7C66667C786C66, // R + 0x3C66603C06663C, // S + 0x7E5A1818181818, // T + 0x6666666666663C, // U + 0x66666666663C18, // V + 0x6363636B7F7763, // W + 0x6363361C366363, // X + 0x6666663C181818, // Y + 0x7E060C1830607E, // Z +}; + struct Triple { float x; float y; @@ -312,6 +349,136 @@ public: break; } } + + static void draw_num(int x, int y, int z, int num, int direction, + int brightness) { + // 0 = look along x + // 1 = look reverse x + // 2 = look along y + // 3 = look reverse y + if (num > 9 || num < 0) { + return; + } + switch (direction) { + case 0: { + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 4; j++) { + if ((numbers[num] >> (11 - (i + j * 3))) & 1) { + Cube::set_status(x, y - i, z - j, brightness); + } + else { + Cube::set_status(x, y - i, z - j, 0); + } + } + } + break; + } + case 1: { + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 4; j++) { + if ((numbers[num] >> (11 - (i + j * 3))) & 1) { + Cube::set_status(x, y + i, z - j, brightness); + } + else { + Cube::set_status(x, y + i, z - j, 0); + } + } + } + break; + } + case 2: { + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 4; j++) { + if ((numbers[num] >> (11 - (i + j * 3))) & 1) { + Cube::set_status(x + i, y, z - j, brightness); + } + else { + Cube::set_status(x + i, y, z - j, 0); + } + } + } + break; + } + case 3: { + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 4; j++) { + if ((numbers[num] >> (11 - (i + j * 3))) & 1) { + Cube::set_status(x - i, y, z - j, brightness); + } + else { + Cube::set_status(x - i, y, z - j, 0); + } + } + } + break; + } + } + } + + static void draw_letter(int x, int y, int z, int num, int direction, + int brightness) { + // 0 = look along x + // 1 = look reverse x + // 2 = look along y + // 3 = look reverse y + if (num > 25 || num < 0) { + return; + } + switch (direction) { + case 0: { + for (int i = 0; i < 8; i++) { + for (int j = 0; j < 7; j++) { + if ((numbers[num] >> (55 - (i + j * 8))) & 1) { + Cube::set_status(x, y - i, z - j, brightness); + } + else { + Cube::set_status(x, y - i, z - j, 0); + } + } + } + break; + } + case 1: { + for (int i = 0; i < 8; i++) { + for (int j = 0; j < 7; j++) { + if ((numbers[num] >> (55 - (i + j * 8))) & 1) { + Cube::set_status(x, y + i, z - j, brightness); + } + else { + Cube::set_status(x, y + i, z - j, 0); + } + } + } + break; + } + case 2: { + for (int i = 0; i < 8; i++) { + for (int j = 0; j < 7; j++) { + if ((numbers[num] >> (55 - (i + j * 8))) & 1) { + Cube::set_status(x + i, y, z - j, brightness); + } + else { + Cube::set_status(x + i, y, z - j, 0); + } + } + } + break; + } + case 3: { + for (int i = 0; i < 8; i++) { + for (int j = 0; j < 7; j++) { + if ((numbers[num] >> (55 - (i + j * 8))) & 1) { + Cube::set_status(x - i, y, z - j, brightness); + } + else { + Cube::set_status(x - i, y, z - j, 0); + } + } + } + break; + } + } + } }; enum Operators { @@ -767,10 +934,25 @@ void setup() { attachInterrupt(digitalPinToInterrupt(JOYSTICK_SWITCH), on_joystick_button, FALLING); + if (DEBUG) { + Serial.println("ALL ON"); + } + + for (int i = 0; i < 8; i++) { + for (int j = 0; j < 8; j++) { + for (int k = 0; k < 8; k++) { + Cube::set_status(i, j, k, 3); + } + } + } + + delay(5000); + Cube::clear(); + // Wait for z_ref to have value; while (SensorReader::angle.z == 0.0 || SensorReader::angle.y == 0.0 || SensorReader::angle.x == 0.0) { - Serial.println(""); + Serial.print(""); continue; } @@ -787,17 +969,6 @@ void setup() { Serial.println(z_ref); } - for (int i = 0; i < 8; i++) { - for (int j = 0; j < 8; j++) { - for (int k = 0; k < 8; k++) { - Cube::set_status(i, j, k, 3); - } - } - } - - delay(5000); - Cube::clear(); - Serial.println("Setup complete."); } diff --git a/Test/Test.ino b/Test/Test.ino index d1e46d0..08e4bb6 100644 --- a/Test/Test.ino +++ b/Test/Test.ino @@ -1,50 +1,14 @@ -byte status = 0; -byte layer = 0; - void setup() { - Serial.begin(115200); + pinMode(A7, INPUT_PULLUP); + pinMode(2, INPUT_PULLUP); for (int i = 0; i < 8; i++) { pinMode(22 + i, OUTPUT); + digitalWrite(22 + i, HIGH); } - // pinMode(30, OUTPUT); - // pinMode(31, OUTPUT); - - for (int i = 0; i < 8; i++) { - pinMode(30 + i, OUTPUT); - } - - for (int i = 0; i < 8; i++) { - pinMode(38 + i, OUTPUT); - } + Serial.begin(115200); } -int column = 0; - void loop() { - if (Serial.available()) { - int num = Serial.read(); - if (num >= '0' && num <= '7') { - num = num - '0'; - status ^= 1 << num; - - for (int i = 0; i < 8; i++) { - digitalWrite(22 + i, status >> i & 1); - } - - Serial.println(status, BIN); - } else if (num >= 'a' && num <= 'h') { - num = num - 'a'; - column = num; - Serial.print("LOAD"); - Serial.print(num); - Serial.println(status, BIN); - digitalWrite(30 + column, HIGH); - digitalWrite(30 + column, LOW); - } - else if (num == 'z') { - digitalWrite(38 + layer, LOW); - layer = (layer + 1) % 8; - digitalWrite(38 + layer, HIGH); - } - } + Serial.println(digitalRead(2)); + delay(100); } \ No newline at end of file