Hola buenas tardes a todos,soy nuevo por estos sitios,aunque tengo alguna que otra experiencia con Arduino.
Estoy desarrollando una aplicación donde controlo mediante Relé una válvula de 24Vcd la cual yo abro y cierro para inyectar aire a presión a un sistema.
Estoy en fase de pruebas,pero he querido implementar un bucle While para que me active y desactive la electrovalvula 5 veces y me encuentro con que cuando alimento a 24Vdc la electrovalvula, sólo realiza el bucle While 1 vez y no las 5 que he programado.
Antes de pasar por aquí y preguntar,he probado a simular el programa sin los 24Vdc,es decir,he intentado ver si el relé se activaba y desactivaba 5 veces y así a sido,incluso he mostrado el valor de la variable que aumenta por el puerto serie para ver si se aumentaba y es correcto,pero a la hora de conectar a 24Vdc y cerrar el relé me encuentro con que esta variable que evalúo ( en mi código se denomina x) no aumenta y se sale con valor 1 sin llegar a 5.
Una de las posibilidades que he valorado es la de que exista ruido en el sistema,pero si pruebo abrir y cerrar el relé sin bucle (While,for,…) si funciona todo perfecto.Por tanto el error solo se da cuando intento que el código este en el interior de un bucle de condición.
Sobre el montaje,indicar que esta todo correcto,masas de la electrovalvula y de arduino juntas,etc. Es más,como he dicho anteriormente si el proceso lo hago manual mediante un botón el sistema funciona correcto.
Adjunto código simplificado del proceso.Mil gracias y si cometo algún error grave,pedir perdón.
const int valvula = 7;
const int boton=4;
int x=0;
void setup() {
Serial.begin(9600); //iniciar puerto serie
pinMode(valvula, OUTPUT); //definir pin como salida
pinMode(boton,INPUT);
}
void loop(){
x=0;
bool val=digitalRead(boton);
if(val==HIGH){
while(x<5){
digitalWrite(valvula, HIGH); // poner el Pin en HIGH
delay(1000); // esperar un segundo
digitalWrite(valvula, LOW); // poner el Pin en LOW
delay(2000); // esperar 2 segundo
x++;
}
}
}