¡Descarga arduino ejercicio 5 practica y más Ejercicios en PDF de Ingeniería de Transportes solo en Docsity!
Transporte aéreo y sistemas embardados
Práctica 6
Arduino 5
Transporte aéreo y sistemas embardados
Índice
• Objetivos:
– Conocer los fundamentos básicos de programación Arduino
• Entregables:
– N/A
Transporte aéreo y sistemas embardados
• Funciones:
• Bloque de código que realiza una función, y que puede “ocultar” sus
detalles de implementación;
• Es habitual (¡y necesario!) construirse bibliotecas de funciones
organizadas por tipología;
• Definición de una función:
tipo_devuelto nombre_funcion(argumentos) { // cuerpo de la función } // fin de la función
• Tipo_devuelto:
- Definición del tipo de dato que la función devuelve cuando es llamada: int, char…
- Si la función no devuelve ningún valor, debemos indicar tipo nulo (void);
• Nombre_función:
- Mismo concepto que en nomenclatura de variables;
Generalidades fundamentales
void IntermitenciaLed (int Led, int Duración) { digitalWrite(Led, HIGH); delay(Duracion); digitalWrite(Led, LOW); }
Transporte aéreo y sistemas embardados
• Funciones:
• Definición de una función:
• Argumentos:
- De ningún argumento, a varios, son los datos recibidos que necesita una función
para ejecutar su tarea;
- El tipo nulo se puede obviar: setup(void) equivale a setup(), que es lo habitual;
- Los tipos de datos y los valores deben ser coherentes: el compilador realiza
comprobaciones, pero es mejor no fiar el resultado al mismo;
- Firma de una función: EsBisiesto(int)
- Prototipo de una función: bool EsBisiesto(int Anho);
- El prototipo le indica al compilador tipos recibidos/devueltos y número de
argumentos, para comprobar antes de cada llamada;
- Al contrario que otros lenguajes, Arduino prototipa por nosotros las
funciones que creamos en un fichero. Si las declaramos antes del loop
normalmente no hay problema. Si las declaramos después del loop es
conveniente prototiparlas antes.
float Media(int p, int q) { float r = (p+q)/2; return r; } … void loop() { … float MediaNotas = Media(10, 5); …
Generalidades fundamentales
float Media(int , int ); … void loop(){ … float MediaNotas = Media(10,5); …} … float Media(int p, int q) { return (p+q)/2; // compacto por ahorro de espacio }
Transporte aéreo y sistemas embardados
• Funciones:
• Sobrecargas:
• Sobrecargamos una función cuando existe más de una firma con el mismo
nombre (que difieren en el número y/o tipo de argumentos):
int DuplicaEntero(int p) { return (2p); } float DuplicaFloat(float p) { return(2p); } … int nValorDuplicado = DuplicaEntero(10); float fValorDuplicado = DuplicaFloat(15.5);
• “Recomendaciones”:
• Nombres cortos, pero descriptivos de lo que se hace, y no cómo se hace;
• Una cosa al tiempo: una función debería hacer sólo una sola cosa;
• “Que quepa en una pantalla”: tamaños pequeños, sin tener que hacer scroll;
• “No reinventes la rueda”: ¿seguro que no lo ha hecho alguien ya?...Pero, aún
así, genera tus propias librerías: aprenderás, y son herramientas que siempre
irán contigo.
Generalidades fundamentales
int Duplica(int p) { return (2p); } float Duplica(float p) { return(2p); } … int nValorDuplicado = Duplica(10); float fValorDuplicado = Duplica(15.5);
Transporte aéreo y sistemas embardados
• Directivas de procesador:
• #include:
• Permite invocar funciones de una biblioteca a nuestro código (imprescindible
al trabajar con hardware de cualquier fabricante);
• Solicita al compilador que incluya el contenido del fichero indicado en nuestro
código fuente, en el punto en el que hemos escrito la directiva;
• Dos formas de invocar una biblioteca:
• #include : busca en el directorio de bibliotecas por
defecto;
• #include “SoftwareSerial.h”: buscar en el directorio del proyecto;
• Los archivos de cabeceras contienen los prototipos de funciones de la
biblioteca (o métodos, si la biblioteca está escrita como clase);
• #undef NOMBRE; //”desregistra” una directiva de pre-procesador
Generalidades fundamentales
Transporte aéreo y sistemas embardados
• Directivas de procesador:
• #define:
• Otro uso común es “ocultar” instrucciones “de comprobación” que vamos
incorporando al código para ir revisando resultados parciales (ver siguiente);
• #ifdef … #endif
• Permiten incluir/descartar bloques de código encerrados entre las dos
directivas, si está definido un literal:
#define DEBUG 1 // al principio de nuestro código, típicamente, mientras estamos codificando … #ifdef DEBUG Serial.println(ValorLeido); Serial.println(ActuacionMotorIzquierdo); Serial.println(ActuacionMotorDerecho); #endif …
• De hecho, el compilador obvia el código y “aligera” el programa si no está
definido el literal.
• #if defined = #ifdef; #if !defined = #ifndef
Generalidades fundamentales
Transporte aéreo y sistemas embardados
Ejercicios
Transporte aéreo y sistemas embardados
Muchas gracias