Llévate los mejores 📘EBOOKS📘 ➡ ENTRA AQUÍ

Arrays ¿Qué son, para qué sirven y cuál es su importancia en la programación Arduino?

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

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

Aprende paso a paso cómo utilizar una matriz o Arrays 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



"ACTUALIZADO ✅ ¿Quieres conocer más acerca de los Arrays en Arduino y cómo funcionan? ⭐ ENTRA AQUÍ ⭐ y Aprende Todo ¡DESDE CERO!"
Ebooks de IPAP
Ebooks IPAP

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

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:

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

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);

}

}
Ebooks de IPAP
Ebooks IPAP

Si te quedaste con alguna duda, déjalas en los comentarios, te contestaremos lo antes posible, además seguro que será de gran ayuda para más miembros de la comunidad. Gracias! 😉

Más Trucos y Consejos cada día ¡Apúntate Aquí!


He leído y acepto los términos y condiciones

Temas

Autor: Félix Albornoz

Llevo más de 20 años trabajando en el sector tecnológico ayudando a empresas y usuarios a desarrollarse y formarse en este campo. Siempre aprendiendo cosas nuevas.

Recomendadas

Relacionadas


Populares


Deja un comentario

  ◀ Acepto los términos de privacidad