aboutsummaryrefslogtreecommitdiff
path: root/spaghetti-monster/fsm-misc.c
diff options
context:
space:
mode:
Diffstat (limited to 'spaghetti-monster/fsm-misc.c')
-rw-r--r--spaghetti-monster/fsm-misc.c91
1 files changed, 91 insertions, 0 deletions
diff --git a/spaghetti-monster/fsm-misc.c b/spaghetti-monster/fsm-misc.c
new file mode 100644
index 0000000..46325ef
--- /dev/null
+++ b/spaghetti-monster/fsm-misc.c
@@ -0,0 +1,91 @@
+/*
+ * fsm-misc.c: Miscellaneous function for SpaghettiMonster.
+ *
+ * Copyright (C) 2017 Selene ToyKeeper
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef FSM_MISC_C
+#define FSM_MISC_C
+
+#ifdef USE_BLINK_NUM
+uint8_t blink_digit(uint8_t num) {
+ //StatePtr old_state = current_state;
+
+ // "zero" digit gets a single short blink
+ uint8_t ontime = 200;
+ if (!num) { ontime = 8; num ++; }
+
+ for (; num>0; num--) {
+ set_level(BLINK_BRIGHTNESS);
+ if (! nice_delay_ms(ontime)) { set_level(0); return 0; }
+ set_level(0);
+ //if (current_state != old_state) return 0;
+ if (! nice_delay_ms(400)) return 0;
+ //if (current_state != old_state) return 0;
+ }
+ return nice_delay_ms(600);
+}
+
+uint8_t blink_num(uint8_t num) {
+ //StatePtr old_state = current_state;
+ #if 0
+ uint8_t hundreds = num / 100;
+ num = num % 100;
+ uint8_t tens = num / 10;
+ num = num % 10;
+ #else // 8 bytes smaller
+ uint8_t hundreds = 0;
+ uint8_t tens = 0;
+ for(; num >= 100; hundreds ++, num -= 100);
+ for(; num >= 10; tens ++, num -= 10);
+ #endif
+
+ #if 0
+ // wait a moment in the dark before starting
+ set_level(0);
+ if (! nice_delay_ms(200)) return 0;
+ #endif
+
+ #if 0
+ if (hundreds) {
+ if (! blink_digit(hundreds)) return 0;
+ if (! blink_digit(tens)) return 0;
+ }
+ else if (tens) {
+ if (! blink_digit(tens)) return 0;
+ }
+ if (! blink_digit(num)) return 0;
+ return nice_delay_ms(1000);
+ #else // same size :(
+ if (hundreds) if (! blink_digit(hundreds)) return 0;
+ if (hundreds || tens) if (! blink_digit(tens)) return 0;
+ if (! blink_digit(num)) return 0;
+ return nice_delay_ms(1000);
+ #endif
+
+ /*
+ uint8_t volts, tenths;
+ volts = voltage / 10;
+ tenths = voltage % 10;
+ if (! blink(volts)) return;
+ if (! nice_delay_ms(200)) return;
+ if (! blink(tenths)) return;
+ nice_delay_ms(200);
+ */
+}
+#endif
+
+#endif