11. November 2011
Als Weiterführung der ersten Dot-Matrix-Aufgabe durften wie Icons erstellen, die wir dann mit der Matrix animieren sollten. Ich habe in Illustrator vier Icons erstellt und zuerst den Mund animiert. Im Verlauf der Programmierung ist aus dem zweiten Icon, dem Fisch, dann eine startende Rakete entstanden, die von Mitstudenten auch als Wasserhahn angesehen wurde. Für die Animation habe ich mit verschachtelten Arrays gearbeitet, sodass die Einzelbilder im Code möglichst einfach zu lesen waren, die Spalten und Reihen jenen der Matrix entsprachen. Danach habe ich den Code mit Ton verbunden und angefangen die Mondschein-Sonate nachzuprogrammieren. Für die Spalten und Reihen habe ich zwei ineinander verschachtelte for-Schlaufen verwendet und mit einer Reset-Funktion die LEDs jeweils vor dem nächsten Bild wieder in den Default-Zustand gebracht.int leds[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }; int leds_rows[] = { 2, 3, 4, 5, 6, 7, 8 }; int leds_cols[] = { 9, 10, 11, 12, 13 }; int cOut = 0; int z = 0; #define delayFrame 8 /* FISH {{1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1}, {0,1,1,1,0}, {1,0,1,1,0}, {1,0,1,0,1}, {1,1,0,1,1} } */ //#define numIcons 18 char out[][7][5] = { {{1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1} }, {{1,1,0,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1} }, {{1,0,1,0,1}, {1,1,0,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1} }, {{0,1,1,1,0}, {1,0,1,0,1}, {1,1,0,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1} }, {{0,1,1,0,1}, {0,1,1,1,0}, {1,0,1,0,1}, {1,1,0,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1} }, {{0,1,1,1,0}, {0,1,1,0,1}, {0,1,1,1,0}, {1,0,1,0,1}, {1,1,0,1,1}, {1,1,1,1,1}, {1,1,1,1,1} }, {{1,0,1,0,1}, {0,1,1,1,0}, {0,1,1,0,1}, {0,1,1,1,0}, {1,0,1,0,1}, {1,1,0,1,1}, {1,1,1,1,1} }, {{1,1,0,1,1}, {1,0,1,0,1}, {0,1,1,1,0}, {0,1,1,0,1}, {0,1,1,1,0}, {1,0,1,0,1}, {1,1,0,1,1} }, {{1,1,1,1,1}, {1,1,0,1,1}, {1,0,1,0,1}, {0,1,1,1,0}, {0,1,1,0,1}, {0,1,1,1,0}, {1,0,1,0,1} }, {{1,1,1,1,1}, {1,1,1,1,1}, {1,1,0,1,1}, {1,0,1,0,1}, {0,1,1,1,0}, {0,1,1,0,1}, {0,1,1,1,0} }, {{1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,0,1,1}, {1,0,1,0,1}, {0,1,1,1,0}, {0,1,1,0,1} }, {{1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,0,1,1}, {1,0,1,0,1}, {0,1,1,1,0} }, {{1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,0,1,1}, {1,0,1,0,1} }, {{1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,0,1,1} }, {{1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1} }, {{1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1} }, {{1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1} }, {{1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1} } }; //#define numIcons2 22 char out2[][7][5] = { {{1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,0,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1} }, {{1,1,1,1,1}, {1,1,1,1,1}, {1,1,0,1,1}, {1,1,0,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1} }, {{1,1,1,1,1}, {1,1,1,1,1}, {1,1,0,0,1}, {1,1,0,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1} }, {{1,1,1,1,1}, {1,1,1,0,1}, {1,1,0,0,1}, {1,1,0,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1} }, {{1,1,1,1,1}, {1,1,1,0,0}, {1,1,0,0,1}, {1,1,0,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1} }, {{1,1,1,1,0}, {1,1,1,0,0}, {1,1,0,0,1}, {1,1,0,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1} }, {{1,1,1,0,0}, {1,1,1,0,0}, {1,1,0,0,1}, {1,1,0,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1} }, {{1,1,0,0,0}, {1,1,1,0,0}, {1,1,0,0,1}, {1,1,0,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1} }, {{1,0,0,0,0}, {1,1,1,0,0}, {1,1,0,0,1}, {1,1,0,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1} }, {{0,0,0,0,0}, {1,1,1,0,0}, {1,1,0,0,1}, {1,1,0,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1} }, {{0,0,0,0,0}, {0,1,1,0,0}, {1,1,0,0,1}, {1,1,0,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1} }, {{0,0,0,0,0}, {0,0,1,0,0}, {1,1,0,0,1}, {1,1,0,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1} }, {{0,0,0,0,0}, {0,0,1,0,0}, {1,0,0,0,1}, {1,1,0,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1} }, {{0,0,0,0,0}, {0,0,0,0,0}, {0,0,1,0,0}, {1,0,0,0,1}, {1,1,0,1,1}, {1,1,1,1,1}, {1,1,1,1,1} }, {{0,1,0,1,0}, {0,0,0,0,0}, {0,0,0,0,0}, {0,0,1,0,0}, {1,0,0,0,1}, {1,1,0,1,1}, {1,1,1,1,1} }, {{1,0,1,0,1}, {0,1,0,1,0}, {0,0,0,0,0}, {0,0,0,0,0}, {0,0,1,0,0}, {1,0,0,0,1}, {1,1,0,1,1} }, {{1,1,0,1,1}, {1,0,1,0,1}, {0,1,0,1,0}, {0,0,0,0,0}, {0,0,0,0,0}, {0,0,1,0,0}, {1,0,0,0,1} }, {{1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1}, {0,1,0,1,0}, {0,0,0,0,0}, {0,0,0,0,0}, {0,0,1,0,0} }, {{1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1}, {0,1,0,1,0}, {0,0,0,0,0}, {0,0,0,0,0} }, {{1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1}, {0,1,0,1,0}, {0,0,0,0,0} }, {{1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1}, {0,1,0,1,0} }, {{1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1} }, {{1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1} }, {{1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1} }, {{1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1} }, {{1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1} }, {{1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1} }, {{1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1} }, {{1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1} }, {{1,1,1,1,1}, {1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1}, {1,0,1,0,1}, {1,1,1,1,1} }, {{1,1,1,1,1}, {1,1,1,1,1}, {1,1,0,1,1}, {1,0,1,0,1}, {1,1,0,1,1}, {1,1,1,1,1}, {1,1,1,1,1} }, {{1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,0,0,0,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1} } }; int i=9; int d=1; int k=2; int d2=1; void setup() { Serial.begin(9600); // ROWS for(int l=0; l<sizeof(leds_rows); l++) { pinMode(leds_rows[l], OUTPUT); digitalWrite(leds_rows[l],LOW); } // COLS for(int l=0; l<sizeof(leds_cols); l++) { pinMode(leds_cols[l], OUTPUT); digitalWrite(leds_cols[l],HIGH); } } void loop() { for(int n=0; n<(sizeof(out2)/sizeof(out2[0])); n++) { for(int m=0; m<7; m++) { for(int l=0; l<sizeof(out2[cOut][m]);l++) { digitalWrite(leds_cols[l],out2[cOut][m][l]); digitalWrite(leds_rows[m],1); } delay(2); mReset(); } //Serial.println(sizeof(out)/sizeof(out[0])); if (z==delayFrame) { cOut++; if (cOut==(sizeof(out2)/sizeof(out2[0]))) cOut=0; } z++; if (z>delayFrame) z=0; } } void mReset() { // ROWS for(int l=0; l<sizeof(leds_rows); l++) { digitalWrite(leds_rows[l],LOW); } // COLS for(int l=0; l<sizeof(leds_cols); l++) { digitalWrite(leds_cols[l],HIGH); } }