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:30] – [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 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:// | ||