#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <ESP32Servo.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define NUM_ARCS 4
setup (
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Servo radarServo;
void setup() {
Serial.begin(115200);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.display(); // Inicia la pantalla con un buffer vacío
delay(2000);
radarServo.attach(5); // Cambiar al pin que estás utilizando para el servo
}
void loop() {
for (int angle = 0; angle <= 180; angle += 5) {
display.clearDisplay();
drawRadarArcs();
moveRadar(angle);
drawRadar(angle);
display.display();
delay(50); // Ajusta el valor según la velocidad de movimiento deseada
}
for (int angle = 180; angle >= 0; angle -= 5) {
display.clearDisplay();
drawRadarArcs();
moveRadar(angle);
drawRadar(angle);
display.display();
delay(50); // Ajusta el valor según la velocidad de movimiento deseada
}
}
void moveRadar(int angle) {
radarServo.write(angle);
delay(10);
}
void drawRadar(int angle) {
angle = constrain(angle, 0, 180);
// Dibuja una línea que representa el radar en la pantalla OLED
int startX = SCREEN_WIDTH / 2;
int startY = SCREEN_HEIGHT;
int endX = startX + cos(angle * PI / 180.0) * 64; // Longitud de la línea
int endY = startY - sin(angle * PI / 180.0) * 64; // Longitud de la línea
int startXX = SCREEN_WIDTH / 2;
int startYY = SCREEN_HEIGHT-1;
int endXX = startXX + cos(angle * PI / 180.0) * 64; // Longitud de la línea
int endYY = startYY - sin(angle * PI / 180.0) * 64; // Longitud de la línea
int startXXX = SCREEN_WIDTH / 2;
int startYYY = SCREEN_HEIGHT-2;
int endXXX = startXXX + cos(angle * PI / 180.0) * 64; // Longitud de la línea
int endYYY = startYYY - sin(angle * PI / 180.0) * 64; // Longitud de la línea
display.drawLine(startXX, startYY, endXX, endYY, SSD1306_WHITE);
display.drawLine(startX, startY, endX, endY, SSD1306_WHITE);
display.drawLine(startXXX, startYYY, endXXX, endYYY, SSD1306_WHITE);
}
void drawRadarArcs() {
int centerX = SCREEN_WIDTH / 2;
int centerY = SCREEN_HEIGHT;
int radius = 64;
// Dibuja un semiarco simulando con circulos
display.drawCircle(64,64,64, SSD1306_WHITE);
display.drawCircle(64,64,32, SSD1306_WHITE);
display.drawCircle(64,64,16, SSD1306_WHITE);
display.drawCircle(64,64,8, SSD1306_WHITE);
}