a ver, he realizado cambios, sigue pasando lo mismo, la idea es que no mueva el motor si el motor no esta parado, lo consigo a medias , hace el movimiento uno y 2 bien, esperando a tener la señal de completo y luego los hace otra vez mal, sin esperar a tener esa señal, el programa esta lleno de Serial:println para hacer diagnostico, pero yo no llego a ver que esta mal.
esto es lo que aparece por el serial:
Q14
iniciando retardo
Q14
iniciando retardo
Q14
iniciando retardo
Q14
parada detectada
iniciando retardo
Q14
parada detectada
iniciando retardo
Q14
parada detectada
activando uno
1
#14 p100 t500
iniciando movimiento uno
Q14
iniciando retardo
Q14
movimiento detectado
iniciando retardo
Q14
movimiento detectado
iniciando retardo
Q14
movimiento detectado
iniciando retardo
Q14
parada detectada
iniciando retardo
Q14
parada detectada
iniciando retardo
Q14
parada detectada
activando dos 222222222222
2
#14 p1700 t500
iniciando movimiento 2
Q14
parada detectada
reiniciando
0
#14 p100 t500
iniciando movimiento uno
Q14
movimiento detectado
iniciando retardo
Q14
movimiento detectado
iniciando retardo
Q14
movimiento detectado
iniciando retardo
Q14
movimiento detectado
iniciando retardo
Q14
parada detectada
iniciando retardo
Q14
parada detectada
iniciando retardo
Q14
parada detectada
activando uno
1
#14 p100 t500
iniciando movimiento uno
Q14
parada detectada
activando dos 222222222222
2
#14 p1700 t500
iniciando movimiento 2
Q14
movimiento detectado
iniciando retardo
Q14
movimiento detectado
iniciando retardo
Q14
movimiento detectado
iniciando retardo
Q14
movimiento detectado
iniciando retardo
Q14
parada detectada
iniciando retardo
Q14
parada detectada
iniciando retardo
Q14
parada detectada
reiniciando
0
#14 p100 t500
iniciando movimiento uno
Q14
parada detectada
activando uno
1
#14 p100 t500
iniciando movimiento uno
Q14
movimiento detectado
iniciando retardo
Q14
movimiento detectado
iniciando retardo
Q14
movimiento detectado
iniciando retardo
Q14
movimiento detectado
iniciando retardo
Q14
parada detectada
iniciando retardo
Q14
parada detectada
iniciando retardo
Q14
parada detectada
activando dos 222222222222
2
#14 p1700 t500
iniciando movimiento 2
Q14
parada detectada
reiniciando
0
#14 p100 t500
iniciando movimiento uno
Q14
movimiento detectado
iniciando retardo
Q14
movimiento detectado
iniciando retardo
Q14
movimiento detectado
iniciando retardo
Q14
movimiento detectado
iniciando retardo
Q14
parada detectada
iniciando retardo
Q14
parada detectada
iniciando retardo
Q14
parada detectada
activando uno
1
#14 p100 t500
iniciando movimiento uno
Q14
parada detectada
activando dos 222222222222
2
#14 p1700 t500
iniciando movimiento 2
Q14
movimiento detectado
iniciando retardo
Q14
movimiento detectado
iniciando retardo
Q14
movimiento detectado
iniciando retardo
Q14
movimiento detectado
iniciando retardo
Q14
parada detectada
iniciando retardo
Q14
parada detectada
iniciando retardo
Q14
parada detectada
reiniciando
0
#14 p100 t500
iniciando movimiento uno
Q14
parada detectada
activando uno
1
#14 p100 t500
iniciando movimiento uno
Q14
movimiento detectado
iniciando retardo
Q14
movimiento detectado
iniciando retardo
Q14
movimiento detectado
iniciando retardo
Q14
movimiento detectado
iniciando retardo
Q14
parada detectada
iniciando retardo
Q14
parada detectada
iniciando retardo
Q14
parada detectada
activando dos 222222222222
2
#14 p1700 t500
iniciando movimiento 2
Q14
parada detectada
reiniciando
0
#14 p100 t500
iniciando movimiento uno
Q14
movimiento detectado
iniciando retardo
cuando dice iniciando retardo varias veces y luego iniciando movimiento la cosa esta bien, los motores completan su recorrido.
cuando apenas hay retardos entre un movimiento y otro es cuando no les deja completar su recorrido.
no entiendo que por cada vez que lo hace bien lo haga otra vez mal.
el codigo:
// el ssc manda "." si el movimiento esta completado
// si aun esta en curso manda ""+""
//con un delay de 50uS
//el problema es que al detctar movimiento no para,ordena el siguiente movimiento igualmente
int contador =0;
int completado;
int incompleto;
int inByte;
int led8 = 8;//indica que ya ha parado
int led9 = 9;//indica que continua
void setup() {
pinMode(led8,OUTPUT);
pinMode(led9,OUTPUT);
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
int request();
request();
if(completado == 1 and contador == 0){
Serial.println(" activando uno ");
contador++;
Serial.println(contador);
Serial.print(completado);
completado = 0;
primero();
}
else{
Serial.println(" iniciando retardo");
retardo();
}
request();
if (completado == 1 and contador == 1){
Serial.println(" activando dos 222222222222");
//digitalWrite(led8,HIGH); digitalWrite(led9,LOW);
contador++;
Serial.println(contador);
Serial.println(completado);
completado = 0;
segundo();
}
else{
Serial.println(" iniciando retardo");
retardo();}
request();
if(completado ==1 and contador == 2){
Serial.println("reiniciando");
//digitalWrite(led8,HIGH); digitalWrite(led9,LOW);
contador= 0;
Serial.println(contador);
Serial.println(completado);
completado =0;
primero();
}
else{
Serial.println(" iniciando retardo");
retardo();}
}
void primero(){
Serial.println("#14 p100 t500"); //mueve el motor a la posicion uno
Serial.println(" iniciando movimiento uno ");
}
void segundo(){
Serial.println("#14 p1700 t500");//mueve el motor a la posicion 2
Serial.println("iniciando movimiento 2");
}
void retardo() //aqui se puede incluir un void para que mire el infrarojo
{
for(int i = 0; i < 100; i++)
{//leerPulsador(); // leemos el pulsador cada milisegundo, asi nos aseguramos que si estamos dentro un efecto, lo detectaremos
//Serial.println("retardo");
delay(1);//no se por que sin el delay no funciona
}}
void request(){
Serial.println ("Q14");
delay(50);
int inByte = Serial.read(); {}
switch (inByte) {
case '.':
Serial.println("parada detectada");
completado = 1;
digitalWrite(led8,HIGH);
delay(50);
digitalWrite(led8,LOW);
break;
case '+':
Serial.println(" movimiento detectado ");
digitalWrite(led9,HIGH);
delay(50);
digitalWrite(led9,LOW);
break;
}
}
esto ("#14 p100 t500") es lo que le dice a la tarjeta que motor mover, a que posición y a que velocidad.
esto otro (Q14) se envía a la tarjeta para preguntarle si el movimiento se ha completado.
si el movimiento se ha completa la tarjeta da (".") de lo contrario da ("+")