Hablanos del motor de la persiana, Danos detalles del mismo. Leo en tu título que es un motor AC?
Veamos si podemos resolverlo sino esa sería una alternativa ya que podrías regular un poco el comportamiento de la persiana.
Dime donde veo donde estan los finales de carrera? es lo que veo en tu post#3 como pulsadores en el esquema Fritzing?
Si esos fueran tu pulsadores o switches de fin de carrera no veo resistencia pull down que asegure un estado estable. Es fácil que por ahi se te filtre ruido.
Ahora miraré tu código a ver si los definiste como INPUT_PULLUP.
Si estan así definidos.
// switches PERSIANA1
pinMode(30, INPUT_PULLUP);
pinMode(31, INPUT_PULLUP);
pinMode(32, INPUT_PULLUP);
// switches PERSIANA2
pinMode(37, INPUT_PULLUP);
pinMode(38, INPUT_PULLUP);
pinMode(39, INPUT_PULLUP);
// switches PERSIANA3
pinMode(47, INPUT_PULLUP);
pinMode(48, INPUT_PULLUP);
pinMode(49, INPUT_PULLUP);
Bueno entonces eso no debería ser el problema.
Sigo mirando y te daré alguna respuesta de modo que volveré a editar este post.
Esta sección del código es la que comprueba tus fin de carrera.
// PERSIANA 1 ACCIONS
if (digitalRead(30) == 0){
delay(100);
PER1_on = "on";
PER1_off = "off"; // save LED state
botoStop1 = "off";
digitalWrite(22, HIGH);
digitalWrite (23, LOW);
sendGET();
}
else if (digitalRead(31) == 0){
delay(100);
PER1_on = "off";
PER1_off = "on";
botoStop1 = "off";
digitalWrite (22, LOW);
digitalWrite (23, HIGH);
sendGET();
}
else if (digitalRead(32) == 0){
delay(100);
PER1_on = "off";
PER1_off = "off";
botoStop1 = "on";
digitalWrite (22, LOW);
digitalWrite (23, LOW);
sendGET();
}
// PERSIANA 2 ACCIONS
else if (digitalRead(37) == 0){
delay(20);
PER2_on = "on";
PER2_off = "off"; // save LED state
botoStop2 = "off";
digitalWrite(20, HIGH);
digitalWrite (21, LOW);
sendGET();
}
else if (digitalRead(38) == 0){
delay(20);
PER2_on = "off";
PER2_off = "on";
botoStop2 = "off";
digitalWrite (20, LOW);
digitalWrite (21, HIGH);
sendGET();
}
else if (digitalRead(39) == 0){
delay(20);
PER2_on = "off";
PER2_off = "off";
botoStop2 = "on";
digitalWrite (20, LOW);
digitalWrite (21, LOW);
sendGET();
}
// PERSIANA 3 ACCIONS
else if (digitalRead(47) == 0){
delay(20);
PER3_on = "on";
PER3_off = "off"; // save LED state
botoStop3 = "off";
digitalWrite(28, HIGH);
digitalWrite (29, LOW);
sendGET();
}
else if (digitalRead(48) == 0){
delay(20);
PER3_on = "off";
PER3_off = "on";
botoStop3 = "off";
digitalWrite (28, LOW);
digitalWrite (29, HIGH);
sendGET();
}
else if (digitalRead(49) == 0){
delay(20);
PER3_on = "off";
PER3_off = "off";
botoStop3 = "on";
digitalWrite (28, LOW);
digitalWrite (29, LOW);
sendGET();
}
Vamos a modificar levemente su comportamiento y en lugar de ver estados veremos transiciones 1-> 0 a ver si mejora el comportamiento o incluso si esto no mejora, usaremos alguna rutina antirebotes.
Defino como globales estos flags que tendrán el estado de los fines de carrera.
Acabo de subir el archivo como adjunto.
Veamos si se comporta igual o mejora el comportamiento.
Si falla vamos con una rutina antirebotes.
intentXML3Persiana_menjador.ino (16.9 KB)