blob: 9f255bd4f1bb35af1b267795531022d55441c24f (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
/* 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 4 // 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 = 70;
int StrobeMedFreq = 30;
int StrobeFastFreq = 5;
void setup() {
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 '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(IN_ADJ) == HIGH) {
if (CDimDirection == 1) { CBrightness++; }
if (CDimDirection == 0) { CBrightness--; }
if (CBrightness >= 255) { CDimDirection = 0; }
if (CBrightness <= 0) { CDimDirection = 1; }
}
// Do animation-things
switch (CMode) {
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 setOutPwm(int brightness) {
analogWrite(OUT_PWM, brightness);
}
void strobe() {
if (StrobeState == 1) {
StrobeState = 0;
setOutPwm(0);
} else if (StrobeState == 0) {
StrobeState = 1;
setOutPwm(CBrightness);
}
}
|