float pbl_tan(float x) { return pbl_sin(x) / pbl_cos(x); }
// Called once per day void handle_day(AppContextRef ctx, PebbleTickEvent* t) { (void)t; (void)ctx; static char riseText[] = "00:00a 00:00a"; static char setText[] = "00:00a 00:00a"; static char moon1Text[] = "<00:00a\n<00:00a"; static char moon2Text[] = "00:00a>\n00:00a>"; static char date[] = "00/00/0000"; static char moon[] = "m"; static char moonp[] = "-----"; char riseTemp[] = "00:00a"; char setTemp[] = "00:00a"; float moonphase_number = 0.0; int moonphase_letter = 0; float sunrise, sunset, dawn, dusk, moonrise[3], moonset[3]; PblTm* time = t->tick_time; if (!t) get_time(time); // date string_format_time(date, sizeof(date), DATEFMT, time); text_layer_set_text(&dateLayer, date); moonphase_number = moon_phase(tm2jd(time)); moonphase_letter = (int)(moonphase_number*27 + 0.5); // correct for southern hemisphere if ((moonphase_letter > 0) && (LAT < 0)) moonphase_letter = 28 - moonphase_letter; // select correct font char if (moonphase_letter == 14) { moon[0] = (unsigned char)(48); } else if (moonphase_letter == 0) { moon[0] = (unsigned char)(49); } else if (moonphase_letter < 14) { moon[0] = (unsigned char)(moonphase_letter+96); } else { moon[0] = (unsigned char)(moonphase_letter+95); } text_layer_set_text(&moonLayer, moon); if (moonphase_number >= 0.5) { mini_snprintf(moonp,sizeof(moonp)," %d-",(int)((1-(1+pbl_cos(moonphase_number*M_PI*2))/2)*100)); } else { mini_snprintf(moonp,sizeof(moonp)," %d+",(int)((1-(1+pbl_cos(moonphase_number*M_PI*2))/2)*100)); } text_layer_set_text(&moonPercent, moonp); //sun rise set sunmooncalc(tm2jd(time), TZ, LAT, -LON, 1, &sunrise, &sunset); sunmooncalc(tm2jd(time), TZ, LAT, -LON, 2, &dawn, &dusk); (dawn == 99.0) ? mini_snprintf(riseTemp,sizeof(riseTemp),"--:--") : mini_snprintf(riseTemp,sizeof(riseTemp),"%s",thr(dawn,0)); (sunrise == 99.0) ? mini_snprintf(riseText,sizeof(riseText),"%s --:--",riseTemp) : mini_snprintf(riseText,sizeof(riseText),"%s %s",riseTemp,thr(sunrise,0)); (sunset == 99.0) ? mini_snprintf(setTemp,sizeof(setTemp),"--:--") : mini_snprintf(setTemp,sizeof(setTemp),"%s",thr(sunset,0)); (dusk == 99.0) ? mini_snprintf(setText,sizeof(setText),"%s --:--",setTemp) : mini_snprintf(setText,sizeof(setText),"%s %s",setTemp,thr(dusk,0)); text_layer_set_text(&riseLayer, riseText); text_layer_set_text(&setLayer, setText); //moon times sunmooncalc(tm2jd(time)-1, TZ, LAT, -LON, 0, &moonrise[0], &moonset[0]); // yesterday sunmooncalc(tm2jd(time), TZ, LAT, -LON, 0, &moonrise[1], &moonset[1]); // today sunmooncalc(tm2jd(time)+1, TZ, LAT, -LON, 0, &moonrise[2], &moonset[2]); // tomorrow if (moonrise[1] == 99.0) { // moon didn't rise today mini_snprintf(moon1Text,sizeof(moon1Text),"<%s",mthr(moonrise[0],moonset[1],"\0")); mini_snprintf(moon2Text,sizeof(moon2Text),"%s>",mthr(moonrise[2],moonset[2],">")); } else if (moonset[1] == 99.0) { // moon didn't set today mini_snprintf(moon1Text,sizeof(moon1Text),"%s>",mthr(moonrise[1],moonset[2],"\0")); mini_snprintf(moon2Text,sizeof(moon2Text),"%s>\n--:--",thr(moonrise[2],1)); } else if (moonrise[1] > moonset[1]) { // moon rose before midnight, rises again today mini_snprintf(moon1Text,sizeof(moon1Text),"<%s",mthr(moonrise[0],moonset[1],"\0")); mini_snprintf(moon2Text,sizeof(moon2Text),"%s>",mthr(moonrise[1],moonset[2],"\0")); } else { // moon was down at midnight, rose today mini_snprintf(moon1Text,sizeof(moon1Text),"%s",mthr(moonrise[1],moonset[1],"\0")); mini_snprintf(moon2Text,sizeof(moon2Text),"%s>",mthr(moonrise[2],moonset[2],">")); } text_layer_set_text(&moonLeft, moon1Text); text_layer_set_text(&moonRight, moon2Text); }