void u8g_DrawInfo(void) //Malen der Batterie, Anzeige in % { ///////Infos//// X ///////// // Karte //Pfeil// Frei // // akt. // // hier: // // Raum ///////// // // //Info // // // //Karte// // ////////////////////////////// u8g_DrawHLine(&u8g, 0, 6, 128); //Horizontale Abgrenzungslinie u8g_SetFont(&u8g, u8g_font_4x6); //Schriftart //////Batterie//////////// u8g_DrawFrame(&u8g, 0, 0, 10, 5); //Batteriekörper u8g_DrawPixel(&u8g, 10, 2); int8_t batt_volumeVar = batt_percent/11; //Berechnung Füllung if(batt_volumeVar > 8) batt_volumeVar = 8; if(batt_volumeVar < 0) batt_volumeVar = 0; u8g_DrawBox(&u8g, 1, 1, batt_volumeVar, 3); //Füllung //Anzeige daneben u8g_DrawLong(15, 5, batt_percent); u8g_DrawStr(&u8g, 25, 5, "%"); //Fehleranzeige daneben: if(timer_disp_msg == 0) { disp_msg_i ++; if(disp_msg_i == DISP_MSG_I_TOP) { disp_msg_i = 0; if(!(is_msg & (1<<1))) { which_msg = 0; } else { is_msg &= ~ (1<<1); } } is_msg &= ~ (1<<0); } switch(disp_msg_i) { case 0: if(batt_percent < 20) { set_msg(); } break; case 1: if((check_srf & (1<<0)) || (check_srf & (1<<1)) || (check_srf & (1<<2)) || (check_srf & (1<<3))) { set_msg(); } break; case 2: if((check_srf & (1<<4)) || (check_srf & (1<<5)) || (check_srf & (1<<6)) || (check_srf & (1<<7))) { set_msg(); } break; case 3: if((check_srf & (1<<8)) || (check_srf & (1<<9)) || (check_srf & (1<<10)) || (check_srf & (1<<11))) { set_msg(); } break; case 4: if((check_srf & (1<<12)) || (check_srf & (1<<13)) || (check_srf & (1<<14)) || (check_srf & (1<<15))) { set_msg(); } break; case 5: if(check_mlx & (1<<0)) { set_msg(); } break; case 6: if(check_mlx & (1<<1)) { set_msg(); } break; case 7: if((check_um6 & (1<<0)) || (check_um6 & (1<<1))) { set_msg(); } break; case 8: if(motor_off) { set_msg(); } break; case 9: if(timer_bt_is_busy > 0) { set_msg(); } break; case 10: if(setup) { set_msg(); } break; case 11: if(check_um6 & (1<<2)) { set_msg(); } case 12: if(!use_map) { set_msg(); } break; } u8g_DrawStr(&u8g, 35, 5, disp_msg[which_msg]); }
/******************************************************************************* * Отрисовка и обрадотка команд секундомера ******************************************************************************/ void stopwatch(mtk_t * mtk) { uint8_t i, x, y; uint32_t count; char sTemp[11]; count = sWatch.dsH[sWatch.nums]; if (mtk->command) { switch (mtk->command) { case COMMAND_NEXT: { if (!sWatch.nums) { state.taskList |= TASK_STOPWATCH;//Для отображения на главном экране SysTick_task_add(stopwatchTick, 100); //Задача считать время sWatch.nums = 1; sWatch.select = 1; sWatch.dsH[sWatch.nums] = 0; } else { if (!SysTick_task_check(stopwatchTick) && sWatch.nums == sWatch.select) { SysTick_task_add(stopwatchTick, 100); state.taskList |= TASK_STOPWATCH; } else if (sWatch.select < 9) { sWatch.select++; if (sWatch.select > sWatch.nums) { sWatch.dsH[sWatch.nums + 1] = sWatch.dsH[sWatch.nums]; sWatch.nums++; } } } mtk->command = COMMAND_NULL; } break; case COMMAND_PREV: if (sWatch.select > 1) { sWatch.select--; mtk->command = COMMAND_NULL; } break; case COMMAND_UP: { if (sWatch.nums) { if (SysTick_task_check(stopwatchTick)) { SysTick_task_del(stopwatchTick); } else { SysTick_task_add(stopwatchTick, 100); sWatch.select = sWatch.nums; } state.taskList ^= TASK_STOPWATCH; } mtk->command = COMMAND_NULL; } break; case COMMAND_DOWN: { SysTick_task_del(stopwatchTick); sWatch.nums = 0; sWatch.select = 0; state.taskList |= TASK_REDRAW; state.taskList &= ~ TASK_STOPWATCH; mtk->command = COMMAND_NULL; } break; } } else { u8g_DrawLine(mtk->u8g, 0, 38, 239, 38); x = 8, y = 35; for (i = 0; i < sWatch.nums; i++) { sprintf(sTemp, "%d", i + 1); if (sWatch.select == i + 1) { u8g_DrawRBox(mtk->u8g, x - 4, y - 16, 18, 18, 3); u8g_SetDefaultBackgroundColor(mtk->u8g); u8g_DrawStr(mtk->u8g, x, y, sTemp); u8g_SetDefaultForegroundColor(mtk->u8g); } else u8g_DrawStr(mtk->u8g, x, y, sTemp); x += 18; } if (state.taskList & TASK_STOPWATCH) u8g_DrawStr(mtk->u8g, 190, y, "RUN"); else if (!sWatch.nums) u8g_DrawStr(mtk->u8g, 188, y, "STOP"); else u8g_DrawStr(mtk->u8g, 180, y, "PAUSE"); y = 57; if (sWatch.select > 1) { y -= 6; u8g_DrawLine(mtk->u8g, 0, 105, 239, 105); } //Отрисовка верхнего счетчика интервалов. count = sWatch.dsH[sWatch.select] - sWatch.dsH[sWatch.select - 1]; u8g_SetFont(mtk->u8g, u8g_font_elpaulo32n); u8g_SetScale2x2(mtk->u8g); sprintf(sTemp, "%02d:%02d", (count / 600) % 60, (count / 10) % 60); u8g_DrawStr(mtk->u8g, 0, y, sTemp); u8g_UndoScale(mtk->u8g); sprintf(sTemp, ".%01d", count % 10); u8g_DrawStr(mtk->u8g, 205, y * 2, sTemp); } //Отрисовка нижнего/полного счета. if (sWatch.select > 1) { count = sWatch.dsH[sWatch.select]; sprintf(sTemp, "%01d:%02d:%02d:%01d", (count / 36000), ((count / 600) % 60), ((count / 10) % 60), (count % 10)); if(count/360000) x = 43; else x = 67; u8g_DrawStr(mtk->u8g, x, 138, sTemp); u8g_SetFont(mtk->u8g, u8g_font_elpaulo20); u8g_DrawStr(mtk->u8g, 3, 138, "Total:"); } /* Нарисуем подскуазку*/ u8g_SetFont(mtk->u8g, u8g_font_elpaulo20); x = 0, y = 158; u8g_DrawStr(mtk->u8g, x, y, "\x0AStart"); u8g_DrawStr(mtk->u8g, x + 80, y, "\x0CPause"); u8g_DrawStr(mtk->u8g, x + 160, y, "\x0DReset"); u8g_DrawLine(mtk->u8g, 0, 140, 239, 140); x = 75; for (i = 0; i < 2; i++) { u8g_DrawLine(mtk->u8g, x, 141, x, 159); x += 80; } }
void draw(void) { u8g_SetFont(&u8g, u8g_font_6x10); u8g_DrawStr(&u8g, 0, 15, "Hello World!"); }
ICACHE_FLASH_ATTR static void draw_normal(DrawingState *state) { uint8_t buf[50]; u8g_SetColorIndex(&(state->u8g), 1); drawingRefreshIcons(state); uint8_t iconWidth = 40; //current measured temperature u8g_SetFont(&(state->u8g), u8g_font_helvB18); u8g_SetFontPosTop(&(state->u8g)); os_sprintf(buf, "%d", state->currentTemp / 100); uint8_t currentTempWidth = u8g_GetStrWidth(&(state->u8g), buf); uint8_t cWidth = u8g_GetStrWidth(&(state->u8g), "C"); uint8_t strHeight = u8g_GetFontAscent(&(state->u8g)); u8g_SetFont(&(state->u8g), u8g_font_helvR08); u8g_SetFontPosBaseline(&(state->u8g)); os_sprintf(buf, "%02d", abs(state->currentTemp % 100)); uint8_t webTempWidth = u8g_GetStrWidth(&(state->u8g), buf); u8g_DrawStr(&(state->u8g), iconWidth + (128 - iconWidth) / 2 - (currentTempWidth + cWidth + webTempWidth) / 2 + currentTempWidth, 16 + strHeight, buf); u8g_SetFont(&(state->u8g), u8g_font_helvB18); u8g_SetFontPosTop(&(state->u8g)); os_sprintf(buf, "%d", state->currentTemp / 100); u8g_DrawStr(&(state->u8g), iconWidth + (128 - iconWidth) / 2 - (currentTempWidth + cWidth + webTempWidth) / 2, 16, buf); u8g_DrawStr(&(state->u8g), iconWidth + (128 - iconWidth) / 2 - (currentTempWidth + cWidth + webTempWidth) / 2 + currentTempWidth + webTempWidth, 16, "C"); //web text if (state->weather.code != 255) { u8g_SetFont(&(state->u8g), u8g_font_6x10); u8g_SetFontPosBottom(&(state->u8g)); os_sprintf(buf, "%s", state->weather.text); currentTempWidth = u8g_GetStrWidth(&(state->u8g), buf); strHeight = u8g_GetFontBBXHeight(&(state->u8g)); u8g_DrawStr(&(state->u8g), iconWidth + (128 - iconWidth) / 2 - currentTempWidth / 2, 64, buf); } //web temperature u8g_SetFont(&(state->u8g), u8g_font_6x10); u8g_SetFontPosBottom(&(state->u8g)); os_sprintf(buf, "%dC", state->weather.temp); uint8_t outsideTempWidth = u8g_GetStrWidth(&(state->u8g), buf); u8g_DrawStr(&(state->u8g), iconWidth + (128 - iconWidth) / 2 - outsideTempWidth / 2, 64 - strHeight, buf); u8g_SetFont(&(state->u8g), u8g_font_6x10); u8g_SetFontPosCenter(&(state->u8g)); if (state->temperatureMode == MANUAL) { os_sprintf(buf, "Manual: %d.%02dC", state->manualTemp / 100, abs(state->manualTemp % 100)); } else if (state->temperatureMode == AUTOMATIC) { if (state->automaticTempCurrentState == NULL) { os_sprintf(buf, "Auto"); } else { os_sprintf(buf, "A:%d.%02dC, %d:%02d", state->automaticTempCurrentState->temp / 100, abs(state->automaticTempCurrentState->temp % 100), state->automaticTempCurrentState->time / 60, state->automaticTempCurrentState->time % 60); } } u8g_DrawStr(&(state->u8g), 0, 8, buf); }