//Theremin Gestual com ESP32
//VIDEO ILUSTRATIVA: https://drive.google.com/file/d/1BBwG4msdgHDO969oXX-9fCzLBeZ2uJMI/view?usp=drive_link
#include <Wire.h>
#include <Adafruit_VL53L0X.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define BUZZER_PIN 25
Adafruit_VL53L0X lox = Adafruit_VL53L0X();
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
Serial.begin(115200);
Wire.begin();
if (!lox.begin()) {
Serial.println("Erro ao conectar o Sensor VL53L0X !");
while (1);
}
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("Erro ao inicializar o Display OLED !");
while (1);
}
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 10);
display.println("Theremin Pronto");
display.display();
delay(2000);
}
void loop() {
VL53L0X_RangingMeasurementData_t measure;
lox.rangingTest(&measure, false);
if (measure.RangeStatus != 4) {
int distance = measure.RangeMilliMeter;
int frequency = map(distance, 50, 500, 200, 2000);
frequency = constrain(frequency, 200, 2000);
tone(BUZZER_PIN, frequency);
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 10);
display.print("Distancia(mm): ");
display.setTextSize(2);
display.print(distance);
display.setTextSize(1);
display.setCursor(0, 50);
display.print("Frequencia: ");
display.print(frequency);
display.println(" Hz");
display.display();
} else {
noTone(BUZZER_PIN);
}
delay(100);
}