summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManuel Traut <manut@mecka.net>2012-07-18 07:23:00 +0200
committerManuel Traut <manut@mecka.net>2012-07-18 07:23:00 +0200
commit3feb08d4edc0f42beccba8030cee392a216de8f7 (patch)
treed494eb5f27b655574c22519968c68ab55a8b05d8
parentaead2df924d67d14e9eba0f074dbbbcb20c9b7cc (diff)
add fisch delikatessen blinkendemo
Signed-off-by: Manuel Traut <manut@mecka.net>
-rw-r--r--arduino/blinkme.ino139
1 files changed, 139 insertions, 0 deletions
diff --git a/arduino/blinkme.ino b/arduino/blinkme.ino
new file mode 100644
index 0000000..09a1c14
--- /dev/null
+++ b/arduino/blinkme.ino
@@ -0,0 +1,139 @@
+/*
+ Blink
+ Turns on an LED on for one second, then off for one second, repeatedly.
+
+ This example code is in the public domain.
+ */
+
+
+// the setup routine runs once when you press reset:
+void setup() {
+ // initialize the digital pin as an output.
+ pinMode(13, OUTPUT);
+ pinMode(12, OUTPUT);
+ pinMode(11, OUTPUT);
+ pinMode(10, OUTPUT);
+}
+
+int LED0 = 0x01;
+int LED1 = 0x02;
+int LED2 = 0x04;
+int LED3 = 0x08;
+
+int PWM_BASE = 15;
+
+void channel_set (int duration, int leds, int pwm)
+{
+ for (int i = 0; i < duration; i+=PWM_BASE) {
+ digitalWrite (10, leds & LED0);
+ digitalWrite (11, leds & LED1);
+ digitalWrite (12, leds & LED2);
+ digitalWrite (13, leds & LED3);
+ if ((pwm > PWM_BASE) || (pwm == 0)) {
+ delay (PWM_BASE);
+ continue;
+ }
+ delay (PWM_BASE-pwm);
+ digitalWrite (10, 0);
+ digitalWrite (11, 0);
+ digitalWrite (12, 0);
+ digitalWrite (13, 0);
+ delay (PWM_BASE-(PWM_BASE-pwm));
+ }
+}
+
+void run_left(int num, int f, int pwm)
+{
+ int i = 1;
+
+ while (num) {
+ channel_set (f, LED3, pwm);
+ channel_set (f, LED2, pwm);
+ channel_set (f, LED1, pwm);
+ if (i >= num)
+ break;
+ channel_set (f, LED0, pwm);
+ i++;
+ }
+}
+
+void run_right(int num, int f, int pwm)
+{
+ int i = 1;
+
+ while (num) {
+ channel_set (f, LED0, pwm);
+ channel_set (f, LED1, pwm);
+ channel_set (f, LED2, pwm);
+ if (i >= num)
+ break;
+ channel_set (f, LED3, pwm);
+ i++;
+ }
+}
+
+void red_white (int num, int f, int pwm)
+{
+ for (int i=0; i<num; i++)
+ {
+ channel_set (f, LED0|LED2, pwm);
+ channel_set (f, 0, pwm);
+ }
+ for (int i=0; i<num; i++)
+ {
+ channel_set (f, LED1|LED3, pwm);
+ channel_set (f, 0, pwm);
+ }
+ for (int i=0; i<num; i++)
+ {
+ channel_set (f, LED1, pwm);
+ channel_set (f, LED3, pwm);
+ }
+ for (int i=0; i<num; i++)
+ {
+ channel_set (f, LED0, pwm);
+ channel_set (f, LED2, pwm);
+ }
+}
+
+void lr_speedup (int num, int pwm)
+{
+ int f_start = 100;
+ int i = 0;
+ do {
+ run_right (num-i, f_start, pwm);
+ run_left (num-i, f_start, pwm);
+ i++;
+ f_start += (5 * i);
+ } while (i < num);
+}
+
+void flash (int num, int on, int off, int pwm)
+{
+ for (int i=0; i<num; i++)
+ {
+ channel_set (on, LED0|LED2, pwm);
+ channel_set (off, 0, pwm);
+ channel_set (on, LED1|LED3, pwm);
+ channel_set (off, 0, pwm);
+ }
+}
+
+void dimmer (int f)
+{
+ for (int i = PWM_BASE; i > 0; i--)
+ channel_set (f*(i/4), LED0|LED1|LED2|LED3, i);
+
+ channel_set (f*20, LED0|LED1|LED2|LED3, 0);
+
+ for (int i = 1; i <= PWM_BASE; i++)
+ channel_set (f*(i/4), LED0|LED1|LED2|LED3, i);
+}
+
+// the loop routine runs over and over again forever:
+void loop() {
+ dimmer (250);
+ red_white (3, 400, PWM_BASE-1);
+ flash (10, 200, 80, PWM_BASE-1);
+ lr_speedup (4, PWM_BASE-1);
+}