¿Cómo leer y mostrar datos de un registrador de CO2 conectado a través de RS-232?

3

Obtuve un Licor CO2-Logger (Li-820) para un experimento científico. El Li-820 emite una señal analógica (voltaje) y también ofrece una comunicación en serie a través de un puerto RS-232. Me gustaría oler la comunicación en serie con un Arduino Uno y mostrar los valores de CO2 en una pantalla LCD tal que pueda controlar La señal analógica que se registra en un sistema informático. Quiero mostrar tanto la señal analógica como la digital.

Utilizo un cambiador de nivel RS-232 para conectar el analizador de CO2 de Licor al Arduino Uno, y puedo olfatear el puerto COM con éxito, tanto con el monitor de serie Arduino como con un programa detector. A través del puerto RS-232, el dispositivo Li-820 genera una línea similar a XML que es como sigue (saltos de línea y sangría agregados para facilitar la lectura):

<li820>
  <data>
    <celltemp>5.1252350e1</celltemp>
    <cellpres>9.7159633e1</cellpres>
    <co2>5.2527637e2</co2>
    <co2abs>7.7893261e-2</co2abs>
    <ivolt>1.1386718e1</ivolt>
    <raw>3950702,3808028</raw>
  </data>
</li820>

Me gustaría analizar esa información para la parte relevante con el Arduino Uno, que es el <co2>5.2527637e2</co2> (valor "CO2") y luego enviarlo al monitor serie. A continuación, mostraré ese valor en una pantalla LCD. Este último paso debería ser un problema menor.

Entonces, ¿cómo puedo analizar la información de los bits relevantes y luego mostrarla en el monitor serie?

Miré en muchos ejemplos en Internet. Una versión modificada del código de trabajo desde aquí fue lo más cercano que obtuve.

    
pregunta Strohmi

2 respuestas

2

Supongo que ya puedes leer la cadena en un búfer, así que empezaré por el búfer. Su código debería ser algo como esto (deberá importar la biblioteca de cadenas ):

String wholeString = String(yourLoadedCharBuffer);
int startTag = wholeString.indexOf("<co2>");
int endTag = wholeString.indexOf("</co2>");

String co2FullString = wholeString.substring(startTag+5,endTag-1);

Esto nos da "5.2527637e2", agregas 5 a la etiqueta de inicio porque tiene 4 caracteres y quieres comenzar con "5", y restas 1 de la etiqueta final, porque no queremos que aparezca primer personaje de la misma.

int eStart = co2FullString.indexOf("e");
String decimalString = co2FullString.substring(0,eStart-1);
String powerString = co2FullString.substring(estart+1, co2FullString.length-1);

char decimalCharArray[] = decimalString.toCharArray();
char powerCharArray[] = powerString.toCharArray();

float decimal = atof(&decimalCharArray[0]);
float power = atof(&powerCharArray[0]);

float finalCO2Value = pow(decimal,power);
    
respondido por el Reza Hussain
0

Esto puede ser obvio para usted, pero la salida se está enviando en formato XML. Obtener una biblioteca de análisis XML para arduino le ayudará en gran medida a satisfacer sus necesidades.

    
respondido por el spearson

Lea otras preguntas en las etiquetas