Lo Último en IP@P
- Stellar Data Recovery revoluciona la recuperación de archivos perdidos en discos duros externos
- Goblin Mine: La Estrategia Económica Detrás del Juego de Minería que está Fascinando a Todos
- Estos son los nuevos Cargadores UGREEN: potencia y portabilidad en dos versiones que no te puedes perder
- UGREEN Nexode Pro: El Cargador Ultradelgado que revoluciona la carga de dispositivos móviles
- La computación en la nube está transformando los juegos Online y estas son sus grandes ventajas
Las placas de Arduino se caracterizan por tener una programación bastante simple en el entorno IDE. Esto se debe gracias al uso de los Arrays y Strings, los cuales permiten simplificar un conjunto de variables y de datos diversos.
Si quieres interiorizarte en el mundillo de la programación de Arduino es importante que conozcas estas dos funciones porque te ayudarán a ahorrar tiempo y a no cometer errores.
Para saber más, es importante que continúes leyendo hasta el final. Te explicaremos de qué se tratan estos conceptos y el paso a paso que debes realizar para utilizar una matriz. Comencemos.
¿Qué es un Array en la programación Arduino y para qué sirven?
Te mostraremos a continuación para qué sirven dos elementos muy importantes en la programación de una placa Arduino:
Arrays
Los arrays, vectores o matrices, son contenedores de variables. Es decir, son unas “variables” que contienen a otras para lograr agruparlas. Se llaman además matrices, ya que su disposición representada de forma gráfica es similar a la de una matriz, y también se denominan vectores debido a que las matrices de una única fila o columna reciben ese mismo nombre.
Para conseguir usar un array, existen dos requisitos. El primero es que todas las variables contenidas sean de la misma naturaleza y el segundo es, que no se exceda el límite de variables que puede guardar el programa.
Dicho límite varía según el array, ya que lo predefinimos nosotros mismos en el momento de declararlo (es importante que, cuando creamos un array, reservemos memoria que se ocupa para definir el final de la matriz). Podemos decir entonces que, se trata de un conjunto de variables reunidas bajo un único nombre, pero que dentro de este grupo pueden existir otras distintas, del mismo tipo y ordenadas por un índice. Esto facilita la programación ya que hace al código más simple y claro.
Strings
Las cadenas de caracteres o “strings” son tipos de datos que permiten reunir diversos caracteres. Se diferencian de los “char” porque permiten guardar más de un solo carácter. Es posible almacenar palabras, frases, números, caracteres especiales o la composición de estos elementos.
Por ejemplo:
String str1 = "bienvenido"; String str2 = "bienvenido aspirante"; String str3 = "54321"; String str4 = "bienvenido usuario 54321"; String str5 = "*/-+"; String str6 = "bienvenido usuario ++**54325**++";
Gracias a esta herramienta es viable obtener diferentes resultados de forma más sencilla. Entre ellas se encuentra la concatenación, que consiste en ensamblar dos cadenas de caracteres en una.
Es de gran ayuda cuando se desea confeccionar secuencias de código, mira a continuación:
String str1 = "bienvenido"; String str2 = "usuario"; String str3 = ""; str3 += str1; str3 += " "; str3 += str2;
Si se imprime "str3" el resultado dará "bienvenido usuario". Lo que hicimos fue crear una concatenación del valor "bienvenido" más la variable "usuario", luego de indicar una variable String vacía. Otra de las utilidades que posee son “toUpperCase()” y “toLowerCase()”, las cuales reemplaza todos los caracteres de la cadena por mayúsculas y minúsculas, respectivamente. Resulta además muy práctico para convertir números del sistema decimal a Hexa, octal o binario.
Usaremos 26 a modo de ejemplo:
int num = 26; String hex = String(num, HEX); String bin = String(num, BIN); String oct = String(num, OCT); println(hex); println(bin); println(oct); Al imprimir los resultados darán 1A 11010 32
1A sería el 26 en hexadecimal, mientras que 11010 es el resultado en binario y 32 en sistema octal.
Aprende paso a paso cómo utilizar una matriz o Array al programar con Arduino
Tanto los arrays como los strings son herramientas indispensables que debes aprender a utilizar si deseas programar tu placa Arduino.
Para ello te dejamos estas indicaciones básicas para que comiences:
Declarar
Es importante aclarar que para usar arrays, lo primero que debes hacer es indexar el primer elemento con el número cero. De esta forma ya podemos consultarle y asignarle valores.
Podemos declararlas de cualquiera de las siguientes maneras:
int losEnteros[6]; //declara una matriz de 6 variables de tipo int int losPins[] = {2, 4, 8, 3}; //declara una matriz de 4 variables tipo int float losSensores[5] = {2, 4, -8, 3.8, 2.1, 6}; //declara una matriz de 6 variables tipo float char mensaje[5] = "Saludo"; //declara una matriz de 5 elementos tipo char char mensaje [6] = {'s','a','l','u','d','o'}; //declara una matriz de 6 elementos tipo char int mimatriz[5]; int Pines[] = {2, 4, 8, 3, 6}; int losValores[5] = {2, 4, -8, 3, 2};
Debes tener en cuenta que los arrays char precisan de un carácter extra para identificar el nial del mismo.
Acceder a una matriz
La matriz, como ya dijimos, está indexada desde cero, por lo cual el primer valor se encuentra en el índice 0. Según el ejemplo, losValores[0] será igual a 2 y losValores[1] será 4. Por ello debemos tener cuidado al acceder a la matriz. Si tratamos de acceder más allá del final (usando un índice menor a cero o mayor al tamaño declarado) las ubicaciones de memoria utilizadas para otros fines provocarán errores.
Asignar un valor a una matriz
A su vez, para asignar los valores de un array se utiliza el operador asignador (=), continuando con el ejemplo de la siguiente manera:
losSensores[0] = 10; //asigna 10 al primer elemento de la matriz
x = losSensores[4]; //guarda el valor del quinto elemento de la matriz en la variable x
Recuperar un valor de una matriz
Para recuperar el valor específico de una matriz específica y de acuerdo al ejemplo, solo debemos usar la línea:
x = losValores[4];
Lista de los mejores proyectos Arduino con Arrays que puedes hacer para practicar
Más en Informática
- Careware ¿Qué es, cómo funciona y para qué sirve este tipo de software?
- Visión artificial o Computer Vision ¿Qué es, cómo funciona y para qué sirve esta tecnología?
- Transistor: ¿Qué es, para qué sirve y cuál es su función en un sistema electrónico?
- Extensión de archivo .PHP ¿Qué son y cómo abrir este tipo de archivos?
- Privacidad diferencial ¿Qué es, cómo funciona y cuáles son sus beneficios?
SÍGUENOS EN 👉 YOUTUBE TV
Ahora que conoces de qué tratan estas herramientas, ha llegado el momento de ponerlas en práctica.
Para ello te dejamos estos tres proyectos para que puedas ejercitarte y poner en práctica todo lo aprendido en este post:
Juego de memoria
Se trata de una aplicación lúdica en la cual deberemos memorizar la mayor cantidad de dígitos posibles hasta lograr completar la carga de la “batería”.
En cuanto al hardware necesitaremos:
- Arduino Mega 2560
- Una pantalla de 7 segmentos (similar a los dígitos de las calculadoras).
- Un teclado numérico Arduino del tipo 3 x 4
- Jumpers genéricos
- Un mini display de carga de batería
Luego los conectamos entre sí de la siguiente manera:
- El primer pin del lado izquierdo al pin 8 del Arduino. Los pines de 8 a 2 en la unidad de control Arduino Mega. Según la imagen.
- La pantalla de siete segmentos se conecta a los pines a los pines 35,37,39,41,47,49 y 53.
- La mini pantalla de la batería se conecta a través de los pines DIO a 9 y CLK a 10.
En cuanto al software este es el código:
#include <Teclado.h> #include <TM1651.h> int CLK = 10 ; int DIO = 9 ; Pantalla de batería TM1651 ( CLK , DIO ); const byte FILAS = 4 ; const byte COLS = 3 ; char claves [ FILAS ] [ COLS ] = { { '1' , '2' , '3' }, { '4' , '5' , '6' }, { '7' , '8' , '9' }, { '*' , '0' , '#' } }; byte rowPins [ FILAS ] = { 8 , 7 , 6 , 5 }; byte colPins [ COLS ] = { 4 , 3 , 2 }; Teclado teclado = Teclado ( makeKeymap ( teclas ), rowPins , colPins , FILAS , COLS ); int inicio [ 7 ] = { 39 , 41 , 53 , 49 , 47 , 37 , 35 }; int ugasi [ 7 ] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 }; int jedan [ 7 ] = { 0 , 1 , 1 , 0 , 0 , 0 , 0 }; En t dva [ 7 ] = { 1 , 1 , 0 , 1 , 1 , 0 , 1 }; int tri [ 7 ] = { 1 , 1 , 1 , 1 , 0 , 0 , 1 }; int cetiri [ 7 ] = { 0 , 1 , 1 , 0 , 0 , 1 , 1 }; mascota int [ 7 ] = { 1 , 0 , 1 , 1 , 0 , 1 , 1 }; int sest [ 7 ] = { 0 , 0 , 1 , 1 , 1 , 1 , 1 }; int sedam [ 7 ] = { 1 , 1 , 1 , 0 , 0 , 0 , 0 }; int osam [ 7 ] = { 1 , 1 , 1 , 1 , 1 , 1 , 1 }; int devet [ 7 ] = { 1 , 1 , 1 , 0 , 0 , 1 , 1 }; int nula [ 7 ] = { 1 , 1 , 1 , 1 , 1 , 1 , 0 }; int pom = 0 ; int s [ 50 ]; int k = 0 ; int partija = 0 ; configuración vacía () { Serial . comenzar ( 9600 ); Salida ( inicio ); BatteryDisplay . init (); BatteryDisplay . establecer ( MÁS BRILLANTE ); // BRIGHT_TYPICAL = 2, BRIGHT_DARKEST = 0, BRIGHTEST = 7; BatteryDisplay . marco ( FRAME_ON ); randomSeed ( analogRead ( 0 )); while ( partija ! = 8 ) { BatteryDisplay . displayLevel ( partija ); s [ k ] = aleatorio ( 0 , 10 ); WriteDisplay ( inicio , ugasi ); retraso ( 200 ); ispisi ( s [ k ]); if ( Konacno ( k ) ! = 0 ) { WriteDisplay( inicio , ugasi ); romper ; } partija ++ ; k ++ ; } // mientras finaliza } // finalización de la configuración vacío bucle () {} int Konacno ( int k ) { int pom= 0 ; mientras ( pom <= k ) { char key = teclado . getKey (); while ( ! tecla ) { tecla = teclado . obtener la clave (); } if ( s [ pom ] ! = K ( tecla )) return - 1 ; pom ++ ; retraso ( 400 ); } return 0 ; } // fin de konacno int K ( Char clave ) { if ( key == '1' ) return 1 ; else if ( clave == '2' ) return 2 ; else if ( clave == '3' ) return 3 ; else if ( clave == '4' ) return 4 ; else if ( clave == '5' ) return 5 ; else if ( clave == '6' ) volver 6 ; else if ( clave == '7' ) return 7 ; else if ( clave == '8' ) return 8 ; else if ( clave == '9' ) return 9 ; } }
Knight Rider, el coche fantástico o el auto fantástico
Si estos nombres no te suenan a ti, de seguro que si a tus padres o incluso abuelos. Se trata de un código que hace comportar a una serie de leds de la misma manera que lo hacía uno de los personajes principales de esta serie de los ochenta.
Necesitaremos:
- 6 LED
- 6 resistencias de 220 Ohm
- Placa Arduino UNO
- Jumpers genéricos
Los leds se conectan a los pines del 2 al 7 usando en cada jumper una resistencia. Te mostraremos además 3 formas distintas de programar este efecto visual. En el primero sólo usaremos “digitalWrite” (pinNum, HIGH / LOW) y “delay” (tiempo). En el segundo lo haremos a través de la construcción del tipo “for” que hará lo mismo, pero en un código con menos líneas.
Por último, el código que realizará este efecto de manera más suave:
/* Knight Rider 1 */ int pin2 = 2; int pin3 = 3; int pin4 = 4; int pin5 = 5; int pin6 = 6; int pin7 = 7; int timer = 100; void setup(){ pinMode(pin2, OUTPUT); pinMode(pin3, OUTPUT); pinMode(pin4, OUTPUT); pinMode(pin5, OUTPUT); pinMode(pin6, OUTPUT); pinMode(pin7, OUTPUT); } void loop() { digitalWrite(pin2, HIGH); delay(timer); digitalWrite(pin2, LOW); delay(timer); digitalWrite(pin3, HIGH); delay(timer); digitalWrite(pin3, LOW); delay(timer); digitalWrite(pin4, HIGH); delay(timer); digitalWrite(pin4, LOW); delay(timer); digitalWrite(pin5, HIGH); delay(timer); digitalWrite(pin5, LOW); delay(timer); digitalWrite(pin6, HIGH); delay(timer); digitalWrite(pin6, LOW); delay(timer); digitalWrite(pin7, HIGH); delay(timer); digitalWrite(pin7, LOW); delay(timer); digitalWrite(pin6, HIGH); delay(timer); digitalWrite(pin6, LOW); delay(timer); digitalWrite(pin5, HIGH); delay(timer); digitalWrite(pin5, LOW); delay(timer); digitalWrite(pin4, HIGH); delay(timer); digitalWrite(pin4, LOW); delay(timer); digitalWrite(pin3, HIGH); delay(timer); digitalWrite(pin3, LOW); delay(timer); } /* Knight Rider 2 */ int pinArray[] = {2, 3, 4, 5, 6, 7}; int count = 0; int timer = 100; void setup(){ // we make all the declarations at once for (count=0;count<6;count++) { pinMode(pinArray[count], OUTPUT); } } void loop() { for (count=0;count<6;count++) { digitalWrite(pinArray[count], HIGH); delay(timer); digitalWrite(pinArray[count], LOW); delay(timer); } for (count=5;count>=0;count--) { digitalWrite(pinArray[count], HIGH); delay(timer); digitalWrite(pinArray[count], LOW); delay(timer); } } /* Knight Rider 3 */ int pinArray[] = {2, 3, 4, 5, 6, 7}; int count = 0; int timer = 30; void setup(){ for (count=0;count<6;count++) { pinMode(pinArray[count], OUTPUT); } } void loop() { for (count=0;count<5;count++) { digitalWrite(pinArray[count], HIGH); delay(timer); digitalWrite(pinArray[count + 1], HIGH); delay(timer); digitalWrite(pinArray[count], LOW); delay(timer*2); } for (count=5;count>0;count--) { digitalWrite(pinArray[count], HIGH); delay(timer); digitalWrite(pinArray[count - 1], HIGH); delay(timer); digitalWrite(pinArray[count], LOW); delay(timer*2); } }
Reloj Binario
Un reloj binario es un artefacto que visualiza el tiempo (que es sexagesimal) en una expresión binaria compuesta, es decir de seis dígitos (2 para la hora, 2 para los minutos y 2 para los segundos).
Es realmente sencillo de realizar, para comenzar necesitaremos:
- 1 Protoboard
- 6 leds Color Rojo
- 6 leds Color Verde
- 5 leds Color Amarillo
- 17 resistencias de 330 ohms
- 17 jumpers
- Arduino UNO
Con todo lo aprendido, podrás dilucidar todos los arrays que se presentan en el código necesario para poner en funcionamiento este reloj.
Echa un vistazo:
int ledPinsSec[] = {2, 3, 4, 5, 6, 7}; int ledPinsMin[] = {8, 9, 10, 11, 12, 13}; int ledPinsHr[] = {14, 15, 16, 17, 18, 19}; int secSize =sizeof(ledPinsSec) / sizeof(int); int minSize = sizeof(ledPinsMin) / sizeof(int); int hourSize = sizeof(ledPinsHr) / sizeof(int); int seconds = 30; int minutes = 30; int hours = 15; void setup() { begin(9600); //Obtiene el número de elementos de un arreglo println(sizeof(ledPinsSec)); for(int i = 0; i< secSize;i++) { pinMode(ledPinsSec[i], OUTPUT); } for(int i = 0; i< minSize;i++) { pinMode(ledPinsMin[i], OUTPUT); } for(int i = 0; i< hourSize;i++) { pinMode(ledPinsHr[i], OUTPUT); } } void loop() { seconds++; if(seconds > 59) { seconds = 0; minutes++; if(minutes > 59) { minutes = 0; hours++; if(hours > 23) { hours = 0; } } } //Serial.println((char) seconds); print("Hours: "); print(hours); print(" Minutes: "); print(minutes); print(" Seconds: "); println(seconds); DisplaySeconds(); DisplayMinutes(); DisplayHours(); delay(1000); /* DisplaySeconds(); DisplayMinutes(); DisplayHours();*/ } void DisplaySeconds() { for(int i = secSize - 1; i>= 0; i--) { int currentSecond = bitRead(seconds, i); digitalWrite(ledPinsSec[i], currentSecond); } } void DisplayMinutes() { for(int i = minSize - 1; i>= 0; i--) { int currentMinute = bitRead(minutes, i); digitalWrite(ledPinsMin[i], currentMinute); } } void DisplayHours() { for(int i = hourSize - 1; i>= 0; i--) { int currentHour = bitRead(hours, i); digitalWrite(ledPinsHr[i], currentHour); } }