Wkleje kod, może sie komuś przyda. jako sterownik wykorzystałem sterownik silnika na L298, bo taki miałem pod ręką. Jest oczywiście zdecydowanie za mocny, ale taki miałem.
/*
Projekt dla Arduino, z wykorzystaniem
do pomiaru czasu wewnętrznego zegara Atmegi
Jest to adaptacja kodu ze strony:
http://majsterkowo.pl/sterownik-zegarow-wtornych-pkp/*/
int clockSET = 6; // przycisk popychania zegara - Arduino pin 6
int clockDIR = 7; // Pierwszy Pin na driverze silnika - Arduino pin 7
int clockPWM = 8; // Drugi Pin na drajwerze silnika - Arduino pin 8
int clockPOL = 0; // sygnalizacja zmiana polaryzacji cewki zegara
boolean zwloka = true; // zwłoka aby minuta nie przeskakiwała kilka razy
long previousMillis = 0; // will store last time LED was updated
long interval = 60000; // jedna minuta (milliseconds)
void setup()
{
pinMode(clockPWM, OUTPUT);
pinMode(clockDIR, OUTPUT);
pinMode(clockSET, INPUT);
clockPOL = 0;
digitalWrite(clockPWM, LOW);
digitalWrite(clockDIR, LOW);
zwloka = false;
}
void loop()
{
unsigned long currentMillis = millis();
if(zwloka == false) {
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
if (clockPOL == 0)
{
clockPOL = 1;
digitalWrite(clockPWM, HIGH);
digitalWrite(clockDIR, LOW);
delay(500);
digitalWrite(clockPWM, LOW);
digitalWrite(clockDIR, LOW);
}
else
{
clockPOL = 0;
digitalWrite(clockPWM, LOW);
digitalWrite(clockDIR, HIGH);
delay(500);
digitalWrite(clockPWM, LOW);
digitalWrite(clockDIR, LOW);
}
zwloka = !zwloka;
}
} else {
delay(10000); // czekamy 10 sekund po każdej minucie aby uniknąć dodatkowych przesunięć wskazówki minutowej
zwloka = !zwloka;
}
// Ręczne popychanie zegara
int clockRST = digitalRead(clockSET);
if (clockRST == HIGH) // pętla wykonuje się gdy jest naciśnięty przycisk Pin 6
{
if (clockPOL == 0)
{
digitalWrite(clockPWM, LOW);
digitalWrite(clockDIR, HIGH);
delay(500);
digitalWrite(clockPWM, LOW);
digitalWrite(clockDIR, LOW);
clockPOL = 1;
}
else
{
digitalWrite(clockPWM, HIGH);
digitalWrite(clockDIR, LOW);
delay(500);
digitalWrite(clockPWM, LOW);
digitalWrite(clockDIR, LOW);
clockPOL = 0;
}
}
}