-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathled_toy.arduino
135 lines (109 loc) · 2.71 KB
/
led_toy.arduino
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
int PIN_BASE=2;
int PINS_TO_USE=10;
#define STANDARD 0x0
#define INSTANT 0x1 // not &0x1 ? then standard speed
#define LEAVE_OFF 0x2
#define LEAVE_ON 0x3
// if neither LEAVE, then on off
// maybe if both LEAVE, then off/on??
#define RIGHTWARD 0x2 // 01?
#define LEFTWARD 0x4 // 10?
#define CENTEROUT 0x6 // 11?
#define SOLO 0x10
#define NEIGHBOR 0x20
#define SPAN 0x30
#define FADE_MASK 0x30 // though instant implies no fade
#define MAXVAL 0xff
#define MIDVAL 0x7f
#define MINVAL 0x00
const int DELAY_BASE=25;
int currentDelay = DELAY_BASE;
void setup() {
// initialize digital pin 2 (base) to (base+count) as output:
for (int i = PIN_BASE; i <= PIN_BASE+PINS_TO_USE; i++) {
pinMode(i, OUTPUT);
}
randomSeed(analogRead(0));
}
void loop(){
blinky(100);
run_the_line(PIN_BASE, PIN_BASE+PINS_TO_USE, 6, STANDARD);
grow(7,6,SOLO);
delay(250);
grow(7,6,LEAVE_ON);
delay(250);
grow(7,6,LEAVE_OFF);
delay(250);
blinky(100);
}
void blinky(int count) {
int i=0;
for (i = PIN_BASE; i < PIN_BASE+PINS_TO_USE; i++) {
digitalWrite(i, HIGH);
}
delay(DELAY_BASE);
for (i=0; i < count; i++) {
digitalWrite(random(PIN_BASE,PIN_BASE+PINS_TO_USE), random(LOW,HIGH+1) );
delay(random(1,3)* DELAY_BASE);
}
for (i = PIN_BASE; i < PIN_BASE+PINS_TO_USE; i++) {
digitalWrite(i, LOW);
delay(DELAY_BASE);
}
}
/*
mode 0x11___ delay/fade 00 standard delay 01 fade around 1 10 fade around by 2 11 instant all
mode 0x1___ fade
*/
void run_the_line(int first, int last, int passCount, byte mode) {
int thisDelay = 2*DELAY_BASE;
//if (mode & INSTANT == INSTANT)
// thisDelay=0;
int i=0;
for (i = first; i <= last; i++) {
digitalWrite(i, LOW);
delay(thisDelay);
}
int pass=1;
while (pass <= passCount) {
for (i = first; i <= last; i++) {
digitalWrite(i, HIGH);
delay(thisDelay);
digitalWrite(i, LOW);
}
pass++;
if (pass > passCount)
return;
for (i = last-1; i > first; i--) {
digitalWrite(i, HIGH);
delay(thisDelay);
digitalWrite(i, LOW);
}
pass++;
}
}
/*
* from - starting pin
* count - number to act on
*/
void grow(int from, int num, byte mode) {
int thisDelay = 3*DELAY_BASE;
// if (mode & INSTANT == INSTANT)
// thisDelay=0;
int i=0;
// if (mode & SOLO==SOLO) {
for (i = 0; i < num; i++) {
// unless mode is LEAVE_OFF, turn on
// if (!(mode&LEAVE_OFF)==LEAVE_OFF) {
digitalWrite(from-i, HIGH);
digitalWrite(from+i, HIGH);
delay(thisDelay);
// }
// if (!(mode&LEAVE_ON)==LEAVE_ON) {
digitalWrite(from-i, LOW);
digitalWrite(from+i, LOW);
delay(thisDelay);
// }
}
// }
}