#define pressed digitalRead(12) == LOW const unsigned char H[] = {8,9,10,11}; const unsigned char M[] = {2,3,4,5,6,7}; //const unsigned int mindelay = 60000; const unsigned int mindelay = 59500; unsigned char min = 0; unsigned char hour = 0; unsigned long lastmin; #define nolog void write(unsigned char m = 255, unsigned char h = 255) { //write minutes for(unsigned char i = 0; i < 6; i++) { analogWrite(M[i], (m & (1 << i)) ? 255 : 1); } for(unsigned char i = 0; i < 4; i++) { analogWrite(H[i], (h & (1 << i)) ? 255 : 4); } #ifndef nolog Serial.print(hour); Serial.print(":"); Serial.println(min); #endif } void countTime() { if(60 == ++min) { min = 0; if(13 == ++hour) { hour = 0; } } } void setup() { pinMode(13, OUTPUT); #ifndef nolog Serial.begin(9600); #endif //Setup pins for(unsigned char m = 0; m < 6; m++) { pinMode(M[m], OUTPUT); } for(unsigned char h = 0; h < 4; h++) { pinMode(H[h], OUTPUT); } pinMode(12, INPUT_PULLUP); write(); while(!pressed) delay(5); //setup time char mode = 0; bool pres = false; unsigned long timeout = millis(); while(mode < 2) { if(pressed) {//button is pressed if(!pres) {//button was not pressed before timeout = millis(); pres = true; if(mode == 0) { hour ++; if(hour == 13) hour = 1; } else { min ++; if(min == 60) min = 0; } write(min, hour); } } else { pres = false; } if(millis() - timeout > 10000) { for(int i = 0; i < 6; i++) { write(0,0); delay(300); write(); delay(300); } write(min, hour); ++mode; timeout = millis(); } delay(50); } lastmin = millis(); } void loop() { if((millis() - lastmin) >= mindelay) { //update min countTime(); write(min, hour); lastmin += mindelay; } else { #ifndef nolog Serial.print(millis()-lastmin); Serial.print(" "); Serial.println(millis()-lastmin >= mindelay); #endif } if(millis()/1000 % 2 == 0) { digitalWrite(13, HIGH); } else digitalWrite(13, LOW); delay(50); }