#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7789.h>
// Pinos do display ST7789
#define TFT_CS 10
#define TFT_RST 8
#define TFT_DC 9
// Configuração do display
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
// Pinos analógicos para medir tensão e corrente
const int batteryTudorPin = A0;
const int batteryDeckPin = A1;
const int shuntTudorPin = A2;
const int shuntDeckPin = A3;
const float vcc = 5.0;
const float R1 = 10000.0; // 10kΩ é o valor da resistência
const float R2 = 5000.0; // 5kΩ é o valor da resistência
const float shuntResistencia = 0.01; // Shunt é o valor da resistência
void setup() {
// Inicializa o monitor serial
Serial.begin(9600);
tft.init(240, 320); // Initialize the display with a resolution of 240x320
tft.setRotation(2); // Adjust rotation if needed
}
void loop() {
// Leitura da tensão (em volts)
float batteryTudorVoltage = readBatteryVoltage(batteryTudorPin);
float batteryDeckVoltage = readBatteryVoltage(batteryDeckPin);
// Leitura da corrente (em amperes)
float currentTudor = readCurrent(shuntTudorPin);
float currentDeck = readCurrent(shuntDeckPin);
// Atualiza o display
tft.fillScreen(ST77XX_BLACK);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(2);
tft.setCursor(0, 0);
tft.print("Battery Tudor: ");
tft.print(batteryTudorVoltage);
tft.println("V");
tft.setCursor(0, 30);
tft.print("Current Tudor: ");
tft.print(currentTudor);
tft.println("A");
tft.setCursor(0, 60);
tft.print("Battery Deck: ");
tft.print(batteryDeckVoltage);
tft.println("V");
tft.setCursor(0, 90);
tft.print("Current Deck: ");
tft.print(currentDeck);
tft.println("A");
if (batteryTudorVoltage < 11.0) {
tft.setCursor(0, 120);
tft.setTextColor(ST77XX_RED);
tft.println("Recharge Battery Tudor");
}
if (batteryDeckVoltage < 11.0) {
tft.setCursor(0, 150);
tft.setTextColor(ST77XX_RED);
tft.println("Recharge Battery Deck");
}
// Mostra os valores no monitor serial (opcional)
Serial.print("Battery Tudor: ");
Serial.print(batteryTudorVoltage);
Serial.println(" V");
Serial.print("Battery Tudor: ");
Serial.print(currentTudor);
Serial.println(" A");
Serial.print("Battery Deck: ");
Serial.print(batteryDeckVoltage);
Serial.println(" V");
Serial.print("Battery Deck: ");
Serial.print(currentDeck);
Serial.println(" A");
delay(2000);
}
float readBatteryVoltage(int pin) {
int sensorValue = analogRead(pin);
float voltage = sensorValue * (vcc / 1023.0);
return voltage * ((R1 + R2) / R2);
}
float readCurrent(int pin) {
int sensorValue = analogRead(pin);
float voltage = sensorValue * (vcc / 1023.0);
return voltage / shuntResistencia;
}