Ziel dieses kurzen Projekts ist es mit Hilfe des Software-Andruinos ein ähnliches Ergebnis zu erreichen, wie auf der Seite "Rheinturmuhr mit Arduino". Einige wenige Dinge mussten angepasst werde. So ist es wohl nicht möglich das schnelle Multiplexen der Reallösung direkt zu übernehmen. Auch das Schlüsselwort 'sizeof' wurde nicht benutzt. Das Schalten der Analoganschlüsse erfolgt hier ebenfalls anders.
23:59:05 Uhr
Gleich geblieben ist der Schaltplan. Es werden unverändert 39 Dioden auf die gleiche Weise verschaltet. Die voreingestellte LED im VBB (Virtual Breadboard) kann auch einen Masseanschluss bekommen und somit ist das Prinzip aus der realen Welt übernehmbar.
Zugegebenermaßen wurde das Bild oben geringfügig manipuliert. Um das virtuelle Flimmern sichtbar zu machen - oder das Echtzeitproblem zu umgehen, leuchten die drei Säulen jeweils einzeln für 333 Millisekunden. Ein anderes -, aber durchaus interessantes Erscheinungsbild. Die drei oberen LED zeigen testweise den Zustand der Analogleitungen und gehören nicht zur Uhr.
Das Programm
Googelt man "arduino ports" trifft man auf Unterseiten von www.arduino.cc, die zeigen, wie die Ports direkt angespochen werden können. Da diese Methode in der viruellen Umgebung gut funktioniert, wurde für das Umschalten der Säulen das jeweilige Byte für Port C angepasst. Die virtuelle Sekunde beträgt nun ca. 3x333 ms, was für eine Simulation ausreichen sollte. Ansonsten sind Ähnlichkeiten zum Programm für den realen Arduino durchaus erwünscht.
#define INTERVAL 333
//PINS SEKUNDEN MINUTEN STUNDEN
byte oneSecond[] = {0,1,2,3,4,5,6,7,8};
byte tenSecond[] = {9,10,11,12,13};
int s10=0,s1=0; //ONESECOND TENSECOND BAND
int m10=5,m1=9;
int h10=2,h1=3; // 23:59:00
void setup()
{// PORTS ALLE AUSGANG
DDRC = 255; // A0 - A5
DDRB = 255; // D8 - D13
DDRD = 255; // D0 - D7
}
void loop()
{int i;
for(i=0;i<9;i++) digitalWrite(oneSecond[i], s1 <= i ? LOW : HIGH);
for(i=0;i<5;i++) digitalWrite(tenSecond[i], s10 <= i ? LOW : HIGH);
PORTC = 0xFE; //PIN A0 = 0
delay(INTERVAL); /SHOWTIME SEKUNDEN
for(i=0;i<9;i++)digitalWrite(oneSecond[i], m1 <= i ? LOW : HIGH);
for(i=0;i<5;i++)digitalWrite(tenSecond[i], m10 <= i ? LOW : HIGH);
PORTC = 0xFD; //PIN A1 = 0
delay(INTERVAL); //SHOWTIME MINUTEN
for(i=0;i<9;i++)digitalWrite(oneSecond[i], h1 <= i ? LOW : HIGH);
for(i=0;i<5;i++)digitalWrite(tenSecond[i], h10 <= i ? LOW : HIGH);
PORTC = 0xFB; //PIN A2 = 0
delay(INTERVAL); //SHOWTIME STNDEN
//3x333 ms = 1000 ms?
s1++; //s++;
if(s1 >= 10){s1 = 0;s10++;}
if(s10 >= 6){s10 = 0;m1++;} //m1++;
if(m1 >= 10){m1 = 0;m10++;}
if(m10 >= 6){m10 = 0;h1++;} //h1++;
if(h1 >= 10){h1 = 0;h10++;}
if(h10 >= 2 && h1 >= 4){h10 = 0;h1 = 0;}
}
Das obige Beispiel kann hier als gepacktes Verzeichnis herunter geladen werden. VBB legt unter XP unter den Dokumenten und Einstellungen des aktuellen Benutzers ein Verzeichnis "My VBB Projects" an. Dort hinein sollte die Zip-Datei entpackt werden. Wenn alles geklappt hat, erscheint das Projekt Rheinunio in der Liste.