#include <Servo.h>
Servo myservo; // create Servo object to control a servo
int pos = 0;
int currenthour = 14;
int currentminute = 48;
float currentminutedecimal = currentminute / 60.0;
float currenttime = currenthour + currentminutedecimal;
int sunrisehour = 7;
int sunriseminute = 47;
float sunriseminutedecimal = sunriseminute / 60.0;
float sunrise = sunrisehour + sunriseminutedecimal;
int sunsethour = 18;
int sunsetminute = 48;
float sunsetminutedecimal = sunsetminute / 60.0;
float sunset = sunsethour + sunsetminutedecimal;
float elapsedhours = (currenttime - sunrise); // hours between NOW and sunrise
float elapsedangle = elapsedhours * 15.0; // hours * degrees per hour
int degreesperhour = 15; // Earth rotates 15 degrees per hour
float degreesperminute = degreesperhour / 60;
float degreespersecond = degreesperminute / 60;
float sunriseangle = (sunset - sunrise) * 15;
float currentangle = 180 - sunriseangle + elapsedangle;
float sunsetangle = 180 - sunriseangle;
unsigned long timer, timeout = 1000;
void setup() {
Serial.begin(115200);
report();
}
void loop() {
if (millis() - timer > timeout) {
timer = millis();
currentangle += degreespersecond;
report();
myservo.write(currentangle);
}
}
void pad(float value) {
if (value < 100) Serial.print(" ");
if (value < 10) Serial.print(" ");
Serial.print(value);
}
void report() {
for (int i = 0; i < 36; i++)
Serial.print("=");
Serial.println();
Serial.print("Sunrise (time:");
pad(sunrise);
Serial.print(") (angle:");
pad(sunriseangle);
Serial.println(")");
Serial.print("Current (time:");
pad(currenttime);
Serial.print(") (angle:");
pad(currentangle);
Serial.println(")");
Serial.print("Elapsed (time:");
pad(elapsedhours);
Serial.print(") (angle:");
pad(elapsedangle);
Serial.println(")");
Serial.print("Sunset (time:");
pad(sunset);
Serial.print(") (angle:");
pad(sunsetangle);
Serial.println(")");
myservo.attach(3);
myservo.write(currentangle);
}