#include <Stepper.h>
// Define stepper motor connections
/*
28BYJ-48 stepper motor with ULN2003
IN1 7
IN2 6
IN3 5
IN4 4
*/
const long stepsPerRevolution = 4096; // Adjust based on your motor
const int IN4 = 4;
const int IN3 = 5;
const int IN2 = 6;
const int IN1 = 7;
// 7,5,6,4
Stepper stepperMinute(stepsPerRevolution, IN1, IN3, IN2, IN4);
// 4,6,5,7 TO REVERSE DIRECTION
//Stepper stepperMinute(stepsPerRevolution, IN4, IN2, IN3, IN1);
void setup() {
// Set initial positions
//stepperHour.setCurrentPosition(0);
//stepperMinute.setCurrentPosition(0);
Serial.begin(115200);
stepperMinute.setSpeed(5);
}
unsigned long prevminuteSteps = 0;
int interval = 30000;
long prevTime = 0;
long cumuSteps = 0;
void loop() {
// Calculate current time and steps needed
long currentTime = millis();
if (currentTime - prevTime > interval) {
prevTime = currentTime;
int seconds = currentTime / 1000;
int minutes = seconds / 60;
seconds %= 60; //sec = remainder of seconds / 60
int hours = minutes / 60;
minutes %= 60; //min = reminder of minutes / 60
// increment every minute
//unsigned long minuteSteps = hours * stepsPerRevolution + minutes * stepsPerRevolution / 60;
// increment every second
unsigned long minuteSteps = hours * stepsPerRevolution + (minutes * stepsPerRevolution + seconds * stepsPerRevolution / 60) / 60;
long steps = minuteSteps - prevminuteSteps;
prevminuteSteps = minuteSteps;
// Move stepper motors to correct positions
stepperMinute.step(steps);
// power cut
digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW);
//long cumuSteps = cumuSteps + steps;
cumuSteps >= stepsPerRevolution ? cumuSteps = 0 : cumuSteps = cumuSteps + steps;
Serial.println ((double(cumuSteps) / double(stepsPerRevolution)) * 12 );
}
}