1 //USBtinyISP(ATTinyCore) upload using programmer
3 #include <avr/pgmspace.h>
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
13 const static char spike[] PROGMEM = "auguuuguuuuucuuguuuuauugccacuagucucuagucaguguguuaaucuuacaaccagaacucaauuacccccugcauacacuaauucuuucacacgugguguuuauuacccugacaaaguuuucagauccucaguuuuacauucaacucaggacuuguucuuaccuuucuuuuccaauguuacuugguuccaugcuauacaugucucugggaccaaugguacuaagagguuugauaacccuguccuaccauuuaaugaugguguuuauuuugcuuccacugagaagucuaacauaauaagaggcuggauuuuugguacuacuuuagauucgaagacccagucccuacuuauuguuaauaacgcuacuaauguuguuauuaaagucugugaauuucaauuuuguaaugauccauuuuuggguguuuauuaccacaaaaacaacaaaaguuggauggaaagugaguucagaguuuauucuagugcgaauaauugcacuuuugaauaugucucucagccuuuucuuauggaccuugaaggaaaacaggguaauuucaaaaaucuuagggaauuuguguuuaagaauauugaugguuauuuuaaaauauauucuaagcacacgccuauuaauuuagugcgugaucucccucaggguuuuucggcuuuagaaccauugguagauuugccaauagguauuaacaucacuagguuucaaacuuuacuugcuuuacauagaaguuauuugacuccuggugauucuucuucagguuggacagcuggugcugcagcuuauuauguggguuaucuucaaccuaggacuuuucuauuaaaauauaaugaaaauggaaccauuacagaugcuguagacugugcacuugacccucucucagaaacaaaguguacguugaaauccuucacuguagaaaaaggaaucuaucaaacuucuaacuuuagaguccaaccaacagaaucuauuguuagauuuccuaauauuacaaacuugugcccuuuuggugaaguuuuuaacgccaccagauuugcaucuguuuaugcuuggaacaggaagagaaucagcaacuguguugcugauuauucuguccuauauaauuccgcaucauuuuccacuuuuaaguguuauggagugucuccuacuaaauuaaaugaucucugcuuuacuaaugucuaugcagauucauuuguaauuagaggugaugaagucagacaaaucgcuccagggcaaacuggaaagauugcugauuauaauuauaaauuaccagaugauuuuacaggcugcguuauagcuuggaauucuaacaaucuugauucuaagguuggugguaauuauaauuaccuguauagauuguuuaggaagucuaaucucaaaccuuuugagagagauauuucaacugaaaucuaucaggccgguagcacaccuuguaaugguguugaagguuuuaauuguuacuuuccuuuacaaucauaugguuuccaacccacuaaugguguugguuaccaaccauacagaguaguaguacuuucuuuugaacuucuacaugcaccagcaacuguuuguggaccuaaaaagucuacuaauuugguuaaaaacaaaugugucaauuucaacuucaaugguuuaacaggcacagguguucuuacugagucuaacaaaaaguuucugccuuuccaacaauuuggcagagacauugcugacacuacugaugcuguccgugauccacagacacuugagauucuugacauuacaccauguucuuuugguggugucaguguuauaacaccaggaacaaauacuucuaaccagguugcuguucuuuaucaggauguuaacugcacagaagucccuguugcuauucaugcagaucaacuuacuccuacuuggcguguuuauucuacagguucuaauguuuuucaaacacgugcaggcuguuuaauaggggcugaacaugucaacaacucauaugagugugacauacccauuggugcagguauaugcgcuaguuaucagacucagacuaauucuccucggcgggcacguaguguagcuagucaauccaucauugccuacacuaugucacuuggugcagaaaauucaguugcuuacucuaauaacucuauugccauacccacaaauuuuacuauuaguguuaccacagaaauucuaccagugucuaugaccaagacaucaguagauuguacaauguacauuuguggugauucaacugaaugcagcaaucuuuuguugcaauauggcaguuuuuguacacaauuaaaccgugcuuuaacuggaauagcuguugaacaagacaaaaacacccaagaaguuuuugcacaagucaaacaaauuuacaaaacaccaccaauuaaagauuuuggugguuuuaauuuuucacaaauauuaccagauccaucaaaaccaagcaagaggucauuuauugaagaucuacuuuucaacaaagugacacuugcagaugcuggcuucaucaaacaauauggugauugccuuggugauauugcugcuagagaccucauuugugcacaaaaguuuaacggccuuacuguuuugccaccuuugcucacagaugaaaugauugcucaauacacuucugcacuguuagcggguacaaucacuucugguuggaccuuuggugcaggugcugcauuacaaauaccauuugcuaugcaaauggcuuauagguuuaaugguauuggaguuacacagaauguucucuaugagaaccaaaaauugauugccaaccaauuuaauagugcuauuggcaaaauucaagacucacuuucuuccacagcaagugcacuuggaaaacuucaagauguggucaaccaaaaugcacaagcuuuaaacacgcuuguuaaacaacuuagcuccaauuuuggugcaauuucaaguguuuuaaaugauauccuuucacgucuugacaaaguugaggcugaagugcaaauugauagguugaucacaggcagacuucaaaguuugcagacauaugugacucaacaauuaauuagagcugcagaaaucagagcuucugcuaaucuugcugcuacuaaaaugucagaguguguacuuggacaaucaaaaagaguugauuuuuguggaaagggcuaucaucuuauguccuucccucagucagcaccucaugguguagucuucuugcaugugacuuaugucccugcacaagaaaagaacuucacaacugcuccugccauuugucaugauggaaaagcacacuuuccucgugaaggugucuuuguuucaaauggcacacacugguuuguaacacaaaggaauuuuuaugaaccacaaaucauuacuacagacaacacauuugugucugguaacugugauguuguaauaggaauugucaacaacacaguuuaugauccuuugcaaccugaauuagacucauucaaggaggaguuagauaaauauuuuaagaaucauacaucaccagauguugauuuaggugacaucucuggcauuaaugcuucaguuguaaacauucaaaaagaaauugaccgccucaaugagguugccaagaauuuaaaugaaucucucaucgaucuccaagaacuuggaaaguaugagcaguauauaaaauggccaugguacauuuggcuagguuuuauagcuggcuugauugccauaguaauggugacaauuaugcuuugcuguaugaccaguugcuguaguugucucaagggcuguuguucuuguggauccugcugcaaauuugaugaagacgacucugagccagugcucaaaggagucaaauuacauuacacauaaacgaacuu\N";
18 // the setup function runs once when you press reset or power the board
20 next = millis() + 5000;
23 // the loop function runs over and over again forever
25 if (((signed long)(millis() - next)) > 0) {
31 next = millis() + random(1000,5000);
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);
45 for (int i=0; i<5; i++) {
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);
106 for (int i=0; i<5; i++) {
135 for (int i=0; i<10; i++) {
136 for (int j=0; j<5; j++) {
147 for (int j=0; j<5; j++) {
158 for (int j=0; j<5; j++) {
174 pinMode(ROW_1, OUTPUT); //row 2
175 digitalWrite(ROW_1, LOW);
176 pinMode(ROW_2, OUTPUT); //row 3
177 digitalWrite(ROW_2, HIGH);
182 pinMode(ROW_1, OUTPUT); //row 2
183 digitalWrite(ROW_1, HIGH);
184 pinMode(ROW_2, OUTPUT); //row 3
185 digitalWrite(ROW_2, LOW);
190 pinMode(ROW_2, OUTPUT); //row 2
191 digitalWrite(ROW_2, LOW);
192 pinMode(ROW_3, OUTPUT); //row 3
193 digitalWrite(ROW_3, HIGH);
198 pinMode(ROW_2, OUTPUT); //row 2
199 digitalWrite(ROW_2, HIGH);
200 pinMode(ROW_3, OUTPUT); //row 3
201 digitalWrite(ROW_3, LOW);
206 pinMode(ROW_3, OUTPUT); //row 2
207 digitalWrite(ROW_3, LOW);
208 pinMode(ROW_4, OUTPUT); //row 3
209 digitalWrite(ROW_4, HIGH);
214 pinMode(ROW_3, OUTPUT); //row 2
215 digitalWrite(ROW_3, HIGH);
216 pinMode(ROW_4, OUTPUT); //row 3
217 digitalWrite(ROW_4, LOW);
222 pinMode(ROW_4, OUTPUT); //row 2
223 digitalWrite(ROW_4, LOW);
224 pinMode(ROW_5, OUTPUT); //row 3
225 digitalWrite(ROW_5, HIGH);
230 pinMode(ROW_4, OUTPUT); //row 2
231 digitalWrite(ROW_4, HIGH);
232 pinMode(ROW_5, OUTPUT); //row 3
233 digitalWrite(ROW_5, LOW);
238 pinMode(ROW_1, OUTPUT); //row 2
239 digitalWrite(ROW_1, LOW);
240 pinMode(ROW_3, OUTPUT); //row 3
241 digitalWrite(ROW_3, HIGH);
246 pinMode(ROW_1, OUTPUT); //row 2
247 digitalWrite(ROW_1, HIGH);
248 pinMode(ROW_3, OUTPUT); //row 3
249 digitalWrite(ROW_3, LOW);
254 pinMode(ROW_2, OUTPUT); //row 2
255 digitalWrite(ROW_2, LOW);
256 pinMode(ROW_4, OUTPUT); //row 3
257 digitalWrite(ROW_4, HIGH);
262 pinMode(ROW_2, OUTPUT); //row 2
263 digitalWrite(ROW_2, HIGH);
264 pinMode(ROW_4, OUTPUT); //row 3
265 digitalWrite(ROW_4, LOW);
270 pinMode(ROW_3, OUTPUT); //row 2
271 digitalWrite(ROW_3, HIGH);
272 pinMode(ROW_5, OUTPUT); //row 3
273 digitalWrite(ROW_5, LOW);
278 pinMode(ROW_3, OUTPUT); //row 2
279 digitalWrite(ROW_3, LOW);
280 pinMode(ROW_5, OUTPUT); //row 3
281 digitalWrite(ROW_5, HIGH);
287 pinMode(ROW_1, OUTPUT); //row 2
288 digitalWrite(ROW_1, LOW);
289 pinMode(ROW_4, OUTPUT); //row 3
290 digitalWrite(ROW_4, HIGH);
295 pinMode(ROW_1, OUTPUT); //row 2
296 digitalWrite(ROW_1, HIGH);
297 pinMode(ROW_4, OUTPUT); //row 3
298 digitalWrite(ROW_4, LOW);
303 pinMode(ROW_2, OUTPUT); //row 2
304 digitalWrite(ROW_2, LOW);
305 pinMode(ROW_5, OUTPUT); //row 3
306 digitalWrite(ROW_5, HIGH);
311 pinMode(ROW_2, OUTPUT); //row 2
312 digitalWrite(ROW_2, HIGH);
313 pinMode(ROW_5, OUTPUT); //row 3
314 digitalWrite(ROW_5, LOW);