Buenas tardes, tengo un problema con un código y necesitaría ayuda para resolverlo.
Tengo un motor PaP con un pequeño espejo en un extremo y su función es desviar un rayo láser que incide contra el.
El caso que para que inicie su función, debe estar en una posición determinada y de esa forma el rayo empieza una secuencia que hace que se despliegue en forma de abanico.
Para eso lleva un interruptor fin de carrera con lo que el motor se posiciona en su punto pero quiero sustituir el interruptor por un sensor TCRT5000 con lectura analógica conectado en cualquier salida analógica excepto A0 porque ya esta ocupada con otra cosa y que haga la misma función.
Este es la parte del código que ajusta el motor:
int valBot = 0; // Estado del botón del motor
int pinBoton = 3; // Pin donde está conectado el interruptor de fin de carrera del motor
int pinLaser = 4; // Pin donde esta conectado el laser
int pinLed = 6; // Pin donde está conectado el LED de estado
int pinStep = 7; // Pin del Step del EasyDriver
int pinDirec = 8; // Pin de Direction del EasyDriver
void setup() {
Serial.begin(9600); // Iniciamos comunicación serial
pinMode(pinBoton, OUTPUT);
}

// Poner el motor/espejo en su sitio al comienzo y secuencia de inicio:
void ajusteMotor(){
pinMode(pinBoton, INPUT); // Declaro el pín del motor como INPUT
pinMode(pinDirec, OUTPUT);
pinMode(pinStep, OUTPUT);
digitalWrite(pinDirec, LOW);
digitalWrite(pinStep, LOW);
for (int pos = 0; pos < 4000; pos++)
{
valBot = digitalRead(pinBoton);
if (valBot == LOW)
{ // si el botón está pulsado:
//digitalWrite(pinLed, HIGH); // enciendo el led
digitalWrite(pinDirec, HIGH); // cambio la dirección
for (int pos2 = 0; pos2<posVert; pos2++)
{
digitalWrite(pinStep, LOW);
digitalWrite(pinStep, HIGH);
delayMicroseconds(micropausa);
}
digitalWrite(pinLaser, HIGH); // Enciendo el laser
y esta es la parte del código que se encarga de desplegar el abanico acelerándolo linealmente, esta parte funciona perfectamente y no hay que hacerle nada:
// Secuencia abanico desplegado totalmente, acelerando linealmente:
numpasosini=(haces-1)*pasosHaces*17/2; // Calculo el número de pasos en la secuencia de inicio
// Compruebo la célcula fotoeléctrica, y mando arrancar la secuencia de inicio cuando se active:
while(true)
{
if ( (analogRead(0) > sensor*2 ) ) // Si el sensor recibe señal
{
digitalWrite(pinLed, HIGH); // Enciendo el led
digitalWrite(pinDirec, LOW); // Cambio la dirección
for (int pos2 = 0; pos2<((haces-1)*pasosHaces/2); pos2++)
{
digitalWrite(pinStep, LOW);
digitalWrite(pinStep, HIGH);
digitalWrite(pinLaser, HIGH); // Enciendo el laser
delayMicroseconds(micropausaInicio-(micropausaInicio-micropausa)/numpasosini*contini++);
digitalWrite(pinLaser, LOW); // Apago el laser
}
for (int pos3 = 0; pos3<4; pos3++)
{
digitalWrite(pinDirec, HIGH); // Cambio la dirección
for (int pos2 = 0; pos2<((haces-1)*pasosHaces); pos2++)
{
digitalWrite(pinStep, LOW);
digitalWrite(pinStep, HIGH);
digitalWrite(pinLaser, HIGH); // Enciendo el laser
delayMicroseconds(micropausaInicio-(micropausaInicio-micropausa)/numpasosini*contini++);
digitalWrite(pinLaser, LOW); // Apago el laser
}
digitalWrite(pinDirec, LOW); // Cambio la dirección
for (int pos2 = 0; pos2<((haces-1)*pasosHaces); pos2++)
{
digitalWrite(pinStep, LOW);
digitalWrite(pinStep, HIGH);
digitalWrite(pinLaser, HIGH); // Enciendo el laser
delayMicroseconds(micropausaInicio-(micropausaInicio-micropausa)/numpasosini*contini++);
digitalWrite(pinLaser, LOW); // Apago el laser
}
}
break;
}
}
break;
}
else
{ // el botón no está pulsado:
digitalWrite(pinLed, LOW); // Mantengo el led apagado
digitalWrite(pinStep, LOW);
digitalWrite(pinStep, HIGH);
delayMicroseconds(micropausa);
}
}
}
Adaptando un ejemplo de código que usa una salida analógica lo he escrito de este modo, pero no se si está bien porque creo que hay que calibrar el sensor para que los valores coincidan con la posición que buscamos, no se si es cierto o no, yo he puesto un valor de ejemplo.
int valBot = 0; // variable que usamos para recoger la señal del sensor
int pinsensor = A1; // Con este pin recogemos las señales del sensor
int pinLaser = 4; // Pin donde esta conectado el laser
int pinLed = 6; // Pin donde está conectado el LED de estado
int pinStep = 7; // Pin del Step del EasyDriver
int pinDirec = 8; // Pin de Direction del EasyDriver
void setup() {
Serial.begin(9600); // Iniciamos comunicación serial
}
void ajusteMotor(){
valBot = analogRead(pinsensor); // Lectura analógica del pin del sensor
if (valBot <=700), // Este es un valor de ejemplo
digitalWrite(pinLed, HIGH); // enciendo el led
digitalWrite(pinDirec, HIGH); // cambio la dirección
for (int pos2 = 0; pos2<posVert; pos2++)
{
digitalWrite(pinStep, LOW);
digitalWrite(pinStep, HIGH);
delayMicroseconds(micropausa);
}
digitalWrite(pinLaser, HIGH); // Enciendo el laser
}
Agradecería un poco de ayuda.
Gracias de antemano.