#include // 1. CONFIGURACIÓN DE PINES (Usando números GPIO directos) #define TRIG_PIN 4 // Etiqueta D2 #define ECHO_PIN 5 // Etiqueta D3 #define CANTIDAD_TIRAS 5 int ledsPorLinea[] = {22, 20, 16, 12, 6}; // Mapeo seguro: D0, D1, D4, D5, D10 int pinesTiras[] = {2, 3, 6, 7, 10}; Adafruit_NeoPixel tiras[CANTIDAD_TIRAS]; void setup() { Serial.begin(115200); pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); for(int i = 0; i < CANTIDAD_TIRAS; i++) { tiras[i] = Adafruit_NeoPixel(ledsPorLinea[i], pinesTiras[i], NEO_GRB + NEO_KHZ800); tiras[i].begin(); tiras[i].show(); } Serial.println("Tonalli listo en ESP32C3"); } void loop() { // Pulso de disparo digitalWrite(TRIG_PIN, LOW); delayMicroseconds(2); digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); // Le damos un tiempo límite de 25ms para no trabar el código long duracion = pulseIn(ECHO_PIN, HIGH, 25000); int distancia = duracion * 0.034 / 2; if (distancia > 0 && distancia < 80) { float latido = (sin(millis() * 0.003) + 1.0) / 2.0; for (int i = 0; i < CANTIDAD_TIRAS; i++) { int brilloBase = map(distancia, 80, 5, 0, 255); brilloBase = constrain(brilloBase, 0, 255); int brilloFinal = (brilloBase > 100) ? (brilloBase - (50 * (1.0 - latido))) : brilloBase; uint32_t color = tiras[i].Color(brilloFinal, brilloFinal/3, 0); for (int j = 0; j < ledsPorLinea[i]; j++) { tiras[i].setPixelColor(j, color); } tiras[i].show(); } } else { for (int i = 0; i < CANTIDAD_TIRAS; i++) { tiras[i].clear(); tiras[i].show(); } } delay(30); }