Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Un dato es la expresión general que describe los objetos con los cuales opera una computadora.
Existen dos tipos de datos
Compuestos (estructurados)
● Registros
● Arreglos (vectores, matrices)
● Archivos
De tipo numérico:
● Enteros:
o Números naturales
o Enteros (positivos o negativos)
● Reales (de coma flotante)
o Parte decimal (positivos o negativos)
o Mantisa (positiva o negativa) y un exponente
● Booleana (True, False)
● Carácter
o Caracteres
o Cadenas de caracteres
En el lenguaje de Arduino, ciertos tipos de datos se adaptan mejor a tareas específicas que otros
tipos de datos, aunque más de un tipo de datos podría funcionar. Seleccionar el tipo de datos
correctos a menudo da como resultado un programa que se ejecuta más rápido y usa menos
memoria [ CITATION Jac15 \l 9226 ].
Arduino C es compatible con casi todos los tipos de datos de ANSI C, y maneja los siguientes tipos
de variables:
Hace décadas, los fabricantes de computadoras decidieron organizar estos dígitos binarios, o bits,
en grupos de 8 bits. Cada grupo de 8 bits tomado como una unidad se llama byte. Debido a que un
byte solo puede tener dos estados, 1 o 0, los bytes son más utilizados aplicando aritmética de base
2, en lugar de la base 10 a la que está acostumbrado.
Se recomienda leer el capítulo 3 del libro Beginning C for Arduino segunda edición para más
información.
Arrays (arreglos)
Es una colección indexada de valores del mismo tipo. en el caso de un array el índice no es una
palabra, sino un número (que corresponde al número de orden de la variable concreta dentro del
array). se puede declarar un array de la siguiente manera:
int listasistencia[5];
dato 2 8 26 -15 3
índice 0 1 2 3 4
Nota importante 2: tener especial cuidado de no tratar de acceder datos fuera del array (por
ejemplo, si colocásemos un sexto dato, nos devolvería datos sin sentido de la memoria).
Strings
Un string es una cadena (array) de caracteres. Los strings pueden ser declarados de dos
maneras diferentes: como variables tipo char o como objetos pertenecientes a una clase más
compleja llamados ‘Strings’.
Cuando una cadena de caracteres es almacenada es una variable tipo char normalmente se les
hace terminar por el carácter nulo (ASCII 0). Esto se hace con el fin de permitir a las funciones que
manipulan cadenas de caracteres en variables char reconocer el final de la cadena. Por lo tanto,
cuando se calcule el tamaño de una cadena dentro de un array se debe recordar añadir una
posición para el carácter de ‘fin de cadena’ (ASCII 0).
Uno de los programas de muestra incluidos con Arduino C IDE es uno que puede generar una tabla
de Juego de caracteres ASCII.
Constantes
Son espacios de memoria cuyo valor no cambia durante a la ejecución del programa (sketch). En
estos casos podemos añadir la palabra reservada ‘const’ al comienzo de la declaración de
variables. Estos se utilizan típicamente para definir número de pin o constantes matemáticas .
Ejemplo:
const int LED = 2; //declaro al pin 2 del microcontrolador como LED
const float Pi = 3.141592654;
El lenguaje Arduino tiene una serie de palabras reservadas que son constantes:
INPUT/OUTPUT (Entrada / Salida). Los pines digitales pueden ser configurados de ambos
modos: como entrada (INPUT) o como salida (OUTPUT) mediante la función pinMode
()
PinMode (13, OUTPUT) ;//configure el pin 13 como salida
digital
INPUT_PULLUP: reservado como parámetro de la función pinMode () para el uso
de resistencias pull-up en los microcontroladores
PinMode (2, INPUT_PULLUP) ;//Habilite el pull-up del pin 2
(entrada)
LED_BUILTIN: reservada para el uso del LED de serie con el que viene equipado el
Arduino (13)
true / false (verdadero / Falso). Para el Arduino True (Verdadero) es cualquier valor
que no es cero (0). False (falso) es el valor 0.
HIGH / LOW (Alto / Bajo). Es el valor lógico en una puerta digital: LOW es el valor 0 – 0
voltios y HIGH es el valor 1 – 5 Voltios
En general, se consideran las constantes representadas en base 10 (es decir, como números
decimales). Sin embargo, se pueden utilizar notaciones especiales para expresar números en otras
bases.
Ejemplo:
B101; // equivale al decimal 5
El formato binario (B) solo funciona con bytes (8 bits) entre 0 (B0) y 255 (B11111111). Si se
necesita utilizar un entero int (int de 16 bits) en forma binaria, se puede hacer en un
procedimiento de dos pasos como sigue:
Formateadores U y L
Generalmente, una constante entera es tratada como un int con las consiguientes limitaciones
en cuanto a valores. Para especificar que la constante entera tiene otro tipo hay que añadirle el
sufijo
● ‘u’ o ‘U’ para que el formato de la constante sea “unsigned”. Ejemplo: 33u
● ‘l’ o ‘ L‘ para que el formato de la constante sea “long”. Ejemplo: 100000L
● ‘ul’ o ‘UL’ para el formato de la constante sea “unsigned long”. Ejemplo:
32767ul
Ejemplo:
n = .005;
Las constantes en coma flotante pueden también ser expresadas en una variedad de notaciones
científicas. Ambos caracteres ‘E’ y ‘e’ pueden ser utilizados como indicadores del exponente.
La precisión de un número se refiere al número de dígitos significativos que puede esperar ese
número. En Arduino C, la mayor precisión posible esperar para un valor de punto flotante es de 7
dígitos de precisión. Lo que esto significa es que, aunque puede representar un número de punto
flotante con 38 dígitos, solo los primeros 7 son significativos. Los 31 dígitos restantes son la mejor
conjetura de la computadora sobre cuáles deberían ser los dígitos. Dado ese hecho,
Parece engañoso que PI se defina tal como es. Para todo propósito práctico, PI podría definirse
como
#define PI 3.141592
y olvide el resto de los dígitos porque la computadora no podrá representar esos dígitos en
cualquier operación matemática con mayor precisión que seis o siete dígitos. Sin embargo, si solo
va a mostrar pi y no manipularlo de cualquier manera, entonces PI le da esa constante con
considerable precisión.
Aquellas variables que hayan sido definidas fuera de las funciones setup y loop se
denominan variables globales y su valor puede ser accedido desde cualquier punto del programa
o sketch
Por el contrario, aquellas variables definidas dentro una función se llaman locales y tienen un
ámbito local: sus variables accesibles desde dentro de la función en la que han sido declaradas.
A medida que los sketchs crecen en tamaño y complejidad, el uso de variables locales es
aconsejado porque evita confusiones entre variables con el mismo nombre.
En el caso de las funciones anidadas (una función llamada desde otra función, que a su vez ha sido
llamada desde otra función), el ámbito de aquellas variables definidas en las funciones exteriores
se extiende a las funciones interiores, pero no viceversa
Variables estáticas
La palabra reservada (keyword) static para crear variables que variables que son visibles para la
función. La diferencia con las variables locales es que éstas son creadas y destruidas cada vez que
se llama a una función. Las variables definidas como static persisten cuando la función ha
terminado y se conservan los datos almacenados en ellas disponibles para la próxima vez que se
llame a esa función. Estas variables se crean e inicializan solamente la primera vez que la función
que las crea es llamada.
Variables volátiles
Cuando declaramos una variable como “Volatile” lo que estamos haciendo es instruir al
compilador a cargar siempre la variable desde la memoria RAM y no desde uno de los registros
internos del procesador.
La razón por la que hacemos esto es que, bajo ciertas condiciones, el valor de una variable
almacenada en los registros internos puede sufrir alteraciones. En Arduino el único sitio en el que
esto puede suceder es en las partes de código asociado con interrupciones (interrupt services
routines)
Ejemplo:
Nota 2: del mismo modo no incluir un signo igual después del nombre del nombre de la constante,
pues generará un error de compilación
Se puede encontrar la página principal de referencia para las bibliotecas del C del AVR (una
referencia a los microcontroladores Atmel en los cuales se basa Arduino) en la siguiente dirección:
http://www.nongnu.org/avr-libc/user-manual/modules.html
observe qué #include, de modo similar qué #define, no admite punto y coma al final.
Expresiones
Una expresión es una combinación de operadores y operandos. Los operandos podrán ser
constantes, variables u otras expresiones y los operadores de cadena, aritméticos, relacionales o
lógicos. Las expresiones se clasifican, según el resultado que producen, en:
Numéricas: Los operandos que intervienen en ellas son numéricos, el resultado es también de
tipo numérico y se construyen mediante los operadores aritméticos. Se pueden considerar
análogas a las fórmulas matemáticas. Debido a que son los que se encuentran en la mayor parte
de los lenguajes de programación, los algoritmos utilizarán los siguientes operadores aritméticos:
menos unario (– ), multiplicación ( * ),división real ( / ),exponenciación ( ** ),adición ( + ),resta
(– ),módulo de la división entera ( mod ) y cociente de la división entera ( div ). Tenga en cuenta
que la división real siempre dará un resultado real y que los operadores mod y div sólo operan con
enteros y el resultado es entero.
Alfanuméricas. Los operandos son de tipo alfanumérico y producen resultados también de dicho
tipo. Se construyen mediante el operador de concatenación, representado por el operador
ampersand (&) o con el mismo símbolo utilizado en las expresiones aritméticas para la suma.
Booleanas. Su resultado podrá ser verdad o falso. Se construyen mediante los operadores
relacionales y lógicos. Los operadores de relación son: igual ( = ),distinto ( <> ),menor que ( < ),
mayor que ( > ),mayor o igual ( >= ),menor o igual ( <= ). Actúan sobre operandos del mismo tipo y
siempre devuelven un resultado de tipo lógico. Los operadores lógicos básicos son: negación lógica
( no ), multiplicación lógica ( y ),suma lógica ( o ). Actúan sobre operandos de tipo lógico y
devuelven resultados del mismo tipo, determinados por las tablas de verdad correspondientes a
cada uno de ellos.
Moldeado de datos
La conversión de un tipo de datos en otro se conoce como conversión de tipos o conversión de
tipos. Por ejemplo, si desea almacenar un valor 'largo' en un entero simple, puede escribir cast
'largo' en 'int'. Puede convertir los valores de un tipo a otro explícitamente utilizando el operador
de conversión de la siguiente manera:
(Tipo_de_dato) expresion
Considere el siguiente ejemplo en el que el operador de conversión hace que la división de una
variable entera por otra se realice como una operación de punto flotante:
Considere el siguiente ejemplo en el que el operador de conversión hace que la división de una
variable entera por otra se realice como una operación de punto flotante:
Las conversiones de tipos pueden ser implícitas, lo que el compilador realiza automáticamente, o
se pueden especificar explícitamente mediante el uso del operador de conversión. Se considera
una buena práctica de programación utilizar el operador de conversión siempre que sea necesario
realizar conversiones de tipo.
Promoción de enteros
La promoción de enteros es el proceso mediante el cual los valores de tipo entero "más pequeño"
que int o unsigned int se convierten en int o unsigned int . Considere un ejemplo de
cómo agregar un carácter con un número entero:
Aquí, el valor de sum es 116 porque el compilador realiza una promoción de enteros y convierte el
valor de 'c' a ASCII antes de realizar la operación de suma real.
Aquí, es sencillo entender que primero c se convierte en un número entero, pero como el valor
final es doble, se aplica la conversión aritmética habitual y el compilador convierte i y c en 'float' y
los agrega dando un resultado 'float' (Point, 2020).
Pseint
De acuerdo a Santillán [ CITATION Ivá14 \l 3082 ] PSeInt viene de las palabras ‘PSeudo Intérprete’ y
es una herramienta para asistir a un estudiante en sus primeros pasos en programación. Mediante
un simple e intuitivo pseudo lenguaje en español (complementado con un editor de diagramas de
flujo), le permite centrar su atención en los conceptos fundamentales de la algoritmia
computacional, minimizando las dificultades propias de un lenguaje y proporcionando un entorno
de trabajo con numerosas ayudas y recursos didácticos.
Perfiles
Los perfiles permiten configurar ciertas restricciones en el pseudocódigo. Existen perfiles
predefinidos en el programa, como el Flexible, y otros creados bajo solicitud de ciertas
instituciones como es el caso del perfil “Estricto”. Este perfil obliga a definir o declarar las variables
antes de ser usadas, lo cual resulta ser una buena práctica de programación y evitar posibles
errores de programación.
Para seleccionar el perfil vaya al menú ‘Configurar’, Opciones del lenguaje (perfiles).
Una vez declarada la variable se le puede asignar un valor y también pedir por teclado ese valor
(leer). También existe una palabra clave para mostrar datos por pantalla, esta es Escribir, si se
utiliza Sin Saltar, no se hace un salto de línea después, sino se utiliza se hará un salto de línea
[ CITATION htt21 \l 3082 ].
Identificadores (Keywords)
Identificadores son los nombres que se dan a las constantes simbólicas, variables, funciones,
procedimientos, u otros objetos que manipula el algoritmo. La regla para construir un identificador
establece que:
Existen otras palabras claves que realizan acciones simples, todas ellas junto con las anteriores,
son las llamadas secuenciales. Borrar Pantalla se utiliza para limpiar la pantalla, dejarla vacía
como el que limpia una pizarra. Esperar se utiliza para parar el algoritmo un intervalo de tiempo,
que se indica a continuación junto a la unidad de dicho intervalo, que puede ser segundos y
milisegundos, por ejemplo: Esperar 5 Segundos; Esperar Tecla se utiliza también para parar el
algoritmo hasta que el usuario pulsa una tecla[ CITATION htt21 \l 3082 ].
Operadores
Son símbolos que permiten operar, a las variables de forma aritmética, lógica o de carácter.
^ Exponenciación
* Multiplicación
+ Suma
- Resta
Expresión
Una expresión es una combinación de operadores y operando. Los operandos podrán ser
constantes, variables u otras expresiones y los operadores, aritméticos, relacionales o lógicos.
Orden de precedencia
Se refiere al orden de las operaciones que se dan a lugar en una operación aritmética y lógica.
2
( 5−3 )2
(
Ejemplo: calcular 4 +2
2
−8 )
El orden de las operaciones sería:
1. Paréntesis internos:
2
( 2 )2
( 2
4+
2
−8 )
2. Potencias dentro de los paréntesis:
2
4
( 16+ −8
2 )
3. Las divisiones (o multiplicaciones) dentro de los paréntesis:
( 16+2−8 )2
4. Sumas y restas dentro del paréntesis:
( 10 )2
5. La potenciación:
100.
Operaciones lógicas
Son aquellas que trabajan operadores y operandos de tipo booleano, y cuyo resultado arroja un
valor verdadero o falso (A y B son variables lógicas).
Y (AND) &&
O (OR) ||
NO (NOT) !
XOR ^
XNOR !(A ^ B)
Operaciones relacionales (de comparación)
Comparan dos o más variables, y arrojan como resultado un valor booleano (lógico)
Igual a X=Y X == Y
Diferente de X != Y, X <> Y X != Y
Nota: los operadores relacionales están antecedidos por los operadores lógicos y aritméticos
Ejemplo: realice las operaciones para calcular el valor final de s, a partir de las siguientes
operaciones:
a=10 ;
b=18 ;
s= ( a>b ) O ( 5<a−5 ) ;
s= ( F ) O ( F ) ;
s=F
Referencias
Arriarán, S. S. (2015). Todo sobre sistemas embebidos Arquitectura, programación y diseño de
aplicaciones prácticas con el PIC18F. Lima: Saxo.
Nicolas GOILAV, G. L. (2016). Arduino - Aprender a desarrollar para crear objetos inteligentes. ENI.
Paul Scherz, S. M. (2013). Practical Electronics for Inventors. McGraw-Hill Education books.
Purdum, J. (2015). Beginning C for Arduino: Learn C Programming for the Arduino, Second Edition.
Cincinnati: Technology In Action.