// ESP32 core v3 (Wokwi) - Servo por LEDC (sin librerías) + 3 LEDs
const int SERVO_PIN = 25;
// los leds son los motores
const int LED1 = 14; // este es el repartidor
const int LED2 = 27;// mezclador
const int LED3 = 26;//mezclador
int angulo=0;
const uint32_t SERVO_FREQ = 50; // 50Hz
const uint8_t SERVO_RES = 16; // bits
// Convierte microsegundos (0..20000us) a duty (0..2^RES-1)
uint32_t usToDuty(uint32_t us) {
const uint32_t maxDuty = (1UL << SERVO_RES) - 1;
return (us * maxDuty) / 20000UL;
}
// 0..180° -> 1000..2000us (rango típico seguro)
void servoWriteDeg(int deg) {
if (deg < 0) deg = 0;
if (deg > 180) deg = 180;
uint32_t us = 1000 + (uint32_t)deg * (2000 - 1000) / 180;
ledcWrite(SERVO_PIN, usToDuty(us)); // OJO: pin, duty
}
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
// Configura PWM en el pin del servo
ledcAttach(SERVO_PIN, SERVO_FREQ, SERVO_RES);
servoWriteDeg(90);
delay(500);
}
void loop() {
// se mezcla
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
delay(1200);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
// se reparte (3 jugadores)
angulo = 0; // reset cada ronda
for (int i = 0; i < 3; i++) { // 3 veces
servoWriteDeg(angulo);
delay(300); // tiempo para llegar
digitalWrite(LED1, HIGH);
delay(250); // “expulsar carta”
digitalWrite(LED1, LOW);
delay(200);
angulo += 90; // 0, 90, 180
}
delay(1500); // pausa entre “rondas”
}