116 lines
2.1 KiB
C++
116 lines
2.1 KiB
C++
|
|
#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);
|
|
}
|