aboutsummaryrefslogtreecommitdiff
path: root/software
diff options
context:
space:
mode:
Diffstat (limited to 'software')
-rw-r--r--software/animation.c0
-rw-r--r--software/animation.h6
-rw-r--r--software/consts.h13
-rw-r--r--software/effects.c0
-rw-r--r--software/effects.h0
-rw-r--r--software/software.ino68
6 files changed, 87 insertions, 0 deletions
diff --git a/software/animation.c b/software/animation.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/software/animation.c
diff --git a/software/animation.h b/software/animation.h
new file mode 100644
index 0000000..fce7081
--- /dev/null
+++ b/software/animation.h
@@ -0,0 +1,6 @@
+#pragma once
+
+#include "consts.h"
+
+unsigned long clamp_time(unsigned long unclamped_time) {
+}
diff --git a/software/consts.h b/software/consts.h
new file mode 100644
index 0000000..b9ddb73
--- /dev/null
+++ b/software/consts.h
@@ -0,0 +1,13 @@
+#pragma once
+
+#define PINOUT_SCK 4
+#define PINOUT_SER 2
+#define PINOUT_LCK 3
+
+#define CONFIG_FRAMERATE 60
+#define CONFIG_PWM_FREQ 1000
+// shift register serial delay (rekening houden met propagation delay) (in nanoseconden)
+#define CONFIG_SRSER_DELAY 20
+
+#define CONFIG_SERIAL_BAUD 115200
+//#define DEBUG
diff --git a/software/effects.c b/software/effects.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/software/effects.c
diff --git a/software/effects.h b/software/effects.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/software/effects.h
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);
+}