Estoy tratando de crear un módulo de atenuación con un detector de cruce por cero para luces incandescentes utilizando el siguiente código que está disponible en la red.
int dimming = 128; // Dimming level (0-128) 0 = ON, 128 = OFF
void setup() {
configureIOPins();
// put your setup code here, to run once:
Serial.begin(115200);
}
void configureIOPins() {
pinMode(D8, INPUT); // for ZCD input
pinMode(D5, OUTPUT); // for load output
attachInterrupt(D8, zero_crosss_int, RISING);
}
void zero_crosss_int() //function to be fired at the zero crossing to dim the light
{
// Firing angle calculation : 1 full 50Hz wave =1/50=20ms
// Every zerocrossing thus: (50Hz)-> 10ms (1/2 Cycle)
// For 60Hz => 8.33ms (10.000/120)
// 10ms=10000us
// (10000us - 10us) / 128 = 75 (Approx) For 60Hz =>65
int dimtime = (75*dimming); // For 60Hz =>65
delayMicroseconds(dimtime); // Wait till firing the TRIAC
digitalWrite(D5, HIGH); // Fire the TRIAC
delayMicroseconds(35); // triac On propogation delay
digitalWrite(D5, LOW); // No longer trigger the TRIAC (the next zero crossing will switch it off) TRIAC
}
void loop() {
for (int i=5; i <= 128; i++){
dimming=i;
delay(10);
}
}
El código anterior funciona todo encanto cuando uso el módulo esp8266 NodeMCU, pero falla si uso el módulo esp32 con parpadeo de luz. A continuación se muestra el esquema del circuito que utilicé.
Según mi análisis, siento que esp32 attachInterrupt se invoca incorrectamente como si utilizara RISING , D5 el pin debería ser '1' cada vez que ingrese el método zero_cross_int , que es el caso con esp8266 pero no con esp32.
¿Pero no puedo entender por qué sucede esto? Es porque la frecuencia de CPU de esp32 es más alta que la de esp8266 o por cualquier otra razón.
Soy un novato, por lo que podría estar equivocado en la parte de la frecuencia de la CPU, déjeme en claro por eso. : D
Sería una gran ayuda para obtener información sobre esto.