Hola a todos.
Este es mi primer mensaje, así que lo más probable es que cometa algún error, pido disculpas por ello.
También decir que soy novato (muy novato) en arduino.
El tema es que he logrado crear el código para activar un motor paso a paso, de varias formas:movimiento continuo, mediante órdenes por serial, etc. (parte del código lo he extraido del foro).
const int dirPin =5;
const int stepPin=2;
const int BOTON=12;
const int paso=200;
int micropasos=1000;
char n;
int vueltas;
int limit=5;
//variables para funcion pushmeter
int ESTADO=LOW;
int CONT;
int a=0;
int b=0;
boolean pisado=true;
boolean proceso=false;
void setup() {
Serial.begin(115200);
pinMode(dirPin,OUTPUT);
pinMode(stepPin,OUTPUT);
pinMode(BOTON,INPUT);
}
void loop() {
while(Serial.available()){
n=Serial.read();
if (n=='1'){
digitalWrite(dirPin,HIGH);
}else if(n=='0'){
digitalWrite(dirPin,LOW);
}
int a=1;
for(int i=0;i<a;i++){
digitalWrite(stepPin,HIGH);
delayMicroseconds(micropasos);
digitalWrite(stepPin,LOW);
delayMicroseconds(micropasos);
a++;
}
}
Por otro lado he conseguido con otro código, crear un contador mediante un pulsador.
//Declaracion del pin de conexion
int BOTON=12;
//Declaración e iniciación de variables de estado
int ESTADO=LOW;
int CONT;
int a=0;
int b=0;
boolean pisado=true;
void setup(){
Serial.begin (115200);
pinMode(BOTON,INPUT); //pin 12 como entrada
}
void loop(){
ESTADO=digitalRead(BOTON);
if( ESTADO==HIGH){ // si el pulsador está presionado
a++;// dependiendo de la velocidad de barrido, coge valores diferentes. Sumamos y enviamos a comparar.
pisado=presionado(a,b);//se supone que recibe true
}
if(ESTADO==LOW && a>b){// Hemos soltado el pulsador y además ha pasado por el anterior if
a--;// restamos y enviamos a comparar
pisado=presionado(a,b);//se supone que se recibe un false
}
if(pisado==false){
a=0;
b=0;
pisado=true;
CONT++;//solo si es false se activa el contador
}
Serial.println(CONT);
}
//Fin de loop*************************************************************************************
//Funcion que compara el estado de a y b. Mientras a sume es que todavia estamos presionando
boolean presionado(int a,int b){
if(a>b){
b=a;
return(true);
}
if(b==a){
return(false);
}
}
Este pulsador se acciona mediante una leva que gira con el eje del motor.
Por ahora el motor funciona, y el pulsador funciona, cuando lo presiono con el dedo me cuanta 1 y lo suma.
Lo que no consigo es:
Crear un programa en arduino donde usando los dos códigos pongo en funcionamiento el motor de forma continuada e infinita y que deje de funcionar al dar 5 vueltas tras recibir una señal externa (la del contador ) indicando que ya ha contado 5.
Se que no es muy útil, pero quiero usar el método a modo de señal de aviso o emergencia que me servirá para otros casos.
He creado funciones, las he colocado en el setup, en el loop, he mezclado todo.....pero no lo he logrado. Hay algo que no comprendo o que no he conseguido ver.
Si necesitáis fotos de la conexión o de cómo está montado, no es problema.
Gracias de antemano por las ideas o sujerencias que podáis aportar.
Un saludo