Duda while o if

Muuy buenas, ando liado ultimando mi proyecto, ya tengo la parte mecanica lista (o eso creo) con la alimentacion, que me a traido de cabeza y el codigo, salvo…

Os pongo en situacion, tengo un manoreductor con un nema17 y un tb6600 como driver, tengo que girarlo para un sentido u otro dependiendo de la presion que le marque con un potenciometro. El caso es que pense en usar el bucle while, pero supongo que no me realizara la funcion de lectura del transductor de presion y girara eternamente. Asi que pense en usar if, pero esta leera tooodo el codigo y ejecutara la accion una vez cada cierto tiempo, no?

Este es mi codigo

if(2<=bartotal && compresor==1){ //Siendo la presion superior a 3bares
   
   if (baractual==probjetivo){ //Si es la misma presion el motor esta apagado
      digitalWrite(dir,LOW);
      digitalWrite(pul,LOW);}
      
   if (baractual < probjetivo){ //y menor que la objetivo gira el motor en direccion del reloj
       digitalWrite(dir,HIGH);
       digitalWrite(pul,HIGH);
       delayMicroseconds(400);
       digitalWrite(pul,LOW);
       delayMicroseconds(400);
   }
   if (baractual > probjetivo){ //y mayor que la objetivo gira el motor contrareloj 
       digitalWrite(ena, HIGH);
       digitalWrite(dir,LOW);
       digitalWrite(pul,HIGH);
       delayMicroseconds(400);
       digitalWrite(pul,LOW);
       delayMicroseconds(400);
       pasos++;
     /*if (pasos==200){ //a una vuelta suelta libera presion para tomar medidas reales y pone a 0 el contador
       digitalWrite(rele4,HIGH);
       delay(250);
       digitalWrite (rele4,LOW);
       pasos=0;
       }*/
    }
  }

Lo que ahora mismo esta anulado es la liberacion de presion mediante un solenoide que se acciona con un rele, para cuando seleccione una presion menor de la que tenga.

He pensado en poner el while y añadir despues del movimiento una lectura de los pines donde van los transductores, no se si es una opcion valida. Soy bastante bastante bastante novato y desconozco la mayor parte de las limitaciones y virtudes de arduino.

Agradezco cualquier ayuda, y gracias!

Hola, no sé muy bien si entiendo tu problema. Hasta dónde entiendo, la presión es la que denota que hagas una cosa u otra… pues atendiendo a esto, creas una variable global que almacene el estado de la presión. De la misma manera, dentro de la función lectura creas una rutina que modifique esa variable en base al rango que creas conveniente.

estado_lectura = 0;

% rutina
if presión_leida<20
estado_lectura = 0;
else
estado_lectura = 1;
end

Mientras tanto, el resto del código lo puedes encapsular en un while que haga una u otra cosa en función del valor que tome estado_lectura.

O por ejemplo con la sentencia if también podrías hacer:
if estado_lectura =0
// lo que creas conveniente
// Al final de esta rutina vuelves a llamar a la función lectura para actualizar estado_lectura
else
// otro sentido de giro.
// igualmente llamas a la función de lectura.

Así evitas tener que recorrer todo el código con un if y también te libras de generar un while eternamente. Esto es sólo un arreglo de código a tu programa, no es una opción dada por las posibilidades de Arduino.

Saludos!

Gracias por tu ayuda!

Voy a probar a ver que sale. Lo malo que le veo es que es una comparativa entre lo que tu marcas con el pontenciometro y la lectura que recoje el del transductor. Y Coincidir... quizas necesite ponerle un margen de entre tal y tal para o si la demanda es mayor que empieza a girar.

Bueno, ya gira para uno y otro lado, pero nunca permanece parado y se apaga cuando llega a la lectura.

Xq si los valores son los mismos, al menos imrpesos en pantalla sigue girando??

Lo que te recomendé es un arreglo rápido y simple de programación. Es decir, eso debes adaptarlo tú a tus necesidades. Si no te funciona es que algo del código no está bien relacionado. Explica de manera sencilla lo que pretendes y te podré ayudar.

¿Qué condiciones se tienen que dar para que gire hacia un sentido? ¿Y para el otro? ¿Y para que pare? ¿Girar derecha, izq y parada son las únicas acciones?

Un saludo!.

Muchas gracias Gallegosan, al final lo unico que ocurria es que necesitaba un poco de histeresis, es decir, que dejara de andar un poco antes de igual y arrancase un poco despues, aunque las lecturas de los transductores no fuera la mas correcta de todas, tienen bastante sensibilidad, asi que nunca paraba en el punto exacto y tenia que girar a la inverse y viceversa, total, que con un -0.05 solucionado.

Muchas gracias por tu ayuda. Esto ultimo es lo que me hizo localizar el fallo.

¿Qué condiciones se tienen que dar para que gire hacia un sentido? ¿Y para el otro? ¿Y para que pare? ¿Girar derecha, izq y parada son las únicas acciones?

Saludos!