Con las prácticas realizadas hasta ahora podemos controlar los dos motores tal como se ve en el vídeo
Ahora nos podemos plantear cómo organizar nuestro programa para poder indicarle a nuestro coche qu se mueva adelante, atrás , derecha, izquierda... , aún más, cómo indicarle que realice estos movimientos durante un tiempo y a una determinada velocidad.
Para ello utilizaremos las funciones.
¿Qué son las funciones?
Son partes del código del programa que realizan una tarea y después sigue el programa en el punto donde fueron llamadas.
Los programas de arduino tienen siempre dos funciones definidas que son:
void setup() y void loop() y que ya hemos utilizado.
Las funciones nos ayudan a que nuestro programa sea más sencillo de seguir. Podemos declarar una función antes o después de la función loop.
Partes de una función
vacio ---- void ....
Ahora nos podemos plantear cómo organizar nuestro programa para poder indicarle a nuestro coche qu se mueva adelante, atrás , derecha, izquierda... , aún más, cómo indicarle que realice estos movimientos durante un tiempo y a una determinada velocidad.
Para ello utilizaremos las funciones.
¿Qué son las funciones?
Son partes del código del programa que realizan una tarea y después sigue el programa en el punto donde fueron llamadas.
Los programas de arduino tienen siempre dos funciones definidas que son:
void setup() y void loop() y que ya hemos utilizado.
Las funciones nos ayudan a que nuestro programa sea más sencillo de seguir. Podemos declarar una función antes o después de la función loop.
Partes de una función
- Qué tipo de dato devuelve : nº entero ---int
vacio ---- void ....
- Qué nombre tendrá la función en nuestro caso adelante, atras... no pueden tener espacios ni signos especiales
- Qué información necesitará (parámetros): nosotros le pasaremos el tiempo y la velocidad, pero puede ocurrir que no necesite ningún dato.
- Qué tareas queremos que realice (código): deberá ir entre llaves y cada línea finaliza con ;
- Si queremos que nos devuelva algun dato (return) : en nuestro caso, no, queremos que active los motores.
La función se llama dentro de la función loop().
Veamos un ejemplo queremos que nuestro coche avance ADELANTE 3 seg a velocidad media y a continuación pare 2 seg.
Para que el coche avance las dos ruedas deben girar hacia adelante en la misma dirección.
El programa que nos queda es:
#define actm1 3 // activacion motor 1
#define motor1_1 4 // control motor 1 pin1
#define motor1_2 5 // Control motor 1 pin2
#define actm2 6 // activacion motor 2
#define motor2_1 7 // control motor 2 pin1
#define motor2_2 8 // Control motor 2 pin2
void setup()
{
pinMode( actm1, OUTPUT);
pinMode( motor1_1, OUTPUT);
pinMode( motor1_2, OUTPUT);
pinMode( actm2, OUTPUT);
pinMode( motor2_1, OUTPUT);
pinMode( motor2_2, OUTPUT);
}
void loop()
{
adelante(3000,127);
para(2000);
}
void adelante (int tiempo, float velocidad) // le diremos cuanto tiempo y a que velocidad
{
analogWrite(actm1, velocidad); // Activamos Motores con la velocidad indicada
analogWrite(actm2, velocidad);
digitalWrite(motor1_1, HIGH);
digitalWrite(motor1_2, LOW);
digitalWrite(motor2_1, LOW);
digitalWrite(motor2_2, HIGH); // giran en sentido horario
delay(tiempo); // indicamos el tiempo de giro
}
void para (int tiempo) // función para parar motores
{
digitalWrite(motor1_1, LOW); // ponemos todos los controles a estado bajo
digitalWrite(motor1_2, LOW);
digitalWrite(motor2_1, LOW);
digitalWrite(motor2_2, LOW);
delay(tiempo); // indicamos el tiempo de parada
}
Como ejercicio debéis probar este código y ampliarlo con las funciones atras, izqda, dcha, izqda_atras y dcha_atras. El funcionamiento és el siguiente: