Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
proyectos:programacion_bats [2018/02/16 18:28] – [Programación de la BATS] Félix Sánchez-Tembleque | proyectos:programacion_bats [2022/07/12 08:12] (actual) – [Tipos de variables] Félix Sánchez-Tembleque | ||
---|---|---|---|
Línea 9: | Línea 9: | ||
* En cuanto al hardware: aprender técnicas de soldadura básica. | * En cuanto al hardware: aprender técnicas de soldadura básica. | ||
* En cuanto al software: aprender ideas básicas de programación. | * En cuanto al software: aprender ideas básicas de programación. | ||
- | * En cuanto al diseño: aprender a usar KiCAD diseñando la PCB de BATS | + | * En cuanto al diseño: aprender a usar KiCAD diseñando la PCB de BATS. |
Línea 299: | Línea 299: | ||
Esta tarea está pensada para reforzar el concepto de salida analógica y divertirse un poco mezclando luces de colores. | Esta tarea está pensada para reforzar el concepto de salida analógica y divertirse un poco mezclando luces de colores. | ||
- | ===== Proyecto 4. Compartir programas ===== | + | ===== Proyecto 4: Entradas digitales y analógicas ===== |
+ | |||
+ | ==== Información desde el exterior ==== | ||
+ | |||
+ | Podemos interpretar las entradas de datos a Arduino como la información que tenemos del exterior por nuestros sentidos. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ==== Pulsar un botón ==== | ||
+ | |||
+ | En el caso de las entradas digitales, la información será como lo visto para las salidas: si/no, encendido/ | ||
+ | |||
+ | < | ||
+ | void setup() | ||
+ | { | ||
+ | pinMode(11, | ||
+ | Serial.begin(9600); | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | int entrada = digitalRead(10); | ||
+ | Serial.println(entrada); | ||
+ | delay(10); | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | Subiendo el código y abriendo el monitor serie podremos ver lo que sucede cuando pulsamos los botones. El IDE tiene un programa de ejemplo parecido | ||
+ | |||
+ | **Archivo> | ||
+ | |||
+ | ==== Encender la luz ==== | ||
+ | |||
+ | Podemos unir la información de entrada con la de salida enlazando un botón con un led. | ||
+ | |||
+ | < | ||
+ | void setup() | ||
+ | { | ||
+ | pinMode(11, | ||
+ | pinMode(2, OUTPUT); // pin 2 con el led verde | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | int entrada = digitalRead(10); | ||
+ | digitalWrite(2, | ||
+ | delay(10); | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== Entradas analógicas ==== | ||
+ | |||
+ | Arduino tiene varios pines con entradas que son capaces de medir un valor intermedio entre LOW (0 voltios) y HIGH (5 voltios). Para medir algunos parámetros (temperatura, | ||
+ | |||
+ | El IDE tiene un ejemplo que lee una entrada y muestra el resultado por el monitor serie. | ||
+ | |||
+ | **Archivo> | ||
+ | |||
+ | Una vez subido el programa y abierto el monitor serie giraremos el potenciómetro para ver el resultado. El número que muestra el monitor serie será 0 en un extremo, 1023 en el otro y un valor proporcional para valores intermedios. | ||
+ | |||
+ | ==== Tipos de variables ==== | ||
+ | |||
+ | Hasta ahora hemos definido variables con un nombre, y les hemos puesto por delante la coletilla ' | ||
+ | |||
+ | - ' | ||
+ | - ' | ||
+ | |||
+ | Cuando leemos una entrada analógica, obtenemos un número entero entre 0 y 1023, que se corresponde con una tensión en voltios de 0 a 5 según una regla de tres. El programa de ejemplo | ||
+ | |||
+ | **Archivo> | ||
+ | |||
+ | lee el valor en una entrada (entero) y lo convierte en un número real de 0 a 5 con los decimales que correspondan. | ||
+ | |||
+ | Otro tipo de variable común es ' | ||
+ | |||
+ | ==== Tarea 4: Regular la luz ==== | ||
+ | |||
+ | Leer una entrada (de uno de los dos potenciómetros) y en proporción a ella encender un led de forma variable. | ||
+ | ===== Proyecto 5: Tareas condicionadas ===== | ||
+ | |||
+ | ==== Sentencia if-then ==== | ||
+ | |||
+ | Con mucha frecuencia querremos que nuestro programa haga una determinada tarea, pero sólo si se cumple una condición. La forma de hacerlo es con una sentencia if-then (si-entonces). La forma básica es con la instrucción if, después la condición entre paréntesis () y la lista de tareas entre corchetes {}. | ||
+ | |||
+ | < | ||
+ | if (condición) | ||
+ | { | ||
+ | // tareas a realizar si se cumple la condición | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | Una forma más completa es tener una tarea alternativa si la condición no se cumple. | ||
+ | |||
+ | < | ||
+ | if (condición) | ||
+ | { | ||
+ | // tareas a realizar si se cumple la condición | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | // tareas a realizar si NO se cumple la condición | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | La condición será una expresión matemática (igual, mayor, menor…). El programa anterior que enlazaba el botón con el led puede hacerse también de este modo | ||
+ | |||
+ | < | ||
+ | void setup() | ||
+ | { | ||
+ | pinMode(11, | ||
+ | pinMode(2, OUTPUT); // pin 2 con el led verde | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | int entrada = digitalRead(10); | ||
+ | if (entrada == 1) // la comparación de igualdad de dos números se escribe con un símbolo doble == | ||
+ | { | ||
+ | digitalWrite(2, | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | digitalWrite(2, | ||
+ | } | ||
+ | delay(10); | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | El IDE tiene un ejemplo de if-then que conecta un potenciómetro con un led | ||
+ | |||
+ | **Arduino> | ||
+ | |||
+ | ==== Variables de estado ==== | ||
+ | |||
+ | Vamos a definir ahora un estado del sistema con una variable que vamos a llamar ' | ||
+ | |||
+ | < | ||
+ | int encendido = 0; | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | pinMode(11, | ||
+ | pinMode(12, | ||
+ | |||
+ | pinMode(2, OUTPUT); // pin 2 con el led verde | ||
+ | pinMode(6, OUTPUT); // pin 6 con el led rojo | ||
+ | |||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | if (encendido == 0) | ||
+ | { | ||
+ | encendido = digitalRead(12); | ||
+ | } | ||
+ | if (encendido == 1) | ||
+ | { | ||
+ | encendido = !digitalRead(11); | ||
+ | } | ||
+ | digitalWrite(2, | ||
+ | digitalWrite(6, | ||
+ | delay(10); | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | Este programa con una variable de estado es el ejemplo más sencillo de un autómata finito (en inglés Finite State Machine). Parece un programa sencillo, pero aññadido a los programas de movimiento del robot nos permitirá pararlo o volver a ponerlo en marcha en cualquier momento. | ||
+ | |||
+ | ==== Tarea 5: luces autónomas ==== | ||
+ | |||
+ | En el pin A0 de la BATS hay conectado un sensor de luz. El programa debe leer la información, | ||
+ | |||
+ | ===== Proyecto 6. Compartir programas ===== | ||
==== Hardware y software abiertos ==== | ==== Hardware y software abiertos ==== | ||
Línea 311: | Línea 488: | ||
{{: | {{: | ||
- | ==== Tarea 4: Probar programas de Github ==== | + | ==== Tarea 6: Probar programas de Github ==== |
Entra en la carpeta de [[https:// | Entra en la carpeta de [[https:// |