#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// Definições de pinos
const int potPin = 34; // Pino analógico para o potenciômetro (pode ser qualquer pino ADC do ESP32)
const int motorPin = 25; // Pino PWM para controlar a velocidade do motor (pode ser qualquer pino PWM do ESP32)
// Definindo as variáveis
int potValue = 0; // Valor lido do potenciômetro
int motorSpeed = 0; // Valor do PWM para o motor
// Definições do Display OLED I2C
#define SCREEN_WIDTH 128 // Largura do display OLED
#define SCREEN_HEIGHT 64 // Altura do display OLED
#define OLED_RESET -1 // Reseta o display (não está sendo usado)
Adafruit_SSD1306 display (SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
// Inicializando a comunicação serial para monitorar os valores
Serial.begin(115200);
// Inicializando o display OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.display(); // Atualiza o display para mostrar a tela inicial
delay(2000); // Pausa para visualização da tela inicial
// Configurando o pino do motor como saída
pinMode(motorPin, OUTPUT);
// Inicializando o pino do potenciômetro como entrada
pinMode(potPin, INPUT);
// Limpando o display
display.clearDisplay();
}
void loop() {
// Lendo o valor do potenciômetro (valor de 0 a 4095)
potValue = analogRead(potPin);
// Mapeando o valor lido para o intervalo de 0 a 255 (faixa do PWM)
motorSpeed = map(potValue, 0, 4095, 0, 255);
// Ajustando a velocidade do motor via PWM
analogWrite(motorPin, motorSpeed);
// Exibindo os valores no monitor serial
Serial.print("Potenciômetro: ");
Serial.print(potValue);
Serial.print("\tVelocidade do Motor (PWM): ");
Serial.println(motorSpeed);
// Atualizando o display OLED
display.clearDisplay(); // Limpa o display antes de desenhar a nova tela
display.setTextSize(1); // Tamanho do texto
display.setTextColor(SSD1306_WHITE); // Cor do texto
display.setCursor(0, 0); // Define a posição inicial do texto
// Exibindo os valores do potenciômetro e da velocidade do motor
display.print("Pot: ");
display.print(potValue);
display.setCursor(0, 10); // Posição do texto na próxima linha
display.print("Speed: ");
display.print(motorSpeed);
display.display(); // Atualiza o display com o novo conteúdo
// Pausa para evitar leitura excessiva
delay(100);
}