#include "SunMoonCalc.h"
void printResult(SunMoonCalc::Result result) {
Serial.println("Sun");
Serial.println("\tRise: " + formatTime(result.sun.rise));
Serial.println("\tNoon: " + formatTime(result.sun.transit));
Serial.println("\tSet: " + formatTime(result.sun.set));
Serial.printf("\tAzimuth: %f°\n", result.sun.azimuth);
Serial.printf("\tElevation: %f°\n", result.sun.elevation);
Serial.printf("\tDistance: %fkm\n", result.sun.distance);
Serial.println("Moon");
if (result.moon.riseJd != -1) {
Serial.println("\tRise: " + formatTime(result.moon.rise));
Serial.println("\tNoon: " + formatTime(result.moon.transit));
Serial.println("\tSet: " + formatTime(result.moon.set));
}
else {
if (result.moon.elevation < 0) Serial.println("\t** Moon never rises **");
else Serial.println("\t** Moon is circumpolar **");
}
Serial.printf("\tAzimuth: %f°\n", result.moon.azimuth);
Serial.printf("\tElevation: %f°\n", result.moon.elevation);
Serial.printf("\tDistance: %fkm\n", result.moon.distance);
Serial.printf("\tAge: %f days\n", result.moon.age);
Serial.printf("\tIllumination: %f%\n", result.moon.illumination * 100);
Serial.println("\tPhase: " + result.moon.phase.name);
Serial.printf("\tBright limb angle: %frad\n", result.moon.brightLimbAngle);
Serial.printf("\tPosition angle of axis: %frad\n", result.moon.axisPositionAngle);
Serial.printf("\tParallactic angle: %frad\n", result.moon.parallacticAngle);
}
String padWithZeroBelowTen(int d) {
return d < 10 ? "0" + String(d) : String(d);
}
String formatTime(time_t timestamp) {
tm *date = gmtime(×tamp);
String year = "" + String(date->tm_year + 1900);
String month = padWithZeroBelowTen(date->tm_mon + 1);
String day = padWithZeroBelowTen(date->tm_mday);
return year + "-" + month + "-" + day + " " + padWithZeroBelowTen(date->tm_hour) + ":" + padWithZeroBelowTen(date->tm_min) + ":" + padWithZeroBelowTen(date->tm_sec) + " UTC";
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
SunMoonCalc sm(2025, 12, 2, 0, 0, 0, 45.613418, 10.312439); // São Paulo -23.64125 -46.67494
SunMoonCalc::Result resultado = sm.calculateSunAndMoonData();
printResult(resultado);
}
void loop() {
// put your main code here, to run repeatedly:
delay(10); // this speeds up the simulation
}