fakeBeacon / display.h /
2a104f5 5 years ago
1 contributor
97 lines | 4.749kb
#ifndef _DISPLAY_H
#define _DISPLAY_H

#include "beacon.h"

// 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
//-----------------------------------------------------------------------------------


// Display String Variables for updating all screen at once
//---------------------------------------------------------------------
char instanceStr[12] = "";
char macStr[18] = "";
int ad_running = 0;
uint32_t beacon_count = 0;

#ifdef ARDUINO_M5Stick_C
float getBatteryLevel(void)
{
  uint16_t vbatData = M5.Axp.GetVbatData();
  float vbat = vbatData * 1.1;
  //return 100.0 * ((vbat - 3000) / (4070 - 3000));
  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, "BT: "+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("BT: "+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
}
#endif //_DISPLAY_H