En esta entrada del blog voy a publicar una especia de «chuleta» o ayuda a tener en cuenta a la hora de empezar a programar. Aquí encontrarás la sintaxis de programación del lenguaje Arduino.
Además voy a intentar que quede lo más claro posible separándola por categorías y además daré un ejemplo para cada caso.
Suscríbete al blog para acceder a mi ebook gratuito de robótica con Arduino y recibir contenido relacionado cada semana.
Por otro lado recomiendo que realicéis algún curso básico de C++ para poder entender y comprender esto que os dejo de una mejor forma.
Índice de contenidos
Operadores y comparadores
Comparadores
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//x igual a y x == y //x distinto de y x != y //x menor que y x < y //x mayor que y x > y //x menor o igual que y x <= y //x mayor o igual que y x >= y |
Operadores aritméticos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//operador de asignación a = b //adición a + b //substracción a - b //multiplicación a * b //división a / b //modulo a % b |
Operadores de bits
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//and binario a & b //or binario a | b //xor binario a ^ b //not binario a ~ b //desplazamiento a izquierda a << b //desplazamiento a derecha a >> b |
Operadores compuestos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
//incremento a++ //decremento a-- //adición compuesta a += b //substracción compuesta a -= b //multiplicación compuesta a *= b //división compuesta a /= b //and compuesto a &= b //or compuesto a |= b |
Operadores booleanos
1 2 3 4 5 6 7 8 |
//not !a //and a && b //or a || b |
Operadores de acceso
Suscríbete al blog para acceder a mi ebook gratuito de robótica con Arduino y recibir contenido relacionado cada semana.
1 2 3 4 5 |
//operación indirección *variable //operación dirección &variable |
Declaración y conversión de tipos de variables
1 2 |
//tipo vacio (solo para funciones) void |
Booleanos
1 2 |
//booleano, false o true boolean = false; |
Enteros
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/entero, 16 bits, de -32,768 a 32,767 int var = 100; //entero, 16 bits, de 0 a 65535 (excepto en Due, donde son 32 bits) unsigned int var = 100; //entero, 16 bits, de 0 a 65535 short var = 100; //entero, 32 bits, de -2,147,483,648 a 2,147,483,647 long var = 100000L; //entero, 32bits, de 0 a 4,294,967,295 unsigned long var = 100000L; |
Coma flotante
1 2 3 4 5 |
//coma floante, 32 bits, de -3.4028235E+38 a 3.4028235E+38. Precision 6 digitos float var = 1.117; //idéntico a float, excepto en Arduino Due donde es flotante de 64 bits double var = 1.117; |
Bytes
Suscríbete al blog para acceder a mi ebook gratuito de robótica con Arduino y recibir contenido relacionado cada semana.
1 2 3 4 5 |
//8 bits, de 0 a 255 byte var = B10010; //16bits, sin signo, de 0 a 65535 word var = 10000; |
Caracteres
1 2 3 4 5 |
//8 bits, de -128 a 127 char var = 'A'; //8 bits, de 0 a 255 unsigned char var = 240; |
Conversión entre variables
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//convierte a char char(variable); //convierte a byte byte(variable); //convierte a int int(variable); //convierte a word word(variable); //convierte a long long(variable); //convierte a float float(variable); |
Cualificadores de variables
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
//STATIC //Variables visibles únicamente en el interior de una función, //y cuyo valor se mantiene entre llamadas a la misma. static int variable; //CONST //Variables cuyo valor no puede ser redefinido tras la inicialización const float pi = 3.14; //VOLATILE //Variables en las que se indica al compilador que no guarde en los registros //del microprocesador, sino que fuerza la actualización en memoria. Esto se //hace cuando existe la posibilidad de que el valor de la variable sea //modificado por otro proceso que se ejecuta concurrentemente con el actual //(por ejemplo cuando se emplean hilos o interrupciones) volatile int variable = LOW; |
Vectores
Creación de vectores
1 2 3 4 5 6 7 8 |
//declarar vector int miArray[5]; //iniciar vector int miArray[] = {2, 4, 8, 3, 6}; //declarar e iniciar vector int miArray[5] = {2, 4, -8, 3, 2}; |
Manipulación de vectores
1 2 3 4 5 |
//asignar valor a elemento del vector miArray[0] = 10; //obtener valor de elemento del vector x = miArray[4]; |
Cadenas de texto
Textos como vectores de caracteres
1 2 3 4 5 6 7 8 9 10 |
char cadena1[15]; char cadena2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'}; char cadena3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'}; char cadena4[ ] = "texto"; char cadena5[8] = "texto"; char cadena6[15] = "texto"; //vector de cadenas char* cadenaArray[]={"Cadena 1", "Cadena 2", "Cadena 3", "Cadena 4", "Cadena 5", "Cadena 6"}; |
Textos como objeto string
1 2 3 4 5 6 7 8 9 10 11 |
// literal de cadena de texto String txtMsg = "Hola"; // convirtiendo un char a String String txtMsg = String('a'); // convirtiendo un literal a String String txtMsg = String("Texto"); // concatenando dos literales a String String txtMsg = String("texto1" + "texto2"); |
Condicionales
Condicional abreviado
1 |
condition ? true : false; |
Condicional if
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
if (variable < 10) { // accion A } if (variable < 10) { // accion A } else { // accion B } if (variable < 10) { // accion A } else if (variable >= 100) { // accion B } else { // accion C } |
Condicional switch / case of
1 2 3 4 5 6 7 8 9 10 |
switch (variable) { case 1: // accion A break; case 2: // accion B break; default: // caso por defecto (opcional) } |
Bucles
Bucle for
1 2 3 |
for (int i=0; i <= 100; i++){ // accion } |
Bucle while
1 2 3 4 5 6 |
variable = 0; while(variable < 100){ // accion variable++; } |
Bucle do while
1 2 3 4 5 |
do { //accion variable++; } while (variable < 100); |
Funciones matemáticas
Funciones de rango
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//devuelve mínimo entra a y b min(a,b); //devuelve máximo entra a y b max(a,b); //devuelve valor absoluto de a abs(a); //devuelve x restringido a (a,b) constrain(x, a, b); //interpola linealmente y entre x1,y1 x2,y2 map(x, x1, x2, y1, y2); |
Potenciación
1 2 3 4 5 |
//devuelve a^b (ambos tipo float) pow(a,b); //devuelve la raiz cuadrada de a sqrt(a); |
Números aleatorios
1 2 3 4 5 |
//inicializa la semilla del generador de numeros pseudo aleatorios randomSeed(semilla); //devuelve un numero aleatorio entre a y b (ambos tipo long) random(a, b); |
Trigonometría
1 2 3 4 5 6 7 8 |
//devuelve el seno de a (a tipo float y en radianes) sin(a); //devuelve el coseno de a (a tipo float y en radianes) cos(a); //devuelve la tangente de a (a tipo float y en radianes) tan(a); |
Funciones de bits y bytes
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
//devuelve el byte menos signiticativo de una palabra o variable. lowByte(variable); //devuelve el byte más significativo de una palabra //(o el segundo byte menos significativo en variables mayores) highByte(variable); //devuelve el bit n de una variable x //(siendo el bit 0 el menos significativo) bitRead(x, n); //escribe el bit n de la variable x con el valor b //(siendo el bit 0 el menos significativo) bitWrite(x, n,b ); //pone a 1 el bit n de la variable x bitSet(x, n); //pone a 0 el bit n de la variable x bitClear(x, n); //obtiene el valor del bit n (idéntico a 2^n) bit(n); |
Funciones de textos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
//delvuelve el caracter en la posición 3 (idéntico a txtMsg[3];) txtMsg.charAt(3); //sustituye el caracter en la posición 3 por "A" (idéntico a txtMsg[3]="A";) txtMsg.setCharAt("A", 3); //concatena texto 1 y texto 2 (idéntico a texto1=texto1+texto2;) texto1.concat("texto2"); //devuelve la longitud de la cadena txtMsg.length(); //devuelve la cadena convertida en minúsculas txtMsg.toLowerCase(); //devuelve la cadena convertida en mayúsculas txtMsg.toUpperCase(); //elimina espacios y carácteres incorrectos txtMsg.trim(); //devuelve la cadena de texto como entero txtMsg.toInt(); |
Comparación
1 2 3 4 5 6 7 8 9 |
//compara dos cadenas. Devuelve 1 si texto1 es mayor que texto2, //0 si son iguales, y -1 en caso contrario texto1.compareTo(texto2); //compara si dos cadenas son iguales (idéntico a texto1==texto2) texto1.equals(texto2); //compara si dos cadenas son iguales, ignorando mayúsculas y minúsculas texto1.equalsIgnoreCase(texto2); |
Subcadenas
1 2 3 4 5 6 7 8 |
//devuelve una subcadena de la posicion 3 a la 10 txtMsg.substring(3, 10); //comprueba si la cadena empieza por "texto", con offset 3 txtMsg.startsWith("texto", 3); //comprueba si la cadena empieza por "texto", con offset 3 txtMsg.endsWith("texto"); |
Búsqueda y sustitución
1 2 3 4 5 6 7 8 9 10 |
//devuelve el índice de la primera ocurrencia de 'A', //a partir de la posición offset txtMsg.indexOf('A', offset); //devuelve el índice de la última ocurrencia de 'A' //previa a la posición offset txtMsg.lastIndexOf('A', offset); //sustituye las ocurrencias de "texto1" por "texto2" txtMsg.replace("texto1", "texto2"); |
Funciones de usuario
Variables globales
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
int option=1; int cambiar(){ option=4; } void setup(){ Serial.begin(9600); } void loop(){ cambiar(); Serial.print(option); //muestra 4 delay(10000); } |
Paso de parámetros por referencia
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
int cambiar(int &var){ var=4; } void setup(){ Serial.begin(9600); } void loop(){ int option=1; cambiar(option); Serial.print(option); //muestra 4 delay(10000); } |
Paso de parámetros por puntero
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
int cambiar(int* var){ *var=4; } void setup(){ Serial.begin(9600); } void loop(){ int option=1; cambiar(&option); Serial.print(option); //muestra 4 delay(10000); } |
Devolución de valores
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
int cambiar(){ int var=4; return var; } void setup(){ Serial.begin(9600); } void loop(){ int option=1; option=cambiar(); Serial.print(option); //muestra 4 delay(10000); } |
Tipos de datos avanzados
Enumeraciones
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//declaracion enum miEnumeracion { opcion1, opcion2, opcion3 }; //ejemplo de uso miEnumeracion variable = opcion2; if (variable==opcion2){ //accion } |
Estructuras
1 2 3 4 5 6 7 8 9 10 11 12 |
//declaracion struct miEstructura { int campo1; int campo2; char campo3; }; //ejemplo de uso struct miEstructura variable; variable.campo1=10; |
Definición de tipos de datos de usuario
1 2 3 4 5 6 7 |
//declaraciones typedef int nuevotipo; typedef enum miEnumeracion nuevotipo; typedef struct miEstructura nuevotipo; //ejemplo de uso nuevotipo variable; |
Clases
Ejemplo de uso de clase
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
class MiRobot; //definicion de clase ejemplo class MiRobot { public: void saludar(); //muestra "Hola" void incCont(); //incrementa contador int getCont(); //devuelve contador void sayCont(); //muestra valor contador void setCont(int); //inicializa contador a un valor private: int cont=0; //variable contador privada }; //muestra "Hola" void MiRobot::saludar(){ Serial.println("Hola"); } void MiRobot::incCont(){ this->cont++; } //devuelve contador int MiRobot::getCont(){ return this->cont; } //muestra valor contador void MiRobot::sayCont(){ Serial.println(this->cont); } //inicializa contador a un valor void MiRobot::setCont(int _cont){ this->cont=_cont; } MiRobot robot; void setup(){ Serial.println("Iniciando"); Serial.begin(9600); robot.saludar(); //se muestra hola } void loop(){ robot.incCont(); //se incrementa el contador robot.sayCont(); //muestra el valor delay(1000); } |
Suscríbete a mi canal de YouTube gratis
para recibir más contenido gratis en vídeo cada semana.