Arduino String – Uso, Ejemplos y más

Arduino String – Introducción

En Arduino String es un tipo de datos que es usado para guardar cadenas de caracteres.  Los caracteres son datos de 8bits representados en ascii. También una variable String siempre DEBE de terminar en un carácter nullo. Es decir, en \0. Es de mucha utilidad cuando se quieren forman mensajes de texto para ser enviados por el puerto serial. En Arduino String se guarda en un vector de datos tipo carácter.

Sintaxis:

String nombreVariable;

En el ejemplo anterior se declara en Arduino String, la cual es una variable sin inicializar. Por ejemplo, se podría inicializar en la declaración o posteriormente en el programa.

  • String ejemplo1 = «Hola Mundo»;

 

Para limpiar a una String simplemente se usa el siguiente ejemplo:

  • ejemplo1 = » «;

Arduino String – Concatenación

Una de las principales ventajas de las variables String es su capacidad de concatenar cadenas de caracteres. Una concatenación es la unión de dos o más strings. Por ejemplo considere el siguiente código.

Espacio en memoria de String

Una variable String, cuando no se inicializa y no contiene ningún valor, se le asigna un espacio de 16 bytes en la memoria RAM. Recordemos que en realidad sólo se usarían 15 bytes, dado que un string DEBE de terminar en el carácter nulo \0. Por el contrario, si se inicializa con un valor que supera el valor anterior, se le asignara un valor que considere el byte nulo.

Entonces es muy importante resaltar que cuando se usan variables del tipo String se hará un uso excesivo de la memoria de Arduino. Considere el siguiente codigo de ejemplo.

Ejemplo-2 – Tamaño en la memoria de Arduino String

Arduino String caso de estudio

 

Aplicaciones

En Arduino, el la variable String es de mucha utilidad para manejar datos recibidos y enviados por el puerto Serial. También es muy utilizado para formar mensajes que después puedan ser enviados por un servidor web, ya sea vía Ethernet o por Wifi. En el siguiente ejemplo se plantean la opción de guardar los caracteres recibidos por serial en un String.

Arduino Serial Read con String

Autor:

Dr. Rubén E-Marmolejo.

Profesor en la Universidad de Guadalajara, México

6 comentarios en «Arduino String – Uso, Ejemplos y más»

  1. Hola .
    Tengo este problema y no se en que foros corresponde hacer esta pregunta
    Tengo un envío de información json para una notificaciones push
    String data = «{» ;
    data = data + » \»to\»: \»d5DAPA91bGk_zz-GdV8_V0iZnetFmaBWwqXgZB62ev0Z3B-LIyFgaAx42FfE\» ,»;
    data = data + «\»notification\»: {» ;
    data = data + «\»body\»: \»deteccion movimiento\»,» ;
    data = data + «\»title\» : \»Alarma\» » ;
    data = data + «} }» ;
    Serial.println(data);

    Y obtengo como resultado que si funciona:
    { «to»: «d5DAPA91bGk_zz-GdV8_V0iZnetFmaBWwqXgZB62ev0Z3B-LIyFgaAx42FfE» ,»notification»: {«body»: «Motion detected»,»title» : «Alarm»} }

    Pero necesito que el valor de destino sea de la forma
    tome de una variable recuperada de la memoria y que se reemplace

    valor=»AL35DAPA9husd99d734ddsd’x42FfE7tsos»;

    { «to»: valor ,»notification»: {«body»: «Motion detected»,»title» : «Alarm»} }
    donde valor es el resultado de una recuperación de datos y debe ser insertada despues de «to»:
    y antes de la notificacion
    Todo indicaría que debería haber «comilla» de inicio antes de poner el valor de la variable y «comilla» final
    Y la realidad es que siempre sale el texto (valor) y nunca la equivalencia que se ha definido.
    Debería ser finalmente :
    { «to»: «AL35APA9husd99d734ddsd’x42FfE7tsos» ,»notification»: {«body»: «Motion detected»,»title» : «Alarm»} }

    Como se resuelve esto?

    1. Hola, sería algo así:
      String temperatura = «50»;
      data=»{\»variable\»:\»»+temperatura+»\»,\»sdf\»:\»sdfsdfsdf\»}»;

  2. Hola Ruben una consulta, tengo un modulo sim800l como el que recibo sms, pero estos cuando los leo por monitor con Serial.println(textSms); me devuelve en monito el mensaje completo:
    AT+CMGR=1
    +CMGR: «REC UNREAD»,»+541126569397″,»»,»19/01/29,00:51:24-12″
    #+541126569397*1234

    son 3 lineas, pero yo solo quiero la 3ra que corresponde exactamente al contenido del sms, para lograrlo uso:
    if (textSms.substring(13) == «+54xxxxxxxxxxx») {
    Serial.println(textSms.substring(-85,-13));

    pero aca es porque estoy calculando a mano la cantidad de caracteres, como puedo hacer con alguna funcion string quedarme solo con la tercer linea completa, o:
    que dentro del mensaje completo busque primero el # y extraiga los 13 caracteres que siguen que son un numero de telefono(distinto al numero que envio el sms) y luego busque el * y extraiga los 4 digitos que siguen, que esten en variables almacenados esos datos para poder trabajarlos.. que se yo numeral_sms = y aca guarda el +54xxxxxxxxxxx y asterisco_sms y gaurda 1234..espero tu ayuda, gracias

    1. Hola, si por ejemplo las dobles comillas son constantes, has una funcion que te copie en un vector de char todos los caracteres apartir de la octava comilla. En QT por ejemplo, hay una función para los Strings que se llama indexOf, podrias intentar replicar dicha función pero para Arduino. O copiar apartir del simbolo de gato (numero).

  3. Hola gracias por tu respuesta, si podria ser algo asi?
    textSms.indexOf(«#») textSms viene de textSms = Sim800l.readSms(1); que lee el mensaje pero completo..
    el tema es q no se como implementar una funcion que busque el # y luego copie los 13 caracteres que siguen…podrias ayudarme?

  4. Con este codigo busca dentro del mensaje el #:

    String gato = textSms;
    int pos=gato.indexOf(«#»);
    if (pos>=0) {
    Serial.print(«El # se encontro.»);
    }
    y lo encuentra sin problemas, lo que no se es comohacer una funcion que a partir dlel # me guarde en una variable los 13 caracteres que siguen..

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *