Acá les dejo un ejemplo de un programa funcional para poder hacer que el robot recorra la superficie de combate y no se caiga.
int Sensor=3; //indicamos donde conectamos el sensor //señales para los motores ubicados en la derecha int MotorDA=4; //Pin de Avanzar int MotorDR=5; //Pin de Retroceder //señales para los motores ubicados en la izquierda int MotorIA=6; //Pin de Avanzar int MotorIR=7; //Pin de Retroceder void setup() { pinMode(Sensor,INPUT); pinMode(MotorDA,OUTPUT); pinMode(MotorDR,OUTPUT); pinMode(MotorIA,OUTPUT); pinMode(MotorIR,OUTPUT); } //esta función es para que el robot Avance void Avanzar(){ digitalWrite(MotorDR,LOW); digitalWrite(MotorIR,LOW); delay(1); digitalWrite(MotorDA,HIGH); digitalWrite(MotorIA,HIGH); } //esta función es para que el robot se detenga void Frenar(){ digitalWrite(MotorDR,LOW); digitalWrite(MotorIR,LOW); digitalWrite(MotorDA,LOW); digitalWrite(MotorIA,LOW); } //esta función es para que el robot retroceda void Atras(){ digitalWrite(MotorDA,LOW); digitalWrite(MotorIA,LOW); delay(1); digitalWrite(MotorDR,HIGH); digitalWrite(MotorIR,HIGH); } //esta función es para que el robot gire a la derecha void Derecha(){ digitalWrite(MotorDA,LOW); digitalWrite(MotorIR,LOW); delay(1); digitalWrite(MotorDR,HIGH); digitalWrite(MotorIA,HIGH); } //esta función es para que el robot gire a la izquierda void Izquierda(){ digitalWrite(MotorDR,LOW); digitalWrite(MotorIA,LOW); delay(1); digitalWrite(MotorDA,HIGH); digitalWrite(MotorIR,HIGH); } void loop() { int LecturaSensor; LecturaSensor=digitalRead(Sensor); if (LecturaSensor==0){ //esto nos indica que sensor esta sobre blanco Frenar();//frena el robot delay(10);//por 10 milisegundos Atras(); //le indicamos que valla hacia atras delay(500); //durante 500 milisegundos Derecha(); //que gire a la derecha delay(400); // por 400 milisegundos Avanzar() // y le indicamos que vuelva a avanzar } else{ Avanzar();//en el caso que el sensor este sobre negro //el robot va a avanzar } delay(10); //este es el tiempo de barrido del programa }
En este ejemplo hemos utilizado 6 funciones para manejar la activación y desactivación de los motores. Las funciones Avanzar(), Frenar(), Atras(), Derecha(), Izquierda(), se encargan de poner en estado alto o bajo los pines necesarios para comandar el puente H (placa de potencia) para que los motores giren en los sentidos necesarios para lograr los movimientos que deseamos.
El programa principal inicia haciendo una lectura del sensor de línea, que si se encuentra en color blanco nos dará un 0 y si se encuentra en negro nos dará un 1. Esta lectura la guardaremos en una variable que anteriormente hemos declarado llamada LecturaSensor
LecturaSensor=digitalRead(Sensor);
Luego de realizar la lectura entramos a una estructura condicional (IF) donde evaluaremos el valor que obtuvimos de la lectura, en el caso de que tengamos un 0, el robot, frenará, retrocederá, girará y procederá a avanzar hasta detectar línea nuevamente.
if (LecturaSensor==1){ //esto nos indica que sensor esta sobre blanco Frenar();//frena el robot delay(10);//por 10 milisegundos Atras(); //le indicamos que valla hacia atras delay(500); //durante 500 milisegundos Derecha(); //que gire a la derecha delay(400); // por 400 milisegundos Avanzar() // y le indicamos que vuelva a avanzar } else{ Avanzar();//en el caso que el sensor este sobre negro //el robot va a avanzar }
En el caso de leer un 1 en el sensor esto le indica que está sobre superficie negra y por lo tanto puede avanzar.