Skip to content

Switch display library (by j000bs) #355

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 5 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ lib_deps =
; https://arduinojson.org/v6/api/
bblanchon/ArduinoJson @ ^6.21.2
rlogiacco/CircularBuffer @ ^1.3.3
thingpulse/ESP8266 and ESP32 OLED driver for SSD1306 displays @ ^4.4.0
olikraus/U8g2 @ ^2.35.9
adafruit/Adafruit BMP280 Library@^2.6.8
pololu/VL53L0X@^1.3.1
; https://github.com/fhessel/esp32_https_server
Expand Down
15 changes: 3 additions & 12 deletions src/OpenBikeSensorFirmware.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ Button button(PUSHBUTTON_PIN);

Config config;

SSD1306DisplayDevice* obsDisplay;
DisplayDevice* obsDisplay;
HCSR04SensorManager* sensorManager;
static BluetoothManager* bluetoothManager;

Expand Down Expand Up @@ -106,14 +106,6 @@ void handleButtonInServerMode();
bool loadConfig(ObsConfig &cfg);
void copyCollectedSensorData(DataSet *set);

// The BMP280 can keep up to 3.4MHz I2C speed, so no need for an individual slower speed
void switch_wire_speed_to_VL53(){
Wire.setClock(400000);
}
void switch_wire_speed_to_SSD1306(){
Wire.setClock(500000);
}

void setupSensors() {
sensorManager = new HCSR04SensorManager;

Expand Down Expand Up @@ -211,14 +203,13 @@ void setup() {
// Setup display
//##############################################################
Wire.begin();
Wire.setClock(500000);
Wire.beginTransmission(displayAddress);
byte displayError = Wire.endTransmission();
if (displayError != 0) {
Serial.println("Display not found");
}
obsDisplay = new SSD1306DisplayDevice;

switch_wire_speed_to_SSD1306();
obsDisplay = new DisplayDevice;

obsDisplay->showLogo(true);
obsDisplay->showTextOnGrid(2, obsDisplay->startLine(), OBSVersion);
Expand Down
2 changes: 1 addition & 1 deletion src/configServer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -492,7 +492,7 @@ String getIp() {
}
}

void updateDisplay(SSD1306DisplayDevice * const display, String action = "") {
void updateDisplay(DisplayDevice * const display, String action = "") {
if (action.isEmpty()) {
display->showTextOnGrid(0, 0, "Ver.:");
display->showTextOnGrid(1, 0, OBSVersion);
Expand Down
86 changes: 30 additions & 56 deletions src/displays.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@

#include "displays.h"

#include "fonts/fonts.h"
#include "fonts/logos.h"

void SSD1306DisplayDevice::showNumConfirmed() {
void DisplayDevice::showNumConfirmed() {
String val = String(confirmedMeasurements);
if (confirmedMeasurements <= 9) {
val = "0" + val;
Expand All @@ -34,7 +34,7 @@ void SSD1306DisplayDevice::showNumConfirmed() {
this->prepareTextOnGrid(3, 5, "conf");
}

void SSD1306DisplayDevice::showNumButtonPressed() {
void DisplayDevice::showNumButtonPressed() {
String val = String(numButtonReleased);
if (numButtonReleased <= 9) {
val = "0" + val;
Expand All @@ -43,18 +43,18 @@ void SSD1306DisplayDevice::showNumButtonPressed() {
this->prepareTextOnGrid(1, 5, "press");
}

void SSD1306DisplayDevice::displaySimple(uint16_t value) {
void DisplayDevice::displaySimple(uint16_t value) {
if (value == MAX_SENSOR_VALUE) {
this->prepareTextOnGrid(0, 0,
"", HUGE_FONT, -7, -7);
"", HUGE_FONT, -7, 0);
} else {
this->prepareTextOnGrid(0, 0,
ObsUtils::to3DigitString(value), HUGE_FONT, -7, -7);
ObsUtils::to3DigitString(value), HUGE_FONT, -7, 0);
}
this->prepareTextOnGrid(3, 2, "cm", MEDIUM_FONT, -7, -5);
}

void SSD1306DisplayDevice::showValues(
void DisplayDevice::showValues(
HCSR04SensorInfo sensor1, HCSR04SensorInfo sensor2, uint16_t minDistanceToConfirm, int16_t batteryPercentage,
int16_t TemperaturValue, int lastMeasurements, boolean insidePrivacyArea,
double speed, uint8_t satellites) {
Expand Down Expand Up @@ -137,11 +137,11 @@ void SSD1306DisplayDevice::showValues(
showTemperatureValue(TemperaturValue);
}

m_display->display();
m_display->updateDisplay();

}

void SSD1306DisplayDevice::showGPS(uint8_t sats) {
void DisplayDevice::showGPS(uint8_t sats) {
String val = String(sats);
if (sats <= 9) {
val = "0" + val;
Expand All @@ -150,7 +150,7 @@ void SSD1306DisplayDevice::showGPS(uint8_t sats) {
this->prepareTextOnGrid(3, 5, "sats");
}

void SSD1306DisplayDevice::showBatterieValue(int16_t input_val){
void DisplayDevice::showBatterieValue(int16_t input_val){

uint8_t x_offset_batterie_logo = 65;
uint8_t y_offset_batterie_logo = 2;
Expand All @@ -161,67 +161,49 @@ void SSD1306DisplayDevice::showBatterieValue(int16_t input_val){
xlocation += 1;
}

//cleanGridCellcomplete(3,0);

/* if(input_val == -1){
cleanBattery(x_offset_batterie_logo, y_offset_batterie_logo);
m_display->drawXbm(x_offset_batterie_logo, y_offset_batterie_logo, 8, 9, BatterieLogo6);
m_display->setColor(BLACK);
this->showTextOnGrid(3, 0, " " + String(0) + "%", Dialog_plain_8,3,0);
m_display->setColor(WHITE);
m_display->display();
this->showTextOnGrid(3, 0, "calc", Dialog_plain_8,6,0);
}else{
m_display->setColor(BLACK);
this->showTextOnGrid(3, 0, "calc", Dialog_plain_8,6,0);
m_display->setColor(WHITE);
m_display->display();
} */
if(input_val >= 0){
String val = String(input_val);
if(input_val >= 0){
String val = String(input_val);
//showLogo(true);
this->showTextOnGrid(xlocation, 0, val + "%", TINY_FONT, 6, 0);
//m_display[0]->drawXbm(192, 0, 8, 9, BatterieLogo1);

if(input_val > 90){
cleanBattery(x_offset_batterie_logo, y_offset_batterie_logo);
m_display->drawXbm(x_offset_batterie_logo, y_offset_batterie_logo, 8, 9, BatterieLogo1);
m_display->drawXBM(x_offset_batterie_logo, y_offset_batterie_logo, 8, 9, BatterieLogo1);
}else if (input_val > 70)
{
cleanBattery(x_offset_batterie_logo, y_offset_batterie_logo);
m_display->drawXbm(x_offset_batterie_logo, y_offset_batterie_logo, 8, 9, BatterieLogo2);
m_display->drawXBM(x_offset_batterie_logo, y_offset_batterie_logo, 8, 9, BatterieLogo2);
}else if (input_val> 50)
{
cleanBattery(x_offset_batterie_logo, y_offset_batterie_logo);
m_display->drawXbm(x_offset_batterie_logo, y_offset_batterie_logo, 8, 9, BatterieLogo3);
m_display->drawXBM(x_offset_batterie_logo, y_offset_batterie_logo, 8, 9, BatterieLogo3);
}else if (input_val > 30)
{
cleanBattery(x_offset_batterie_logo, y_offset_batterie_logo);
m_display->drawXbm(x_offset_batterie_logo, y_offset_batterie_logo, 8, 9, BatterieLogo4);
m_display->drawXBM(x_offset_batterie_logo, y_offset_batterie_logo, 8, 9, BatterieLogo4);
}else if (input_val >10)
{
cleanBattery(x_offset_batterie_logo, y_offset_batterie_logo);
m_display->drawXbm(x_offset_batterie_logo, y_offset_batterie_logo, 8, 9, BatterieLogo5);
m_display->drawXBM(x_offset_batterie_logo, y_offset_batterie_logo, 8, 9, BatterieLogo5);
}else
{
cleanBattery(x_offset_batterie_logo, y_offset_batterie_logo);
m_display->drawXbm(x_offset_batterie_logo, y_offset_batterie_logo, 8, 9, BatterieLogo6);
m_display->drawXBM(x_offset_batterie_logo, y_offset_batterie_logo, 8, 9, BatterieLogo6);
}

}
//m_display->display();
}

void SSD1306DisplayDevice::showTemperatureValue(int16_t input_val){
void DisplayDevice::showTemperatureValue(int16_t input_val){
uint8_t x_offset_temp_logo = 30;
uint8_t y_offset_temp_logo = 2;
cleanTemperatur(x_offset_temp_logo,y_offset_temp_logo);
m_display->drawXbm(x_offset_temp_logo, y_offset_temp_logo, 8, 9, TempLogo);
m_display->drawXBM(x_offset_temp_logo, y_offset_temp_logo, 8, 9, TempLogo);
String val = String(input_val);
this->showTextOnGrid(1, 0, val + "°C", TINY_FONT);
}

void SSD1306DisplayDevice::showSpeed(double velocity) {
void DisplayDevice::showSpeed(double velocity) {
const int bufSize = 4;
char buffer[bufSize];
if (velocity >= 0) {
Expand All @@ -233,48 +215,40 @@ void SSD1306DisplayDevice::showSpeed(double velocity) {
this->prepareTextOnGrid(1, 5, "km/h");
}

uint8_t SSD1306DisplayDevice::currentLine() const {
uint8_t DisplayDevice::currentLine() const {
return mCurrentLine;
}

uint8_t SSD1306DisplayDevice::newLine() {
uint8_t DisplayDevice::newLine() {
if (mCurrentLine >= 5) {
scrollUp();
}
return ++mCurrentLine;
}

uint8_t SSD1306DisplayDevice::scrollUp() {
uint8_t DisplayDevice::scrollUp() {
for (uint8_t i = 0; i < 5; i++) {
prepareTextOnGrid(2, i, obsDisplay->get_gridTextofCell(2, i + 1));
}
m_display->display();
m_display->updateDisplay();
return mCurrentLine--;
}

uint8_t SSD1306DisplayDevice::startLine() {
uint8_t DisplayDevice::startLine() {
return mCurrentLine = 0;
}

void SSD1306DisplayDevice::highlight(uint32_t highlightTimeMillis) {
void DisplayDevice::highlight(uint32_t highlightTimeMillis) {
mHighlightTill = millis() + highlightTimeMillis;
if (!mHighlighted) {
if (mInverted) {
m_display->normalDisplay();
} else {
m_display->invertDisplay();
}
setInversion(!mInverted);
mHighlighted = true;
}
}

void SSD1306DisplayDevice::handleHighlight() {
void DisplayDevice::handleHighlight() {
if (mHighlighted && mHighlightTill < millis()) {
if (mInverted) {
m_display->invertDisplay();
} else {
m_display->normalDisplay();
}
setInversion(mInverted);
mHighlighted = false;
}
}
Loading