Funciones que se aplican a números byte, int, long o float.
Calcula el mínimo de dos números para cualquier tipo de datos devolviendo el número más pequeño.
min(3,6); //3
Calcula el máximo de dos números para cualquier tipo de datos devolviendo el número mayor de los dos.
max(3,6); //6
Calcula el valor absoluto de un número.
abs(2-6); //4 abs(n++); //Dara resultados raros, evitalo
Calcula el cuadrado de un número, osea el número multiplicado por sí mismo.
sq(3); //9
Calcula el valor de un número elevado a una potencia. Se puede usar para elevar un número a una potencia fraccionaria. Esto es útil para generar un mapeo exponencial de valores o curvas.
pow(base,exponente);
pow(3,3); //81
Calcula la raíz cuadrada de un número. retorna un float.
sqrt(9); //3
Restringe un número para estar dentro de un rango.
constrain(variable,min,max);
int num; constrain(num,10,150); //limita el rango entre 10~150
Reasigna un número de un rango a otro. Es decir, un rango se correlacionaría con otro, pero no restringe dentro del rango..
map(variable,min1,max1,min2,max2);
Esta función usa matemática entera, pro lo que no produce fracciones
int x; map(x, 0, 1023, 0, 255); map(x, 1, 50, 50, 1); map(x, 1, 50, 50, -100);
La función random devuelve un número aleatorio entero de un intervalo de valores especificado entre los valores min y max.
Establece un valor, o semilla, como punto de partida para la función random().
Las funciones trigonométricas de seno, coseno y tangente<./p>
Calcula el seno de un ángulo (en radianes). El resultado será un numero tipo float entre -1 y 1.
const float pi = 3.14; void setup(){ Serial.begin(9600); } void loop(){ for (float n=0; n<2*pi; n += 0.01){ Serial.println(sin(n)); } }
Copia este boceto y mira el resultado en el Serial Plotter.
El angulo en radianes como el resultado son un numero tipo float.
Calcula el coseno de un ángulo (en radianes). El resultado será entre -1 y 1.
const float pi = 3.14; void setup(){ Serial.begin(9600); } void loop(){ for (float n=0; n<2*pi; n += 0.01){ Serial.println(cos(n)); } }
Calcula la tangente de un ángulo (en radianes). El resultado será entre infinito negativo e infinito positivo.
const float pi = 3.14; void setup(){ Serial.begin(9600); } void loop(){ for (float n=0; n<2*pi; n += 0.01){ Serial.println(tan(n)); } }
El angulo en radianes como el resultado son un numero tipo float.
String() construye una instancia de la clase String. Existen múltiples versiones que construyen cadenas de diferentes tipos de datos (es decir, los formatea como secuencias de caracteres), que incluyen:
La construcción de una cadena a partir de un número da como resultado una cadena que contiene la representación ASCII de ese número. El valor predeterminado es base diez, por lo que:
String(valor); String(valor, base); String(valor, decimales);
String cadena = String(13); //"13" String cadena = String(13, BIN); //"1101" String cadena = String(13, HEX); //"D" String pi = String(3.1426, 4);
Obtener una subcadena de una cadena. El índice inicial es inclusivo (el carácter correspondiente se incluye en la subcadena), pero el índice final opcional es exclusivo (el carácter correspondiente no está incluido en la subcadena). Si se omite el índice final, la subcadena continúa hasta el final de la cadena.
String.substring(cadena); String.substring(from, to);
texto = "HTTP / 1.1 200 OK"; if (texto.substring(9) == "200 OK") { Serial.println("Obtuve un OK del servidor"); }
Agrega el parámetro a una Cadena. Devuelve true si lo logra y false si no lo logra.
String.concat(parametros);
Los parametros pueden ser: String, char, int, unsigned int, long, unsigned long, fload o double.
Accede a un carácter particular de la Cadena.
String.charAt(n);
Compara dos cadenas. La comparación distingue entre mayúsculas y minúsculas, lo que significa que la cadena "hola" no es igual a la cadena "HOLA".
String.compareTo(cadena);
Compara dos cadenas para la igualdad. La comparación distingue entre mayúsculas y minúsculas, lo que significa que la cadena "hola" no es igual a la cadena "Hola". Es lo mismo que usar ==.
String.equals(cadena);
Aqui unos ejemplos:
string texto = "Apuntes de Arduino"; texto.equals("Arduino"); //false if (text1.equals (texto2)) {} //Es lo mismo que: if (texto1 == texto2) {}
Devuelve la longitud del Strng en caracteres. Tenga en cuenta que esto no incluye un carácter nulo final.
String.length();
Aqui unos ejemplos:
string texto = "Apuntes de Arduino"; texto.length(); //18
Eliminar todos los espacio en blanco inicial y final. A partir de 1.0, trim() modifica la cadena en lugar de devolver una nueva.
String.trim(cadena);
Obtenga una versión en minúsculas de un String. A partir de 1.0, toLowerCase () modifica la cadena en lugar de devolver una nueva.
String.toLowerCase(cadena);
Obtenga una versión en mayúscula de una cadena. A partir de 1.0, toUpperCase () modifica la cadena en lugar de devolver una nueva.
String.toUpperCase(cadena);
La función String.replace() te permite reemplazar todas las instancias de un personaje dado por otro carácter. También puede usar String.replace() para reemplazar subcadenas de String con una subcadena diferente.
String.repace(variable,cadena)
Modifique en su lugar una cadena que elimine los caracteres del índice proporcionado al final de la cadena o del índice proporcionado para indexar más el recuento.
String.remove(indice); String.remove(indice, conteo);
Localiza un carácter o cadena dentro de otra cadena. De forma predeterminada, busca desde el comienzo de la Cadena, pero también puede comenzar desde un índice dado, lo que permite la localización de todas las instancias del carácter o Cadena.
String.indexOf(val); String.indexOf(val, from);
Localiza un carácter o cadena dentro de otra cadena. De forma predeterminada, busca desde el final de la Cadena, pero también puede trabajar hacia atrás desde un índice dado, lo que permite la localización de todas las instancias del carácter o Cadena.
String.lastIndexOf(val); lastIndexOf(val, from);
Comprueba si String inicia con los caracteres de otra cadena.
String.startsWith(cadena[,desplazamiento]);
La funcion startsWith() puede usarse para buscar un encabezado de mensaje particular o ambién se pueden usar con un desplazamiento para buscar una subcadena que comience en una posición particular.
texto = "HTTP / 1.1 200 OK"; if (texto.startsWith("200 OK", 9)) { Serial.println("Obtuve un OK del servidor"); }
Precaución: si busca una posición que esté fuera del rango de la cadena, obtendrá resultados impredecibles. Por ejemplo, en el ejemplo anterior, texto.startsWith("200 OK", 16) no verificaría con la cadena en sí, pero lo que está en la memoria está más allá. Para obtener los mejores resultados, asegúrese de que los valores de índice que usa startsWith() y endsWith() están entre 0 y el String.length().
Comprueba si String termina con los caracteres de otra cadena.
String.endsWith(cadena);
La funcion endsWith() puede usarse para buscar un solo carácter al final de una cadena.
texto = "HTTP / 1.1 200 OK"; if (texto.endsWith("200 OK")) { Serial.println("Obtuve un OK del servidor"); }
Copia los caracteres de la cadena al buffer provisto.
String.getBytes(buf, len);
String n = "12345"; int x = n.toInt();
String n = "123.45"; float x = n.toFloat();
Funciones qu ete permiten consultar el tipo de datos o variable.
Analiza si una variable tipo char es una letra. Devuelve true si la variable contiene una letra.
isAlpha(variable);
if (isAlpha(this)){ Serial.println("Si es una letra"): }
Analiza si char es un carácter alfanumérico. Devuelve verdadero si es alfanumerico.
isAlphaNumeric(caracter);
Analiza si char es un carácter ASCII. Devuelve verdadero si es ASCII.
isAscii(variable);
Analiza si char es un carácter de control.
isControl(variable);
Analiza si char es un dígito.
isDigit(variable);
Analiza si char es un carácter grafico.
isGraph(variable);
Analiza si char es un digito hexadecimal válido. Es decir 0~9 y A~F
isHexadecimalDigit(variable);
Analiza si char es un carácter de puntuación. Es decir , . ;
isPunct(variable);
Analiza si char es un carácter imprimible.
isPrintable(variable);
Analiza si char es un carácter en minúsculas .
isLowerCase(variable);
Analiza si char es un carácter en mayuscula.
isUpperCase(variable);
Analiza si char es un carácter espaciador.
isSpace(variable);
Analiza si char es un carácter un espacio en blanco.
isWhiteSpace(variable);
En Arduino tenemos algunas funciones que detienen la ejecución del boceto. Tenga mucho cuidado ya que durante ese tiempo el uC no hace nada mas que esterar se cumpla el retardo.
Pausa el programa por la cantidad de milisegundos especificado como parámetro. No devuelve nada.
delay(ms);
ms es un unsignet long.
delay(1000); //1 segundo
Si bien es fácil crear un LED parpadeante con la funcion delay() y muchos bocetos lo usan, también es usado como antirrebote de pulsadores, el uso de delay() en un boceto tiene inconvenientes importantes. Ninguna otra lectura o manipulacion de de puerto, cálculos matemáticos puede ejecutarse durante la función de retardo, por lo que, en efecto, detiene la mayoría de otras actividades. Para obtener enfoques alternativos para controlar el tiempo, consulte las funciónes millis() o micros().
Los programadores más conocedores generalmente evitan el uso de la funcion delay() de más de 10 de milisegundos, a menos que el boceto de Arduino sea muy simple.
Pausa el programa por la cantidad de microsegundos especificado como parámetro. Actualmente, el valor más grande que producirá un retraso preciso es 16383.
delayMicroseconds(us);
us es un unsignet long.
delayMicroseconds(1000); //1 ms
Devuelve la cantidad de microsegundos desde que la placa Arduino comenzó a ejecutar el programa actual. Este número se desbordará (volverá a cero), después de aproximadamente 70 minutos. En las placas Arduino de 16 MHz (por ejemplo, Duemilanove y Nano), esta función tiene una resolución de cuatro microsegundos (es decir, el valor devuelto siempre es un múltiplo de cuatro). En placas Arduino de 8 MHz (por ejemplo, el LilyPad), esta función tiene una resolución de ocho microsegundos.
unsigned long tiempo; tiempo = micros();
Tenga cuidado de no intentar hacer operaciones matemáticas con números int porque serán muy pequeños.
Devuelve la cantidad de milisegundos desde que la placa Arduino comenzó a ejecutar el programa actual. Este número se desbordará (volverá a cero), después de aproximadamente 50 días.
unsigned long tiempo; tiempo = millis();
Tenga cuidado de no intentar hacer operaciones matemáticas con números int porque serán muy pequeños.
Estas funciones están disponibles si añades la librería Time.h
Funciones que involucran bits y bytes.
Calcula el valor del bit especificado. Recuerda que es 2n, es decir el bit 0 es 1, el bit 1 es 2, el bit 2 es 4, etc.).
bit(n);
Lee un bit de una variable numerica. Devuelve 0 o 1.
bitRead(varible,n);
Borra (pone a 0) un bit de una variable numérica. NO devuelve nada.
bitClear(varible,n);
Establece (pone a 1) un bit de una variable numerica. NO devuelve nada.
bitSet(varible,n);
Escribe un bit en la variable numerica. NO devuelve nada.
bitWrite(varible,n,bit);
Extrae el byte de orden superior (extremo) de una palabra (o el segundo byte más bajo de un tipo de datos más grande). Devuelve un byte.
highByte(varible);
Extrae el byte de orden inferior (más a la derecha) de una variable (por ejemplo, una palabra). Devuelve un byte.
lowByte(varible);
Funciones que convierten un tipo de dato en otro.
Convierte un valor en un dato tipo byte. Retorna un byte.
byte(valor);
Convierte un valor en un dato tipo int. Retorna un int.
int(valor);
Convierte un valor en un dato tipo float. Retorna un long.
long(valor);
Convierte un valor a un dato tipo float. Retorna un float.
float(valor);
Convierte un valor a un dato tipo char. Retorna un char.
char(valor);
Convierte un valor a un dato tipo word. Retorna un word.
word(valor); word(izq,der);
Convierte una cadena válida en un entero. La cadena de entrada debe comenzar con un número entero. Si la cadena contiene números no enteros, la función dejará de realizar la conversión.
Funciones para manipular otras cosas en Arduino.
Genera una onda cuadrada de la frecuencia especificada (y un ciclo de trabajo del 50%) en un pin. Se puede especificar una duración, de lo contrario, la ola continúa hasta que se llame a noTone(). El pin se puede conectar a un zumbador piezoeléctrico u otro altavoz para reproducir tonos. Solo se puede generar un tono a la vez. Si ya se está reproduciendo un tono en un pin diferente, la llamada a tono() no tendrá efecto. Si el tono se reproduce en el mismo pin, la llamada establecerá su frecuencia.
El uso de la función tone() interfiere con las salida PWM de los pines 3 y 11. No es posible generar todos inferiores a 31 Hz.
tone(pin, frecuencia); tone(pin, frecuencia, duración);
La frecuencia sera un unsigned int y la duración unsigned long. Si desea reproducir diferentes tonos en varios pines, debe llamar a la función noTone() a un pin antes de llamar a un nuevo tone() en el siguiente pin.
Detiene la generación de una onda cuadrada activada por la función tone(). No tiene efecto si no se genera ningún tono.
noTone(pin);
Si desea reproducir diferentes tonos en varios pines, debe llamar a la función noTone() a un pin antes de llamar a un nuevo tone() en el siguiente pin.
Lee un pulso (HIGH o LOW) en un pin y devuelve la duración del pulso en microsegundos o 0 si no se inicia ningún pulso dentro de un tiempo de espera especificado. La función pulseIn() espera que el pin pase a HIGH, inicia el cronometraje, luego espera que el pin pase a LOW y detiene el cronometraje. Devuelve la longitud del pulso en microsegundos o 0 si el pulso no se completa dentro del tiempo de espera determinado con "espera".
pulseIn(pin, valor); pulseIn(pin, valor, espera);
Valor es el tipo de pulso a identificar: HIGH o LOW. Espera es el numero de us que espera el pulso. El predeterminado es 1 segundo.
Funciona bien con pulsos desde 10 us a 3 min de duración.
insigned long duracion: void setup(){ pinMode(7, INPUT); } void loop(){ duracion = pulseIn(7, HIGH); }
Desplaza en un byte de datos un bit cada vez. Comienza a partir del bit más significativo (más a la izquierda) o menos significativo (más a la derecha). Para cada bit, el pin de reloj pasa a nivel alto, el siguiente bit se lee de la línea de datos y a continuación el pin de reloj pasa a nivel bajo. Retorna el byte leido.
byte x = shiftIn(dataPin, clockPin, bitOrder);
En dataPin pondrás el puerto a leer, el clockPin es el pin que comandara el cambio (reloj) y bitOrder puede ser MSBFIRST (Primero el bit más significativo) o LSBFIRST (Primero el bit menos significativo).
Si vamos a interactuar con un dispositivo que está sincronizado por flancos de subida (rising)), necesitamos asegurarnos de que el pin de reloj está en estado LOW antes de la primera llamada a shiftIn() con una llamada a digitalWrite(pinReloj, LOW).
Esta es una aplicación por software; Arduino también proporciona un bus SPI que es la implementación por hardware, más rápida, pero sólo funciona en pines específicos.
Desplaza en un byte de datos un bit a cada vez. Comienza a partir del bit más significativo (más a la izquierda) o menos significativo (más a la derecha). Cada bit se escribe a su vez en un pin de datos, después de lo cual un pulso de reloj se activa (pasa a nivel alto, y a continuación, a nivel bajo) para indicar que el bit está disponible.
byte x = shiftOut(dataPin, clockPin, bitOrder, valor);
si estamos conectados con un dispositivo que está sincronizado por flancos de subida (rising), necesitamos asegurarnos de que el pin de reloj está a nivel bajo antes de llamar a la funcion shiftOut(), por ejemplo, con una llamada a digitalWrite(pinReloj, LOW).
Los dataPin y clockPin deben estar ya configurados como salida con pinMode(). La funcion shiftOut() escribe en la salida 1 byte (8 bits) por lo que requiere una operación de dos pasos para valores de salida mayores que 255.
int latchPin = 8; int clockPin = 12; int dataPin = 11; void setup() { pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { for (int j=0; j<256; j++) { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, j); //devuelve el latch pin a nivel alto indicando que ya no necesita escuchar la información digitalWrite(latchPin, HIGH); delay(1000); } }
Devuelve el número de bytes de una variable o el número de bytes ocupados por una matriz. Acepta cualquier tipo: byte, int, float.
sizeof(variable);
Esta funcion es útil para trabajar con matrices o datos tipo string donde es conveniente ser capaz de cambiar el tamaño de la matriz sin romper otras partes del programa.
char matriz[]="Esto es una matriz"; void setup(){ Serial.begin(9600); } void loop(){ if (int n=0; n<sizeof(matriz)-1; i++{ Serial.print(i); Serial.print(" = "); Serial.println(matriz[i]); } delay(5000); }
Tenga en cuenta que una cadena bien formada termina con el símbolo NULL, que tiene un valor ASCII 0.