diff options
Diffstat (limited to 'software')
-rw-r--r-- | software/animation.c | 0 | ||||
-rw-r--r-- | software/animation.h | 6 | ||||
-rw-r--r-- | software/consts.h | 13 | ||||
-rw-r--r-- | software/effects.c | 0 | ||||
-rw-r--r-- | software/effects.h | 0 | ||||
-rw-r--r-- | software/software.ino | 68 |
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); +} |