int delayTime = 350; // Zeitspanne fuer An oder Aus // Merke: die analogen Input-Pins (0-5) sind ebenfalls digitate Ausgaenge (14-19) // Der Pin DigitalOut0 (seriell RX), DigitalOut1 (seriell TX) und AnalogIn5 werden // wegen moeglicher, zukuenftiger Verwendung nicht genutzt. // Reihenfolge // erst von vorne nach hinten (Z-Achse) // dann von links nach rechts (X-Achse) // dann von unten nach oben (Y-Achse) // 9 Anoden der LEDs int anode[] = { 4, 5, 6, 7, 8, 9, 10, 11, 12}; // 3 Kathodenebenen (Y-Ebene) int cathode[] = { 14, 15, 16}; // Alle Pins auf OUTPUT setzen void setup() { for (int LEDanode = 0; LEDanode < 9; LEDanode++) { // Alle LED-Anoden auf OUTPUT pinMode(anode[LEDanode], OUTPUT); } for (int LEDcathode = 0; LEDcathode < 3; LEDcathode++) { // Alle Kathoden-Ebenen auf OUTPUT pinMode(cathode[LEDcathode], OUTPUT); digitalWrite(cathode[LEDcathode], HIGH); // Alles ausstellen } } void loop() { // Vertikale X-Ebene vorwaerts for(int LEDanode = 0; LEDanode < 9; LEDanode = LEDanode + 3) { verticalPlaneX(LEDanode); } // Horizantale Y-Ebenen vorwaerts for(int LEDcathode = 0; LEDcathode < 3; LEDcathode++) { planeY(LEDcathode); } // Vertikale Z-Ebene vorwaerts for(int LEDanode = 0; LEDanode < 3; LEDanode++) { verticalPlaneZ(LEDanode); } // Vertikale X-Ebene rueckwaerts for(int LEDanode = 6; LEDanode >= 0; LEDanode = LEDanode - 3) { verticalPlaneX(LEDanode); } // Horizantale Y-Ebenen rueckwaerts for(int LEDcathode = 2; LEDcathode >= 0; LEDcathode--) { planeY(LEDcathode); } // Vertikale Z-Ebene rueckwaerts for(int LEDanode = 2; LEDanode >= 0; LEDanode--) { verticalPlaneZ(LEDanode); } } // Einige Testfunktionen // Horizontale Y-Ebene void planeY(int LEDcathode) { digitalWrite(cathode[LEDcathode], LOW); // Ganze Ebene einschalten for(int LEDanode = 0; LEDanode < 9; LEDanode++) { digitalWrite(anode[LEDanode], HIGH); } delay(delayTime); // Ebene eine Weile eingeschaltet lassen digitalWrite(cathode[LEDcathode], HIGH); // Ganze Ebene ausschalten for(int LEDanode = 0; LEDanode < 9; LEDanode++) { digitalWrite(anode[LEDanode], LOW); } } // Vertikale X-Ebene void verticalPlaneX(int LEDanode) { for(int LEDcathode = 0; LEDcathode < 3; LEDcathode++) { // Alle Kathoden auf LOW = An digitalWrite(cathode[LEDcathode], LOW); } digitalWrite(anode[LEDanode], HIGH); // 3 senkrechte LED-Reihe in Y-Richtung anschalten digitalWrite(anode[LEDanode + 1], HIGH); // Eine Reihe dahinter digitalWrite(anode[LEDanode + 2], HIGH); // Zwei Reihen dahinter delay(delayTime); for(int LEDcathode = 0; LEDcathode < 3; LEDcathode++) { // Alle Kathoden auf HIGH = Aus digitalWrite(cathode[LEDcathode], HIGH); } digitalWrite(anode[LEDanode], LOW); // 3 senkrechte LED-Reihe ausschalten digitalWrite(anode[LEDanode+1], LOW); digitalWrite(anode[LEDanode+2], LOW); } // Die vertikale Z-Ebene void verticalPlaneZ(int LEDanode) { for(int LEDcathode = 0; LEDcathode < 3; LEDcathode++) { // Alle Kathoden auf LOW = An digitalWrite(cathode[LEDcathode], LOW); } digitalWrite(anode[LEDanode], HIGH); // 3 senkrechte LED-Reihe in X-Richtung anschalten digitalWrite(anode[LEDanode+3], HIGH); // Eine Reihe daneben digitalWrite(anode[LEDanode+6], HIGH); // Zwei Reihen daneben delay(delayTime); for(int LEDcathode = 0; LEDcathode < 3; LEDcathode++) { // Alle Kathoden auf HIGH = Aus digitalWrite(cathode[LEDcathode], HIGH); } digitalWrite(anode[LEDanode], LOW); // 3 senkrechte LED-Reihe ausschalten digitalWrite(anode[LEDanode+3], LOW); digitalWrite(anode[LEDanode+6], LOW); }