#ifndef _DISPLAY_H #define _DISPLAY_H #include "beacon.h" // Display String Variables for updating all screen at once //--------------------------------------------------------------------- char instanceStr[12] = ""; char macStr[18] = ""; int ad_running = 0; uint32_t beacon_count = 0; #ifndef NODISPLAY // Display Constants #define LINE1 0 #define LINE2 12 #define LINE3 24 #define LINE4 36 #define LINE5 48 #ifdef ARDUINO_M5Stick_C #define LINE6 60 //M5Only #define LINEBOTTOM 72 //Battery see : http://community.m5stack.com/topic/1361/ischarging-and-getbatterylevel/5 #define VMAX 4000.0f // Observed Maximum: 4161.3 after 7h charge #define VMIN 2700.0f // Observed Minimum: 2692.0 #define COLUMN_BAT 80 #elif ARDUINO_HELTEC_WIFI_LORA_32 #define LINEBOTTOM 54 #endif //ARDUINO_M5Stick_C & ARDUINO_HELTEC_WIFI_LORA_32 //----------------------------------------------------------------------------------- #ifdef ARDUINO_M5Stick_C #define MIN_BACKLIGHT 7 #define MID_BACKLIGHT 11 #define MAX_BACKLIGHT 15 #define DEFAULT_BACKLIGHT MID_BACKLIGHT uint8_t backlight_level = DEFAULT_BACKLIGHT; //15 High Luminosity, 7 lowest luminosity #endif //ARDUINO_M5Stick_C //----------------------------------------------------------------------------------- #ifdef ARDUINO_M5Stick_C float getBatteryLevel(void) { uint16_t vbatData = M5.Axp.GetVbatData(); float vbat = vbatData * 1.1; return 100.0 * ((vbat - VMIN) / (VMAX - VMIN)); } #endif //ARDUINO_M5Stick_C //--------------------------------------------------------------------- void DisplayButtonStatus() { #ifdef ARDUINO_HELTEC_WIFI_LORA_32 Heltec.display->clear(); Heltec.display->drawString(0, LINE1, "EDDY: "+String(macStr)); Heltec.display->drawString(0, LINE2, "I : "+String(instanceStr)); Heltec.display->drawString(0, LINE4, beaconTypeStr); Heltec.display->drawString(0, LINEBOTTOM, "Cnt: "+String(beacon_count)); if( 1 == ad_running ) { String running="X"; Heltec.display->drawString(120, LINEBOTTOM, running); } Heltec.display->display(); #elif ARDUINO_M5Stick_C //ARDUINO_TTGO_LoRa32_V1 //M5.Lcd.fillScreen(BLACK); M5.Lcd.setTextColor(0x7bef, BLACK); M5.Lcd.setCursor(0, LINE1, 1);M5.Lcd.println("EDDY: "+String(macStr)); M5.Lcd.setCursor(0, LINE2, 1);M5.Lcd.println("I : "+String(instanceStr)); M5.Lcd.fillRect(0, LINE4, 160, 15, BLACK); M5.Lcd.setCursor(0, LINE4, 2);M5.Lcd.setTextColor(GREEN, BLACK); M5.Lcd.println(beaconTypeStr); M5.Lcd.setCursor(0, LINE6, 1);M5.Lcd.setTextColor(0x7bef, BLACK); M5.Lcd.println( "Cnt: "+String(beacon_count)); if( 1 == ad_running ) { M5.Lcd.setCursor(150, LINEBOTTOM, 1);M5.Lcd.setTextColor(WHITE, GREEN); M5.Lcd.println(String("X")); } else { M5.Lcd.fillRect(150, LINEBOTTOM, 160, 10, BLACK); } float BatteryValue = M5.Axp.GetVbatData() * 1.1;// mV float BatteryPercent = 100*(BatteryValue-VMIN)/ (VMAX-VMIN); float BatteryLevel = getBatteryLevel(); if( BatteryPercent > 100 ) BatteryPercent = 100; else if( BatteryPercent < 0 ) BatteryPercent = 0; M5.Lcd.setTextColor(0x7bef, BLACK); M5.Lcd.setCursor(0, LINEBOTTOM, 1); M5.Lcd.fillRect(0, LINEBOTTOM, 50, 10, BLACK); M5.Lcd.fillRect(COLUMN_BAT, LINEBOTTOM, 60, 10, BLACK); M5.Lcd.printf("%.1fmV",BatteryValue); if( BatteryPercent == 100 ) { M5.Lcd.setCursor(COLUMN_BAT, LINEBOTTOM, 1);M5.Lcd.setTextColor(GREEN, BLACK);M5.Lcd.printf("%.0f%%",BatteryPercent); } else if( BatteryPercent > 95 ) { M5.Lcd.setCursor(COLUMN_BAT, LINEBOTTOM, 1);M5.Lcd.setTextColor(GREEN, BLACK);M5.Lcd.printf("%.3f%%",BatteryPercent); } else if( BatteryPercent > 90 ) { M5.Lcd.setCursor(COLUMN_BAT, LINEBOTTOM, 1);M5.Lcd.setTextColor(GREEN, BLACK);M5.Lcd.printf("%.2f%%",BatteryPercent); } else if( BatteryPercent > 60 ) { M5.Lcd.setCursor(COLUMN_BAT, LINEBOTTOM, 1);M5.Lcd.setTextColor(GREEN, BLACK);M5.Lcd.printf("%.1f%%",BatteryPercent); } else if( BatteryPercent > 60 ) { M5.Lcd.setCursor(COLUMN_BAT, LINEBOTTOM, 1);M5.Lcd.setTextColor(GREEN, BLACK);M5.Lcd.printf("%.1f%%",BatteryPercent); } else if( BatteryPercent > 40 ) { M5.Lcd.setCursor(COLUMN_BAT, LINEBOTTOM, 1);M5.Lcd.setTextColor(0xff80, BLACK);M5.Lcd.printf("%.0f%%",BatteryPercent); } //Yellow else if( BatteryPercent > 30 ) { M5.Lcd.setCursor(COLUMN_BAT, LINEBOTTOM, 1);M5.Lcd.setTextColor(0xfbe4, BLACK);M5.Lcd.printf("%.0f%%",BatteryPercent); } //Orange else { M5.Lcd.setCursor(COLUMN_BAT, LINEBOTTOM, 1);M5.Lcd.setTextColor(RED, BLACK);M5.Lcd.printf("%.0f%%",BatteryPercent); } //Red //Serial.println(BatteryValue); #endif //ARDUINO_M5Stick_C & ARDUINO_HELTEC_WIFI_LORA_32 } #else void DisplayButtonStatus() {}; #endif //NODISPLAY #endif //_DISPLAY_H