Semana 5 Programacion en Arduino
Semana 5 Programacion en Arduino
Sketch.
Partes de un programa?
Instrucciones Condicionales?
DEFINICIÓN DE SKETCH
Se compone de 3 secciones
Reservada para escribir,
las diferentes
LA SECCIÓN DE
declaraciones de
DECLARACIONES DE
variables que
VARIABLES GLOBALES
necesitemos.
Puede ser
Es un Crear una variable La línea de
elementos de “declarar variable” asignación se
nuestro Sketch lee “de izquierda GLOBAL LOCAL
que guarda un Especificar su tipo a derecha”: el
determinado según el tipo de valor
contenido dato que se quiera “nuevoValor” se Se declara en
almacenar asigna a la Se declara al el interioir de
(números enteros, variable principio void setup y
decimales, cadena “nombreVariable antes y fuera void loop
de caracteres, etc) ” de void
setup y void Solo puede ser
Establecer un valor loop manipulada o
inicial “inicializar utilizada por
variable” instrucciones
escritas dentro
de su sección
tipoVariable nombreVariable = valorInicialVariable
Puede tener dos valores cierto o falso • Puede tener un numero entre 0 y
Ocupa 1 byte de memoria 255
• Para el valor cierto se usa “true” • Utilizan 8 bits (byte) de memoria
o”1” • Los valores NO pueden ser
• Para el valor falso se usa “false” o negativos
“0”
Boolean byte
TIPOS DE
VARIABLES
char int
Para Arduino
• Solo puede ser un carácter (una • El valor puede estar entre
letra, un digito, un signo de -32768 (−215 ) 𝑦 32767 (215 − 1),
puntuación ) • Utiliza 2 bytes (16 bits) de memoria
• El carácter se debe escribir entre
comillas simples ----- ‘A’ Para arduino DUE:
• Ocupa 8 bits (byte) de memoria • El valor puede estar entre −2,147,483,648
• Existen 2^8 =256 valores entre - ( −231 ) y 2,147,483,647 (231−1) .
128 y 127 • Utiliza 4 bytes de memoria
TIPOS DE
DATOS
short long
• Número entero entre -32768 (-215) y • El valor para los modelos de placa (ya sean
• 32767 (215-1), basadas en microcontroladores de tipo AVR
• utilizan 2 bytes (16 bits) de memoria para o
• almacenarse. • de tipo ARM) es un número entero entre -
• En este sentido, los tipos “short” e “int” 2.147.483.648 y 2.147.483.647
para placas de la familia AVR son • utilizan 4 bytes (32 bits) de memoria
equivalentes • En este sentido, los tipos “long” e “int” para
• la placa Arduino Due el tipo “short” placas de la familia ARM son
• es el único que utiliza 16 bits. • equivalentes.
TIPOS DE
DATOS
ejemplo
Operador ternario
Expresión1 ? Expresión2 : Expresión3;
Asignación después de
una manipulación de bits.
48
Manipulación de Bits
Complemento Uno ~
Desplazamiento a la <<
Izquierda
Desplazamiento a la Derecha >>
AND &
OR |
OR Exclusiva ^
Un valor de salida es un dato que podemos obtener en nuestro sketch como resultado “tangible”
de la ejecución de la instrucción. El significado de ese valor devuelto dependerá de cada
instrucción concreta: algunos son de control otros son resultados numéricos obtenidos tras la
ejecución de algún cálculo matemático, etc.
Repetición Mientras
switch (expresión){
case exp-const:
proposiciones
case exp-const:
proposiciones
default:
proposiciones
} while(expresión)
proposición
Repetición Hacer/Mientras Repetición Para/Hasta
do
proposición for (expr1; expr2; expr3)
while(expresión); proposición
Datos en SRAM
Variables: Datos que van a ser leídos o escritos repetitivamente. SRAM este
es el espacio de almacenamiento por default.
unsigned char x, y;
unsigned int a, b, c;
pcad = cadena;
COMUNICACIÓN SERIE CON LA PLACA ARDUINO
Dentro de nuestros sketches podemos hacer uso de este receptor/transmisor TTL-UART para enviar datos al
microcontrolador (o recibirlos de él) gracias al elemento del lenguaje Arduino llamado “Serial”.
Serial.available():
Devuelve el número de bytes –caracteres– disponibles para ser leídos que provienen del exterior a
través del canal serie (vía USB o vía pines TX/RX).
Estos bytes ya han llegado al microcontrolador y permanecen
almacenados temporalmente en una pequeña memoria de 64 bytes que tiene el chip TTL-UART –
llamada “buffer”– hasta que sean procesados
mediante la instrucción Serial.read(). Si no hay bytes para leer, esta
instrucción devolverá 0. No tiene parámetros.
Serial.read()
Devuelve el primer byte aún no leído de los que estén almacenados en el buffer de entrada del chip
TTL-UART. Al hacerlo, lo elimina de ese buffer. Para devolver el siguiente byte, se ha de volver a
ejecutar Serial.read(). Y hacer así hasta que se hayan leído todos. Cuando no haya más bytes
disponibles, Serial.read() devolverá -1. No tiene parámetros.
OTRAS INSTRUCCIONES
Serial.peek()
Devuelve el primer byte aún no leído de los que estén almacenados en el buffer de
entrada. No obstante, a diferencia de Serial.read(), ese byte leído no se borra del
buffer, con lo que las próximas veces que se ejecute Serial.peek() –o una vez
Serial.read()– se volverá a leer el mismo byte. Si no hay bytes disponibles para leer,
Serial.peek() devolverá -1. Esta instrucción no tiene parámetros.
Serial.find()
Lee datos del buffer de entrada (eliminándolos de allí) hasta que se encuentre la
cadena de caracteres (o un carácter individual) especificada como parámetro, o bien
se hayan leído todos los datos actualmente en el buffer. La instrucción devuelve
“true” si se encuentra la cadena o “false” si no.
Serial.findUntil() Serial.readBytes()
Lee del buffer de entrada (eliminándolos de allí) la cantidad de bytes especificada como
tercer parámetro, o bien, si se encuentra antes una cadena de caracteres –o carácter
individual–
especificada como primer parámetro que hace de marca de final, o bien, si no llegan
suficientes bytes ni se encuentra la marca de final, hasta que se haya superado el tiempo
especificado por Serial.setTimeout(). En cualquier caso, los bytes leídos se almacenarán
en un array –de tipo “char[]”– especificado como segundo parámetro. Esta instrucción
devuelve el número de bytes leídos del buffer (por lo que un valor 0 significa que no se
encontraron datos válidos).
Serial.setTimeout()
Tiene un parámetro (de tipo “long”) que sirve para establecer el número de milisegundos
máximo que las instrucciones Serial.readBytesUntil() y Serial.readBytes() esperarán a la
llegada de datos al
búfer de entrada serie. Si alguna de estas dos instrucciones no recibe ningún dato y se
supera ese tiempo, el sketch continuará su ejecución en la línea siguiente. El tiempo de
espera por defecto es de 1000 milisegundos. Esta instrucción se suele escribir en “void
setup ()”. No tiene valor de retorno.
Serial.parseFloat()
Lee del buffer de entrada (eliminándolos de allí) todos los datos hasta que se encuentre
con un número decimal. Su valor de retorno – de tipo “long”– será entonces ese número
decimal encontrado. Cuando detecte el primer carácter posterior no válido, dejará de leer
(y por tanto, no
Serial.parseInt()
Lee del buffer de entrada (eliminándolos de allí) todos los datos hasta que se encuentre con
un número entero. Su valor de retorno –de tipo “long”– será entonces ese número entero
encontrado. Cuando detecte el primer carácter posterior no válido, dejará de leer (y por
tanto, no seguirá eliminando datos del buffer). Esta instrucción no tiene parámetros.
INSTRUCCIONES DE GESTION DE TIEMPO
millis(): devuelve el número de milisegundos (ms) desde que la placa Arduino empezó a ejecutar el sketch
actual. Este número se reseteará a cero aproximadamente después de 50 días (cuando su valor supere el
máximo permitido por su tipo, que es “unsigned long”). No tiene parámetros.
micros(): devuelve el número de microsegundos (μs) desde que la placa Arduino empezó a ejecutar el sketch
actual. Este número –de tipo “unsigned long”– se reseteará a cero aproximadamente después de 70 minutos.
Esta instrucción tiene una resolución de 4 μs (es decir, que el valor retornado es siempre un múltiplo de
cuatro). Recordar que 1000 μs es un milisegundo y por tanto, 1000000 μs es un segundo. No tiene parámetros.
delay(): pausa el sketch durante la cantidad de milisegundos especificados como parámetro –de tipo “unsigned long”–. No
tiene valor de retorno.
delayMicroseconds(): pausa el sketch durante la cantidad de microsegundos especificados como parámetro –de tipo
“unsigned long”– . Actualmente el máximo valor que se puede utilizar con precisión es de 16383. Para esperas mayores que
esta, se recomienda usar la instrucción delay(). El mínimo valor que se puede utilizar con precisión es de 3 μs. No tiene valor
de retorno.
BLOQUES CONDICIONALES
El bloque “switch”
En una sección “case” el valor a comparar tal solo puede ser de tipo entero.
BLOQUES REPETITIVOS
(BUCLES)
El bloque “for”
IMPORTANTE
Sistema mínimo y tarjetas de desarrollo
Cómo se almacenan?
Direccionamiento
29
PREGUNTAS
30