diff --git a/firmware/src/main.cpp b/firmware/src/main.cpp index 378a9d7..10a113a 100644 --- a/firmware/src/main.cpp +++ b/firmware/src/main.cpp @@ -1,174 +1,191 @@ #include -#include -// #define NUM_LEDS 1 -// #define DATA_PIN 23u - -// CRGB leds[NUM_LEDS]; - -#define Q1 5 -#define Q2 29 -#define Q3 28 -#define Q4 27 -#define Q5 26 -#define Q6 22 -#define Q7 21 -#define Q8 20 - -#define Q9 8 -#define Q10 19 -#define Q11 18 -#define Q12 17 -#define Q13 16 -#define Q14 9 -#define Q15 10 -#define Q16 11 - -#define Qout 12 - -#define SER 2 -#define OE 3 -#define RCLK 4 -#define SRCLK 6 -#define SRCLR 7 +#define COL_SER 0 +#define COL_OE 26 +#define COL_RCLK 27 +#define COL_SRCLK 28 +#define COL_SRCLR 29 +#define ROW_SER 8 +#define ROW_OE 7 +#define ROW_RCLK 6 +#define ROW_SRCLK 5 +#define ROW_SRCLR 4 +#define ROW_COUNT 24 +#define COL_COUNT 14 void printOut() { Serial.println("------"); + Serial.println("Row:"); Serial.print("SER: "); - Serial.println(digitalRead(SER)); + Serial.println(digitalRead(ROW_SER)); Serial.print("OE_N: "); - Serial.println(digitalRead(OE)); + Serial.println(digitalRead(ROW_OE)); Serial.print("RCLK: "); - Serial.println(digitalRead(RCLK)); + Serial.println(digitalRead(ROW_RCLK)); Serial.print("SRCLK: "); - Serial.println(digitalRead(SRCLK)); + Serial.println(digitalRead(ROW_SRCLK)); Serial.print("SRCLR_N: "); - Serial.println(digitalRead(SRCLR)); + Serial.println(digitalRead(ROW_SRCLR)); + Serial.println("------"); + Serial.println("Col:"); - // uint16_t q = digitalRead(Q1) << 8 | - // digitalRead(Q2) << 7 | - // digitalRead(Q3) << 6 | - // digitalRead(Q4) << 5 | - // digitalRead(Q5) << 4 | - // digitalRead(Q6) << 3 | - // digitalRead(Q7) << 2 | - // digitalRead(Q8) << 1 | - // digitalRead(Qout); + Serial.print("SER: "); + Serial.println(digitalRead(COL_SER)); - // Serial.print("Q: "); - // Serial.println(q, BIN); - Serial.println(); + Serial.print("OE_N: "); + Serial.println(digitalRead(COL_OE)); - Serial.print(digitalRead(Q1)); - Serial.print(digitalRead(Q2)); - Serial.print(digitalRead(Q3)); - Serial.print(digitalRead(Q4)); - Serial.print(digitalRead(Q5)); - Serial.print(digitalRead(Q6)); - Serial.print(digitalRead(Q7)); - Serial.print(digitalRead(Q8)); - Serial.print(" "); - Serial.print(digitalRead(Q9)); - Serial.print(digitalRead(Q10)); - Serial.print(digitalRead(Q11)); - Serial.print(digitalRead(Q12)); - Serial.print(digitalRead(Q13)); - Serial.print(digitalRead(Q14)); - Serial.print(digitalRead(Q15)); - Serial.print(digitalRead(Q16)); + Serial.print("RCLK: "); + Serial.println(digitalRead(COL_RCLK)); - Serial.print(" "); - Serial.print(digitalRead(Qout)); - Serial.println(); + Serial.print("SRCLK: "); + Serial.println(digitalRead(COL_SRCLK)); + + Serial.print("SRCLR_N: "); + Serial.println(digitalRead(COL_SRCLR)); } void setup() { - // pinMode(LED_BUILTIN, OUTPUT); - // pinMode(24u, INPUT_PULLUP); - // Serial.begin(9600); - // FastLED.addLeds(leds, NUM_LEDS); - // FastLED.setBrightness(30); + Serial.begin(9600); + Serial.println("Hello"); - pinMode(Q1, INPUT_PULLDOWN); - pinMode(Q2, INPUT_PULLDOWN); - pinMode(Q3, INPUT_PULLDOWN); - pinMode(Q4, INPUT_PULLDOWN); - pinMode(Q5, INPUT_PULLDOWN); - pinMode(Q6, INPUT_PULLDOWN); - pinMode(Q7, INPUT_PULLDOWN); - pinMode(Q8, INPUT_PULLDOWN); - pinMode(Q9, INPUT_PULLDOWN); - pinMode(Q10, INPUT_PULLDOWN); - pinMode(Q11, INPUT_PULLDOWN); - pinMode(Q12, INPUT_PULLDOWN); - pinMode(Q13, INPUT_PULLDOWN); - pinMode(Q14, INPUT_PULLDOWN); - pinMode(Q15, INPUT_PULLDOWN); - pinMode(Q16, INPUT_PULLDOWN); - pinMode(Qout, INPUT_PULLDOWN); + // set up col pins + pinMode(COL_SER, OUTPUT); + pinMode(COL_OE, OUTPUT); + pinMode(COL_RCLK, OUTPUT); + pinMode(COL_SRCLK, OUTPUT); + pinMode(COL_SRCLR, OUTPUT); - // 1 - pinMode(SER, OUTPUT); - // 2 - pinMode(OE, OUTPUT); - digitalWrite(OE, HIGH); - // 3 - pinMode(RCLK, OUTPUT); - // 4 - pinMode(SRCLK, OUTPUT); - // 5 - pinMode(SRCLR, OUTPUT); - digitalWrite(SRCLR, HIGH); + // set up row pins + pinMode(ROW_SER, OUTPUT); + pinMode(ROW_OE, OUTPUT); + pinMode(ROW_RCLK, OUTPUT); + pinMode(ROW_SRCLK, OUTPUT); + pinMode(ROW_SRCLR, OUTPUT); + + // clear output - cols + digitalWrite(COL_SER, LOW); + digitalWrite(COL_OE, HIGH); + + digitalWrite(COL_SRCLR, LOW); + digitalWrite(COL_RCLK, HIGH); + digitalWrite(COL_RCLK, LOW); + digitalWrite(COL_SRCLR, HIGH); + + digitalWrite(COL_OE, LOW); + + // clear output - rows + digitalWrite(ROW_SER, LOW); + digitalWrite(ROW_OE, HIGH); + + digitalWrite(ROW_SRCLR, LOW); + digitalWrite(ROW_RCLK, HIGH); + digitalWrite(ROW_RCLK, LOW); + digitalWrite(ROW_SRCLR, HIGH); + + digitalWrite(ROW_OE, LOW); printOut(); + + digitalWrite(ROW_SER, HIGH); + digitalWrite(ROW_SRCLK, HIGH); + digitalWrite(ROW_SRCLK, LOW); + digitalWrite(ROW_SER, LOW); + digitalWrite(ROW_RCLK, HIGH); + digitalWrite(ROW_RCLK, LOW); + + digitalWrite(COL_SER, HIGH); + digitalWrite(COL_SRCLK, HIGH); + digitalWrite(COL_SRCLK, LOW); + digitalWrite(COL_SER, LOW); + digitalWrite(COL_SRCLK, HIGH); + digitalWrite(COL_SRCLK, LOW); + digitalWrite(COL_RCLK, HIGH); + digitalWrite(COL_RCLK, LOW); + } -// uint8_t r, g, b; - -uint16_t prevQ = 255; - void loop() { - // r += 3; - // g += 5; - // b += 7; - - // leds[0] = CRGB(r, g, b); - // FastLED.show(); - // delay(100); - - // if (digitalRead(24u) == LOW) { - // Serial.println("Button pressed"); - // } - char c = Serial.read(); if (c == 'o') { printOut(); } - if (c == '1') { - digitalWrite(SER, !digitalRead(SER)); - printOut(); - } else if (c == '2') { - digitalWrite(OE, !digitalRead(OE)); - printOut(); - } else if (c == '3') { - digitalWrite(RCLK, HIGH); - digitalWrite(RCLK, LOW); - printOut(); - } else if (c == '4') { - digitalWrite(SRCLK, HIGH); - digitalWrite(SRCLK, LOW); - printOut(); - } else if (c == '5') { - digitalWrite(SRCLR, !digitalRead(SRCLR)); - printOut(); + // clear columns + digitalWrite(COL_SRCLR, LOW); + digitalWrite(COL_SRCLK, HIGH); + digitalWrite(COL_SRCLK, LOW); + digitalWrite(COL_SRCLR, HIGH); + + // start selecting columns + digitalWrite(COL_SER, HIGH); + + for (int y = 0; y < COL_COUNT; y++) { + // next column + digitalWrite(COL_SRCLK, HIGH); + digitalWrite(COL_SRCLK, LOW); + // only one column + digitalWrite(COL_SER, LOW); + // we use 7/8 stages on shift registers for columns + if (y % 7 == 0) { + digitalWrite(COL_SRCLK, HIGH); + digitalWrite(COL_SRCLK, LOW); + } + // clear rows + digitalWrite(ROW_SRCLR, LOW); + digitalWrite(ROW_SRCLK, HIGH); + digitalWrite(ROW_SRCLK, LOW); + digitalWrite(ROW_SRCLR, HIGH); + // latch cleared row + digitalWrite(ROW_RCLK, HIGH); + digitalWrite(ROW_RCLK, LOW); + // latch column + digitalWrite(COL_RCLK, HIGH); + digitalWrite(COL_RCLK, LOW); + + // start selecting rows + digitalWrite(ROW_SER, HIGH); + + for (int x = 0; x < ROW_COUNT; x++) { + // next row + digitalWrite(ROW_SRCLK, HIGH); + digitalWrite(ROW_SRCLK, LOW); + // only one row + digitalWrite(ROW_SER, LOW); + // latch + digitalWrite(ROW_RCLK, HIGH); + digitalWrite(ROW_RCLK, LOW); + // delay + // delay(1); + } } + + + + // if (c == '1') { + // digitalWrite(SER, !digitalRead(SER)); + // printOut(); + // } else if (c == '2') { + // digitalWrite(OE, !digitalRead(OE)); + // printOut(); + // } else if (c == '3') { + // digitalWrite(RCLK, HIGH); + // digitalWrite(RCLK, LOW); + // printOut(); + // } else if (c == '4') { + // digitalWrite(SRCLK, HIGH); + // digitalWrite(SRCLK, LOW); + // printOut(); + // } else if (c == '5') { + // digitalWrite(SRCLR, !digitalRead(SRCLR)); + // printOut(); + // } }