Das Programm entspricht den obigen Ausführungen und ist nicht platzoptimiert (Lesbarkeit). Die Routinen TIMEINIT und TIMEREAD wurden der RSAPI.DLL nach empfunden und sorgen dafür, dass das Multipexen während der Wartezeit einer Sekunde (INTERVAL) statt findet. Hier der Quelltext für die Arduino-IDE 0.23:
#define A0 14 //ANALOG 0
#define A1 15
#define A2 16
#define INTERVAL 1000
//PINS SEKUNDEN MINUTEN STUNDEN
byte oneSecond[] = {0,1,2,3,4,5,6,7,8}; //No Serial on 0/1
byte tenSecond[] = {9,10,11,12,13}; //
byte theSwitch[] = {14,15,16};//SEKUNDE MINUTE STUNDE
int s10=0,s1=0; //ONESECOND TENSECOND BAND
int m10=5,m1=9; // Start mit 23:59:00 Uhr
int h10=2,h1=3; //
unsigned long t,t0; //TIMEINIT
void TIMEINIT(void){t0=millis();}
unsigned long TIMEREAD(void){return millis()-t0;}
void setup()
{int i;
for(i=0; i< sizeof(onesecond);i++)pinMode(oneSecond[i],OUTPUT);
for(i=0; i< sizeof(tensecond);i++)pinMode(tenSecond[i],OUTPUT);
for(i=0; i< sizeof(theswitch);i++)pinMode(theSwitch[i],OUTPUT);
digitalWrite(A0, HIGH);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
}
void loop()
{int i;
t=TIMEREAD();
do
{for(i=0;i< sizeof(onesecond);i++)digitalWrite(oneSecond[i],s1<=i?LOW:HIGH);
for(i=0;i< sizeof(tensecond);i++)digitalWrite(tenSecond[i],s10<=i?LOW:HIGH);
digitalWrite(A0, LOW);//Masse an Sekunden
delay(1); //SHOWTIME SEKUNDEN
digitalWrite(A0, HIGH);
for(i=0;i< sizeof(onesecond);i++)digitalWrite(oneSecond[i],m1<=i?LOW:HIGH);
for(i=0;i< sizeof(tensecond);i++)digitalWrite(tenSecond[i],m10<=i?LOW:HIGH);
digitalWrite(A1, LOW);//Masse an MINUTEN
delay(1); //SHOWTIME MINUTEN
digitalWrite(A1, HIGH);
for(i=0;i< sizeof(onesecond);i++)digitalWrite(oneSecond[i],h1<=i?LOW:HIGH);
for(i=0;i< sizeof(tensecond);i++)digitalWrite(tenSecond[i],h10<=i?LOW:HIGH);
digitalWrite(A2, LOW);//Masse an STUNDEN
delay(1); //SHOWTIME STUNDEN
digitalWrite(A2, HIGH);
}while(TIMEREAD()<(t+INTERVAL));
//---------------------------------
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;}
}
Sizeof macht HTML-Formatierungsprobleme, Arduino-Quelltext hier. Ab Arduino-IDE 1.0 sind die ersten drei Ausdrücke A0 bis A2 reserviert und sollten überall durch freie Bezeichner ersetzt werden.
|