#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_SDA 8 // Pino GPIO8 para SDA (comunicação I2C)
#define OLED_SCL 9 // Pino GPIO9 para SCL (comunicação I2C)
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const int fuelPin = 34; // Pino analógico onde o sensor de combustível está conectado
const int temperaturePin = 35; // Pino analógico onde o sensor de temperatura está conectado
const int buttonPin = 27; // Pino do botão
int currentScreen = 0; // Variável para rastrear a tela atual (0 = combustível, 1 = autonomia, 2 = temperatura)
void setup() {
Serial.begin(9600);
// Inicializa a comunicação I2C
Wire.begin(OLED_SDA, OLED_SCL);
// Inicializa o display OLED
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x32)
display.clearDisplay();
display.display();
pinMode(buttonPin, INPUT_PULLUP); // Configura o pino do botão como entrada com pull-up interno
Serial.begin(9600);
}
void loop() {
display.clearDisplay();
// Verifica o estado do botão
if (digitalRead(buttonPin) == LOW) {
currentScreen = (currentScreen + 1) % 3; // Alterna entre as três telas ao pressionar o botão
delay(500); // Evita leituras múltiplas do botão
}
switch (currentScreen) {
case 0: // Tela de Combustível
drawFuelLevel();
break;
case 1: // Tela de Autonomia de Combustível
drawFuelAutonomy();
break;
case 2: // Tela de Temperatura
drawTemperature();
break;
}
display.display();
delay(1000); // Atualiza a cada segundo
}
void drawFuelLevel() {
int fuelValue = analogRead(fuelPin);
int fuelPercentage = map(fuelValue, 0, 4095, 0, 100);
int barWidth = map(fuelPercentage, 0, 100, 0, SCREEN_WIDTH - 2);
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Nível de Combustível:");
display.drawRect(0, 15, SCREEN_WIDTH - 1, 10, SSD1306_WHITE);
display.fillRect(1, 16, barWidth, 8, SSD1306_WHITE);
display.setCursor(0, 40);
display.print(fuelPercentage);
display.print("%");
}
void drawFuelAutonomy() {
int fuelValue = analogRead(fuelPin);
int fuelPercentage = map(fuelValue, 0, 4095, 0, 100);
float autonomy = (fuelPercentage > 0) ? (fuelPercentage * 10.0) : 0;
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Autonomia de Combustível:");
display.setCursor(0, 20);
display.print(autonomy);
display.println(" km");
}
void drawTemperature() {
int temperatureValue = analogRead(temperaturePin);
float temperatureCelsius = (temperatureValue / 4095.0) * 100.0;
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Temperatura:");
display.setCursor(0, 20);
display.print(temperatureCelsius);
display.println(" C");
}