aboutsummaryrefslogtreecommitdiff
path: root/Kostyme.ino
diff options
context:
space:
mode:
authorjakobst1n <jakob.stendahl@outlook.com>2018-11-02 09:11:13 +0100
committerjakobst1n <jakob.stendahl@outlook.com>2018-11-02 09:11:13 +0100
commitdce35f242f8f0c46cb90362156ab8e487c1f225e (patch)
treed6242c1a8b74671ab55d834dc001655d188c2ec8 /Kostyme.ino
parentb7fbb9b1304f45e2611a2dfaa590545f877835e0 (diff)
downloadStickman-Costume-dce35f242f8f0c46cb90362156ab8e487c1f225e.tar.gz
Stickman-Costume-dce35f242f8f0c46cb90362156ab8e487c1f225e.zip
:sparkles: Add two more modes
Diffstat (limited to 'Kostyme.ino')
-rw-r--r--Kostyme.ino122
1 files changed, 99 insertions, 23 deletions
diff --git a/Kostyme.ino b/Kostyme.ino
index af3bbb1..dfc7ad8 100644
--- a/Kostyme.ino
+++ b/Kostyme.ino
@@ -1,32 +1,108 @@
-#define OUTPIN 1
-#define DIMPIN 3
+/* This script is made for a LED-stickman-costume
+ * Author(s): JakobST1n
+ * These are the currently implemented modes
+ * 0 - Static
+ * 1 - Slow Strobe
+ * 2 Medium Strobe
+ * 3 Fast Strobe
+ */
+#define OUT_PWM 1 // The LED-strip is connected to PB1
+#define IN_MODE 2 // Pressing this increments 'mode' by one
+#define IN_ADJ 3 // This button adjusts the brightness
+
+int CMode = 0; // This is just the current mode
+int ExistingModes = 4; // This is the number of modes that are implemented
+// Used for saving button state
+bool IN_ADJ_STATE = false; //
+bool IN_MODE_STATE = false; //
+// These are for the general pwm-frequency (not all modes care)
+int CBrightness = 50; // The brightness of the strip, between '0' and '255'
+int CDimDirection = 0; // Used to know if the brightness should be increasing or decreasing based on the button press
+// These are used by the strobe-effect
+int CStrobeRevs = 0; // A running counter for the strobe-light
+int StrobeState = 0; // '0' or '1' for saving the state of the output
+int StrobeSlowFreq = 1024;
+int StrobeMedFreq = 600;
+int StrobeFastFreq = 200;
-int CBrightness = 0;
-int CDimDirection = 1;
void setup() {
- pinMode(OUTPIN, OUTPUT);
- pinMode(DIMPIN, INPUT);
+ pinMode(OUT_PWM, OUTPUT);
+ pinMode(IN_ADJ, INPUT);
+ pinMode(IN_MODE, INPUT);
}
+/* loop
+ *
+ * it takes aprox. ?ms to run through the loop once, whitout changing pwm freq
+ */
void loop() {
- delay(1);
-
- if (digitalRead(DIMPIN) == HIGH) { dim(); }
- analogWrite(OUTPIN, CBrightness);
+ delay(1);
+
+ // If 'mode-button' is pressed, increment mode, reset mode if last mode reaced
+ if ( (digitalRead(IN_MODE) == HIGH) && (IN_MODE_STATE == false) ) {
+ CMode++;
+ if (CMode >= ExistingModes) {
+ CMode = 0;
+ }
+ }
+ // If 'Adjust-button' is pressed
+ if (digitalRead(DIMPIN) == HIGH) {
+ if (CDimDirection == 1) { CBrightness++; }
+ if (CDimDirection == 0) { CBrightness--; }
+ if (CBrightness >= 255) { CDimDirection = 0; }
+ if (CBrightness <= 0) { CDimDirection = 1; }
+ }
+
+ // Do animation-things
+ switch (var) {
+ case 0: // Static
+ analogWrite(OUT_PWM, CBrightness);
+ break;
+
+ case 1: // Slow Strobe
+ CStrobeRevs++;
+ if (CStrobeRevs >= StrobeSlowFreq) {
+ CStrobeRevs = 0;
+ strobe();
+ }
+ break;
+
+ case 2: // Slow Strobe
+ CStrobeRevs++;
+ if (CStrobeRevs >= StrobeMedFreq) {
+ CStrobeRevs = 0;
+ strobe();
+ }
+ break;
+
+ case 3: // Slow Strobe
+ CStrobeRevs++;
+ if (CStrobeRevs >= StrobeFastFreq) {
+ CStrobeRevs = 0;
+ strobe();
+ }
+ break;
+
+ default: // Default to mode zero
+ CMode = 0;
+ break;
+ }
+
+ IN_MODE_STATE = digitalRead(IN_MODE);
}
-void dim() {
- if (CDimDirection == 1) {
- CBrightness++;
- }
- if (CDimDirection == 0) {
- CBrightness--;
- }
- if (CBrightness >= 255) {
- CDimDirection = 0;
- }
- if (CBrightness <= 0) {
- CDimDirection = 1;
- }
+void setOutPwm(int brightness) {
+ analogWrite(OUT_PWM, brightness);
}
+
+void strobe() {
+ if (StrobeState == 1) {
+ StrobeState = 0;
+ setOutPwm(0);
+ }
+ if (StrobeState == 0) {
+ StrobeState = 1;
+ setOutPwm(CBrightness);
+ }
+} \ No newline at end of file