mirror of
https://github.com/Xinyuan-LilyGO/TTGO_TWatch_Library.git
synced 2026-03-04 15:24:10 +01:00
107 lines
3.3 KiB
C++
107 lines
3.3 KiB
C++
// Display Jupiters 4 moons
|
|
// It uses the current date time and corrects to get UTC time
|
|
// Make sure you set the correct Time Zone below
|
|
|
|
#define APP_TIME_ZONE -4 // I am East Coast in Daylight Savings
|
|
|
|
void jSats() {
|
|
|
|
// Get the current info
|
|
RTC_Date tnow = ttgo->rtc->getDateTime();
|
|
|
|
hh = tnow.hour;
|
|
mm = tnow.minute;
|
|
ss = tnow.second;
|
|
dday = tnow.day;
|
|
mmonth = tnow.month;
|
|
yyear = tnow.year;
|
|
|
|
float tDay = dday; // Calculate the day plus fractional day
|
|
tDay += (hh - APP_TIME_ZONE) / 24.0;
|
|
tDay += mm / 1440.0;
|
|
int16_t tYear = yyear;
|
|
int8_t tMonth = mmonth;
|
|
|
|
int16_t cYear, cMonth;
|
|
if (tMonth < 3) {
|
|
cYear = tYear - 1;
|
|
cMonth = tMonth + 12;
|
|
} else {
|
|
cYear = tYear;
|
|
cMonth = tMonth;
|
|
}
|
|
// Calculate the Julian Date offset from Epoch
|
|
int a = cYear / 100;
|
|
int b = 2 - a + (int)(a / 4);
|
|
long c = 365.25 * cYear;
|
|
long d = 30.6001 * (cMonth + 1);
|
|
float N = b + c + d + tDay - 694025.5;
|
|
|
|
// Calc moon positions
|
|
float P = PI / 180;
|
|
float MT = (358.476 + 0.9856003 * N) * P;
|
|
float MJ = (225.328 + 0.0830853 * N) * P;
|
|
float JJ = 221.647 + 0.9025179 * N;
|
|
float VT = 1.92 * sin(MT) + 0.02 * sin(2 * MT);
|
|
float VJ = 5.55 * sin(MJ) + 0.17 * sin(2 * MJ);
|
|
float K = (JJ + VT - VJ) * P;
|
|
float DT = sqrt(28.07 - 10.406 * cos(K));
|
|
float Z1 = sin(K) / DT;
|
|
float I = atan(Z1 / sqrt(1 - Z1 * Z1));
|
|
I = I / P;
|
|
float F = (N - DT / 173);
|
|
float F1 = I - VJ;
|
|
float U1 = 84.5506 + 203.405863 * F + F1;
|
|
float U2 = 41.5015 + 101.2916323 * F + F1;
|
|
float U3 = 109.9770 + 50.2345169 * F + F1;
|
|
float U4 = 176.3586 + 21.4879802 * F + F1;
|
|
float X1 = 5.906 * sin(U1 * P);
|
|
float X2 = 9.397 * sin(U2 * P);
|
|
float X3 = 14.989 * sin(U3 * P);
|
|
float X4 = 26.364 * sin(U4 * P);
|
|
// Print out results
|
|
|
|
ttgo->tft->fillScreen(TFT_BLACK);
|
|
ttgo->tft->setTextSize(2);
|
|
ttgo->tft->setCursor( 0, 10);
|
|
ttgo->tft->setTextColor(TFT_ORANGE);
|
|
ttgo->tft->print(" IO: ");
|
|
ttgo->tft->print(X1, 1);
|
|
ttgo->tft->setCursor( 0, 30);
|
|
ttgo->tft->setTextColor(TFT_BLUE);
|
|
ttgo->tft->print(" EU: ");
|
|
ttgo->tft->println(X2, 1);
|
|
ttgo->tft->setCursor( 0, 50);
|
|
ttgo->tft->setTextColor(TFT_GREEN);
|
|
ttgo->tft->print(" GA: ");
|
|
ttgo->tft->println(X3, 1);
|
|
ttgo->tft->setCursor( 0, 70);
|
|
ttgo->tft->setTextColor(TFT_YELLOW);
|
|
ttgo->tft->print(" CA: ");
|
|
ttgo->tft->println(X4, 1);
|
|
|
|
//Now display them as they would appear
|
|
|
|
ttgo->tft->fillCircle(119, 155, 6, TFT_RED); // Jupiter
|
|
|
|
ttgo->tft->setTextColor(TFT_ORANGE);
|
|
ttgo->tft->fillCircle(int(X1 * 4 + 119), 155, 2, TFT_ORANGE);
|
|
ttgo->tft->drawString("I", int(X1 * 4 + 119)-3, 175 , 1);
|
|
ttgo->tft->setTextColor(TFT_BLUE);
|
|
ttgo->tft->fillCircle(int(X2 * 4 + 119), 155, 2, TFT_BLUE);
|
|
ttgo->tft->drawString("E", int(X2 * 4 + 119)-3, 175, 1);
|
|
ttgo->tft->setTextColor(TFT_GREEN);
|
|
ttgo->tft->fillCircle(int(X3 * 4 + 119), 155, 2, TFT_GREEN);
|
|
ttgo->tft->drawString("G", int(X3 * 4 + 119)-3, 175, 1);
|
|
ttgo->tft->setTextColor(TFT_YELLOW);
|
|
ttgo->tft->fillCircle(int(X4 * 4 + 119), 155, 2, TFT_YELLOW);
|
|
ttgo->tft->drawString("C", int(X4 * 4 + 119)-3, 175, 1);
|
|
|
|
|
|
// Wait for touch to return
|
|
int16_t x, y;
|
|
while (!ttgo->getTouch(x, y)) {} // Wait for touch
|
|
while (ttgo->getTouch(x, y)) {} // Wait for release
|
|
ttgo->tft->fillScreen(TFT_BLACK);
|
|
}
|