#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Wire.h>
// definicion de pines
#define SDA D4
#define SCL D5
#define servo D9
#define potX D1
// Caracteristicas de la pantalla SSD1306
#define height 64
#define width 128
#define rst -1
// creación del objeto pantalla con la libreria SSD1306
Adafruit_SSD1306 display(width, height, &Wire, rst);
//Variables del proceso
int thita = 0;
int potValue = 0; // se inicializa en 0 para evitar lecturac sin valor.
int midPoint = 2048;//Valor inicial en ejes X=2222 del JoyStick
void setup() {
ledcAttach(servo, 50, 12);
Serial.begin(115200);
Wire.begin();
if(!display.begin(SSD1306_SWITCHCAPVCC, 0X3C)){
Serial.println("Oled Display NOT Found...");
for(;;);
}
displayTxtConfig(2, 15, 0);
display.clearDisplay();
display.println("Servo Motor");
displayTxtConfig(2, 40, 30);
display.println("Control");
display.display();
Serial.println("Servo Motor Control");
delay(3000);
}
void loop() {
//Leemos los valores de los potenciometros;
int value;
value = analogRead(potX);
//Se evalua el cambio de posicion con un umbral de 100 en binbario
if(value-midPoint > 100){thita += 1;}
if(value-midPoint <-100){thita -= 1;}
//Se limita el angulo entre 0 y 180
if(thita<0) {thita = 0;}
if(thita>180) {thita = 180;}
//llamamos al metodo para mover el servo
moveServo();
//llamamos al metodo para mostrar la posicion actual del servo
displayAngle();
}
void displayTxtConfig(int size, int x, int y){
//Pasos para imprimir
//1. Seleccionar tamaño de la letra
display.setTextSize(size);
//2. Color de la letra(Blanco/Negro)
display.setTextColor(WHITE);
//3. posicionar el cursor
display.setCursor(x, y);
}
void displayAngle(){
display.clearDisplay();
displayTxtConfig(2,10,50);
display.print("Thita=");
display.print(thita);
display.print("°");
display.display();
Serial.print("Thita:");Serial.print(thita);Serial.print("°\t");
}
void moveServo(){
int duty = map(thita, 0,180, 102, 512);
ledcWrite(servo,duty);
}Loading
xiao-esp32-c3
xiao-esp32-c3