|
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.
#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 INTITIME(void){t0=millis();}
unsigned long TIMEREAD(void){return millis()-t0;}
void setup()
{int i;
for(i=0; ipinMode(oneSecond[i],OUTPUT);
for(i=0; ipinMode(tenSecond[i],OUTPUT);
for(i=0; ipinMode(theSwitch[i],OUTPUT);
digitalWrite(A0, HIGH);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
}
void loop()
{int i;
t=TIMEREAD();
do
{for(i=0;idigitalWrite(oneSecond[i],s1<=i?LOW:HIGH);
for(i=0;idigitalWrite(tenSecond[i],s10<=i?LOW:HIGH);
digitalWrite(A0, LOW);//Masse an Sekunden
delay(1); //SHOWTIME SEKUNDEN
digitalWrite(A0, HIGH);
for(i=0;idigitalWrite(oneSecond[i],m1<=i?LOW:HIGH);
for(i=0;idigitalWrite(tenSecond[i],m10<=i?LOW:HIGH);
digitalWrite(A1, LOW);//Masse an MINUTEN
delay(1); //SHOWTIME MINUTEN
digitalWrite(A1, HIGH);
for(i=0;idigitalWrite(oneSecond[i],h1<=i?LOW:HIGH);
for(i=0;idigitalWrite(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;}
}
|