aboutsummaryrefslogtreecommitdiff
path: root/software/software.ino
diff options
context:
space:
mode:
authorlonkaars <loek@pipeframe.xyz>2021-11-21 13:25:44 +0100
committerlonkaars <loek@pipeframe.xyz>2021-11-21 13:25:44 +0100
commit5b821c8169b1c4e6a0d122fac6058271406c9190 (patch)
treed796480f5ed9c72f57424c04cc69e13c35531dae /software/software.ino
initial commit
Diffstat (limited to 'software/software.ino')
-rw-r--r--software/software.ino68
1 files changed, 68 insertions, 0 deletions
diff --git a/software/software.ino b/software/software.ino
new file mode 100644
index 0000000..8e1e90e
--- /dev/null
+++ b/software/software.ino
@@ -0,0 +1,68 @@
+#include "consts.h"
+
+extern unsigned long frame_time_millis;
+bool led_state[64];
+
+void shift(unsigned char data) {
+ #ifdef DEBUG
+ Serial.print("Sending data to shift register: ");
+ Serial.println(data, BIN);
+ #endif
+
+ // pull down latch
+ digitalWrite(PINOUT_LCK, LOW);
+
+ for(int i = 0; i < 8; i++) {
+ bool bit = data & 1 << i > 0;
+
+ // schrijf bit en pulse serial clock
+ digitalWrite(PINOUT_SER, bit);
+ digitalWrite(PINOUT_SCK, HIGH);
+ delayMicroseconds(CONFIG_SRSER_DELAY);
+ digitalWrite(PINOUT_SCK, LOW);
+ }
+
+ // pull up latch
+ digitalWrite(PINOUT_LCK, HIGH);
+}
+
+void setup() {
+ pinMode(PINOUT_SER, OUTPUT);
+ pinMode(PINOUT_SCK, OUTPUT);
+ pinMode(PINOUT_LCK, OUTPUT);
+
+ #ifdef DEBUG
+ Serial.begin(CONFIG_SERIAL_BAUD);
+ #endif
+
+ frame_time_millis = 1000 / CONFIG_FRAMERATE * CONFIG_FRAMERATE;
+}
+
+void test_effect1(unsigned long relative_time, bool (*leds)[64]) {
+ return;
+}
+void test_effect2(unsigned long relative_time, bool (*leds)[64]) {
+ return;
+}
+void test_effect3(unsigned long relative_time, bool (*leds)[64]) {
+ return;
+}
+
+
+#define SLIDESHOW_SIZE (int) 3
+#define SLIDESHOW_DURATION (int) 5e3
+// evil function pointer array
+void ( * slideshow_effects [SLIDESHOW_SIZE] )( unsigned long relative_time, bool (*leds)[64] ) = {
+ test_effect1,
+ test_effect2,
+ test_effect3
+};
+
+void loop() {
+ unsigned long current_time = millis();
+
+ unsigned long slide_time = current_time % SLIDESHOW_DURATION;
+ unsigned int slide_index = (current_time / SLIDESHOW_DURATION) % SLIDESHOW_SIZE;
+
+ slideshow_effects[slide_index](slide_time, &led_state);
+}