added compiled options
[hack-covid-19.git] / covid.ino
1 //USBtinyISP(ATTinyCore) upload using programmer
2 //Atinny841(Optiboot)
3 #include <avr/pgmspace.h>
4
5 const int ROW_1 = 10;     //LED row 1
6 const int ROW_2 = 9;     //LED row 2    
7 const int ROW_3 = 8;     //LED row 3
8 const int ROW_4 = 7;
9 const int ROW_5 = 3;
10
11 unsigned long next;
12
13 const static char spike[] PROGMEM  = "auguuuguuuuucuuguuuuauugccacuagucucuagucaguguguuaaucuuacaaccagaacucaauuacccccugcauacacuaauucuuucacacgugguguuuauuacccugacaaaguuuucagauccucaguuuuacauucaacucaggacuuguucuuaccuuucuuuuccaauguuacuugguuccaugcuauacaugucucugggaccaaugguacuaagagguuugauaacccuguccuaccauuuaaugaugguguuuauuuugcuuccacugagaagucuaacauaauaagaggcuggauuuuugguacuacuuuagauucgaagacccagucccuacuuauuguuaauaacgcuacuaauguuguuauuaaagucugugaauuucaauuuuguaaugauccauuuuuggguguuuauuaccacaaaaacaacaaaaguuggauggaaagugaguucagaguuuauucuagugcgaauaauugcacuuuugaauaugucucucagccuuuucuuauggaccuugaaggaaaacaggguaauuucaaaaaucuuagggaauuuguguuuaagaauauugaugguuauuuuaaaauauauucuaagcacacgccuauuaauuuagugcgugaucucccucaggguuuuucggcuuuagaaccauugguagauuugccaauagguauuaacaucacuagguuucaaacuuuacuugcuuuacauagaaguuauuugacuccuggugauucuucuucagguuggacagcuggugcugcagcuuauuauguggguuaucuucaaccuaggacuuuucuauuaaaauauaaugaaaauggaaccauuacagaugcuguagacugugcacuugacccucucucagaaacaaaguguacguugaaauccuucacuguagaaaaaggaaucuaucaaacuucuaacuuuagaguccaaccaacagaaucuauuguuagauuuccuaauauuacaaacuugugcccuuuuggugaaguuuuuaacgccaccagauuugcaucuguuuaugcuuggaacaggaagagaaucagcaacuguguugcugauuauucuguccuauauaauuccgcaucauuuuccacuuuuaaguguuauggagugucuccuacuaaauuaaaugaucucugcuuuacuaaugucuaugcagauucauuuguaauuagaggugaugaagucagacaaaucgcuccagggcaaacuggaaagauugcugauuauaauuauaaauuaccagaugauuuuacaggcugcguuauagcuuggaauucuaacaaucuugauucuaagguuggugguaauuauaauuaccuguauagauuguuuaggaagucuaaucucaaaccuuuugagagagauauuucaacugaaaucuaucaggccgguagcacaccuuguaaugguguugaagguuuuaauuguuacuuuccuuuacaaucauaugguuuccaacccacuaaugguguugguuaccaaccauacagaguaguaguacuuucuuuugaacuucuacaugcaccagcaacuguuuguggaccuaaaaagucuacuaauuugguuaaaaacaaaugugucaauuucaacuucaaugguuuaacaggcacagguguucuuacugagucuaacaaaaaguuucugccuuuccaacaauuuggcagagacauugcugacacuacugaugcuguccgugauccacagacacuugagauucuugacauuacaccauguucuuuugguggugucaguguuauaacaccaggaacaaauacuucuaaccagguugcuguucuuuaucaggauguuaacugcacagaagucccuguugcuauucaugcagaucaacuuacuccuacuuggcguguuuauucuacagguucuaauguuuuucaaacacgugcaggcuguuuaauaggggcugaacaugucaacaacucauaugagugugacauacccauuggugcagguauaugcgcuaguuaucagacucagacuaauucuccucggcgggcacguaguguagcuagucaauccaucauugccuacacuaugucacuuggugcagaaaauucaguugcuuacucuaauaacucuauugccauacccacaaauuuuacuauuaguguuaccacagaaauucuaccagugucuaugaccaagacaucaguagauuguacaauguacauuuguggugauucaacugaaugcagcaaucuuuuguugcaauauggcaguuuuuguacacaauuaaaccgugcuuuaacuggaauagcuguugaacaagacaaaaacacccaagaaguuuuugcacaagucaaacaaauuuacaaaacaccaccaauuaaagauuuuggugguuuuaauuuuucacaaauauuaccagauccaucaaaaccaagcaagaggucauuuauugaagaucuacuuuucaacaaagugacacuugcagaugcuggcuucaucaaacaauauggugauugccuuggugauauugcugcuagagaccucauuugugcacaaaaguuuaacggccuuacuguuuugccaccuuugcucacagaugaaaugauugcucaauacacuucugcacuguuagcggguacaaucacuucugguuggaccuuuggugcaggugcugcauuacaaauaccauuugcuaugcaaauggcuuauagguuuaaugguauuggaguuacacagaauguucucuaugagaaccaaaaauugauugccaaccaauuuaauagugcuauuggcaaaauucaagacucacuuucuuccacagcaagugcacuuggaaaacuucaagauguggucaaccaaaaugcacaagcuuuaaacacgcuuguuaaacaacuuagcuccaauuuuggugcaauuucaaguguuuuaaaugauauccuuucacgucuugacaaaguugaggcugaagugcaaauugauagguugaucacaggcagacuucaaaguuugcagacauaugugacucaacaauuaauuagagcugcagaaaucagagcuucugcuaaucuugcugcuacuaaaaugucagaguguguacuuggacaaucaaaaagaguugauuuuuguggaaagggcuaucaucuuauguccuucccucagucagcaccucaugguguagucuucuugcaugugacuuaugucccugcacaagaaaagaacuucacaacugcuccugccauuugucaugauggaaaagcacacuuuccucgugaaggugucuuuguuucaaauggcacacacugguuuguaacacaaaggaauuuuuaugaaccacaaaucauuacuacagacaacacauuugugucugguaacugugauguuguaauaggaauugucaacaacacaguuuaugauccuuugcaaccugaauuagacucauucaaggaggaguuagauaaauauuuuaagaaucauacaucaccagauguugauuuaggugacaucucuggcauuaaugcuucaguuguaaacauucaaaaagaaauugaccgccucaaugagguugccaagaauuuaaaugaaucucucaucgaucuccaagaacuuggaaaguaugagcaguauauaaaauggccaugguacauuuggcuagguuuuauagcuggcuugauugccauaguaauggugacaauuaugcuuugcuguaugaccaguugcuguaguugucucaagggcuguuguucuuguggauccugcugcaaauuugaugaagacgacucugagccagugcucaaaggagucaaauuacauuacacauaaacgaacuu\N";
14
15
16 //augc
17
18 // the setup function runs once when you press reset or power the board
19 void setup() {
20   next = millis() + 5000;
21 }
22
23 // the loop function runs over and over again forever
24 void loop() {
25   if (((signed long)(millis() - next)) > 0) {
26     sparkle();
27     spin();
28     spin3();
29     seq();
30     turnoff();
31     next = millis() + random(1000,5000);
32   }
33 }
34
35 void turnoff() {
36   pinMode(ROW_1, INPUT);
37   pinMode(ROW_2, INPUT);
38   pinMode(ROW_3, INPUT);
39   pinMode(ROW_4, INPUT);
40   pinMode(ROW_5, INPUT);
41 }
42
43 void sparkle() {
44   turnoff();
45   for (int i=0; i<5; i++) {
46     led13();
47     delay(15*i);
48     led14();
49     delay(15*i);
50     //15 being wonky
51     led15();
52     delay(15*i);
53     led16();
54     delay(15*i);
55     led17();
56     delay(15*i);
57     led18();
58     delay(15*i);
59   }
60 }
61
62 void seq() {
63   //int i=0;
64   char c;
65   //while((c = pgm_read_byte(str++))) {
66   for (int i=0; i<strlen_P(spike); i++) {
67     c =  pgm_read_byte_near(spike + i);  
68     if (c=='a') {
69       led1();
70       delay(1);
71       led5();
72       delay(1);
73       led9();
74       delay(1);
75     }
76     if (c=='u') {
77       led2();
78       delay(1);
79       led6();
80       delay(1);
81       led10();
82       delay(1);
83
84     }
85     if (c=='g') {
86       led3();
87       delay(1);
88       led7();
89       delay(1);
90       led11();
91       delay(1);
92     }
93     if (c=='c') {
94       led4();
95       delay(1);
96       led8();
97       delay(1);
98       led12();
99       delay(1);
100     }
101     delay(1);
102   }
103 }
104
105 void spin() {
106   for (int i=0; i<5; i++) {
107     led1();
108     delay(15*i);  
109     led2();
110     delay(15*i);
111     led3();
112     delay(15*i);
113     led4();
114     delay(15*i);
115     led5();
116     delay(15*i);
117     led6();
118     delay(15*i);
119     led7();
120     delay(15*i);  
121     led8();
122     delay(15*i);
123     led9();
124     delay(15*i);
125     led10();
126     delay(15*i);
127     led11();
128     delay(15*i);
129     led12();
130     delay(15*i);
131   }
132 }
133
134 void spin3() {
135   for (int i=0; i<10; i++) {
136     for (int j=0; j<5; j++) {
137       led1();
138       delay(5);
139       led4();
140       delay(5);
141       led7();
142       delay(5);
143       led10();
144       delay(5);
145     }
146     delay(10*i);
147     for (int j=0; j<5; j++) {
148       led2();
149       delay(5);
150       led5();
151       delay(5);
152       led8();
153       delay(5);
154       led11();
155       delay(5);
156     }
157     delay(10*i);
158     for (int j=0; j<5; j++) {
159       led3();
160       delay(5);
161       led6();
162       delay(5);
163       led9();
164       delay(5);
165       led12();
166       delay(5);
167     }
168     delay(10*i);
169   }
170 }
171
172 void led1() {
173   turnoff();
174   pinMode(ROW_1, OUTPUT);     //row 2
175   digitalWrite(ROW_1, LOW);  
176   pinMode(ROW_2, OUTPUT);     //row 3
177   digitalWrite(ROW_2, HIGH);
178 }
179
180 void led2() {
181   turnoff();
182   pinMode(ROW_1, OUTPUT);     //row 2
183   digitalWrite(ROW_1, HIGH);  
184   pinMode(ROW_2, OUTPUT);     //row 3
185   digitalWrite(ROW_2, LOW);
186 }
187
188 void led3() {
189   turnoff();
190   pinMode(ROW_2, OUTPUT);     //row 2
191   digitalWrite(ROW_2, LOW);  
192   pinMode(ROW_3, OUTPUT);     //row 3
193   digitalWrite(ROW_3, HIGH);
194 }
195
196 void led4() {
197   turnoff();
198   pinMode(ROW_2, OUTPUT);     //row 2
199   digitalWrite(ROW_2, HIGH);  
200   pinMode(ROW_3, OUTPUT);     //row 3
201   digitalWrite(ROW_3, LOW);
202 }
203
204 void led5() {
205   turnoff();
206   pinMode(ROW_3, OUTPUT);     //row 2
207   digitalWrite(ROW_3, LOW);  
208   pinMode(ROW_4, OUTPUT);     //row 3
209   digitalWrite(ROW_4, HIGH);
210 }
211
212 void led6() {
213   turnoff();
214   pinMode(ROW_3, OUTPUT);     //row 2
215   digitalWrite(ROW_3, HIGH);  
216   pinMode(ROW_4, OUTPUT);     //row 3
217   digitalWrite(ROW_4, LOW);
218 }
219
220 void led7() {
221   turnoff();
222   pinMode(ROW_4, OUTPUT);     //row 2
223   digitalWrite(ROW_4, LOW);  
224   pinMode(ROW_5, OUTPUT);     //row 3
225   digitalWrite(ROW_5, HIGH);
226 }
227
228 void led8() {
229   turnoff();
230   pinMode(ROW_4, OUTPUT);     //row 2
231   digitalWrite(ROW_4, HIGH);  
232   pinMode(ROW_5, OUTPUT);     //row 3
233   digitalWrite(ROW_5, LOW);
234 }
235
236 void led9() {
237   turnoff();
238   pinMode(ROW_1, OUTPUT);     //row 2
239   digitalWrite(ROW_1, LOW);  
240   pinMode(ROW_3, OUTPUT);     //row 3
241   digitalWrite(ROW_3, HIGH);
242 }
243
244 void led10() {
245   turnoff();
246   pinMode(ROW_1, OUTPUT);     //row 2
247   digitalWrite(ROW_1, HIGH);  
248   pinMode(ROW_3, OUTPUT);     //row 3
249   digitalWrite(ROW_3, LOW);
250 }
251
252 void led11() {
253   turnoff();
254   pinMode(ROW_2, OUTPUT);     //row 2
255   digitalWrite(ROW_2, LOW);  
256   pinMode(ROW_4, OUTPUT);     //row 3
257   digitalWrite(ROW_4, HIGH);
258 }
259
260 void led12() {
261   turnoff();
262   pinMode(ROW_2, OUTPUT);     //row 2
263   digitalWrite(ROW_2, HIGH);  
264   pinMode(ROW_4, OUTPUT);     //row 3
265   digitalWrite(ROW_4, LOW);
266 }
267
268 void led13() {
269   turnoff();
270   pinMode(ROW_3, OUTPUT);     //row 2
271   digitalWrite(ROW_3, HIGH);  
272   pinMode(ROW_5, OUTPUT);     //row 3
273   digitalWrite(ROW_5, LOW);
274 }
275
276 void led14() {
277   turnoff();
278   pinMode(ROW_3, OUTPUT);     //row 2
279   digitalWrite(ROW_3, LOW);  
280   pinMode(ROW_5, OUTPUT);     //row 3
281   digitalWrite(ROW_5, HIGH);
282 }
283
284 //here
285 void led15() {
286   turnoff();
287   pinMode(ROW_1, OUTPUT);     //row 2
288   digitalWrite(ROW_1, LOW);  
289   pinMode(ROW_4, OUTPUT);     //row 3
290   digitalWrite(ROW_4, HIGH);
291 }
292
293 void led16() {
294   turnoff();
295   pinMode(ROW_1, OUTPUT);     //row 2
296   digitalWrite(ROW_1, HIGH);  
297   pinMode(ROW_4, OUTPUT);     //row 3
298   digitalWrite(ROW_4, LOW);
299 }
300
301 void led17() {
302   turnoff();
303   pinMode(ROW_2, OUTPUT);     //row 2
304   digitalWrite(ROW_2, LOW);  
305   pinMode(ROW_5, OUTPUT);     //row 3
306   digitalWrite(ROW_5, HIGH);
307 }
308
309 void led18() {
310   turnoff();
311   pinMode(ROW_2, OUTPUT);     //row 2
312   digitalWrite(ROW_2, HIGH);  
313   pinMode(ROW_5, OUTPUT);     //row 3
314   digitalWrite(ROW_5, LOW);
315 }
316
317
318