diff options
author | lonkaars <loek@pipeframe.xyz> | 2021-11-21 13:25:44 +0100 |
---|---|---|
committer | lonkaars <loek@pipeframe.xyz> | 2021-11-21 13:25:44 +0100 |
commit | 5b821c8169b1c4e6a0d122fac6058271406c9190 (patch) | |
tree | d796480f5ed9c72f57424c04cc69e13c35531dae /software/software.ino |
initial commit
Diffstat (limited to 'software/software.ino')
-rw-r--r-- | software/software.ino | 68 |
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); +} |