PRÁCTICA 6: FUNCIONES CON ARDUINO

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


  • Qué tipo de dato devuelve : nº entero ---int   
                                                                     nº real ----float

                                                         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: