Problema Lectura sensor puerto serie

Buenas, estoy intentado sacar unos datos que me envia un sensor por el puerto serie, el caso es que no manda el valor, sino que me nada como una lista de 4 valores, el primero 255, que es como el inicio de la transmision, despues un 0, y a continuacion los 2 valores de lectura que me interesan.

El caso es que quiero leer esos valores y quedarme solo con el tercero que es el que me interasa, pero no se como hacerlo.

ya se que hay consultas parecidas a estas, pero no comprendo como hacerlos y os aseguro que me he recorrido google entero y he visto progrmas en este foro que supuestamente hacen lo que quiero, pero no funcionan y no los comprendo. gracias de antemano al que me de ayuda. Lo agradezco mucho ya que estoy atascado en este punto.

Esto es lo que recibo del sensor;

255
0
225
224

cada segundo recibo esa cadena, me salen los 4 números a la vez, y yo quiero leer el tercer valor.

cuando cambio la posicion del sensor me cambian el tercer y cuarto valor, por ejemplo;

255
0
91
90

a ver si podeis ayudarme porfavor. un saludo

Hola valdy, deberias adjuntar el sketch (fijate en la parte superior izq. del editor cuando introduces el codigo) y minimamente decirnos de que sensor se trata. Eso aumenta las probabilidades de que te puedan responder. Suerte.

Si los datos vienen separados por algun caracter de separacion puedes usar el metodo parseInt() del objeto Serial:
https://www.arduino.cc/reference/en/language/functions/communication/serial/parseint/

no viene separados por nigun caracter, ese es el problema, me salen tal y como lo he puesto arriba.
no he puesto el sketch porque simplemente estoy haciendo una lectura del puerto serial.

int cont=0;

void setup() {

Serial.begin(9600);
}

void loop() {

if(Serial.available()){
cont=Serial.read();
Serial.println(cont);

}

}

El sensor es el ds1603l.

y quiero capturar el tercer dato que me llega, pero me estoy volviendo loco y no lo consigo.

Me da ravia porque creo que no deberia ser muy dificil pero no doy con la tecla.

Lo unico que he encontrado es esto sobre el sensor y algunas pruebas, pero no pone por ningun lado como capturar el dato que quiero para trabajar con el.

Gracias por contestar.

Te he enviado un privado para que edites tu post usando etiquetas de código y de enlace.

Supongo que tu sensor usa un conversor de RS232 a TTL no?

Donde metiste los pines Rx y Tx del DS1603L ? en 0 y 1 de Arduino ? que Arduino usas ?

Prueba esto:

void setup() {
   Serial.begin(9600);
}

void loop() {
   byte i=0;
   while (Serial.available()){
      char cont = Serial.read();
      i++;
      if (i == 3){
         Serial.println(cont);
      }
   }
}

Estoy usando los pines 0 y 1 y el arduino nano.
ya he probado ese codigo antes y no me devuelve ningun valor, y en el caso del que me has mandado me da este error :

conversion from 'int' to 'String' is ambiguous

yo no estoy usando ese conversor de la foto, lo tengo directamente enchufado al arduino, y me esta dando perfectamente las lecturas, esta trabajando de manera correcta, por eso no he pensado en poner el conversor.

Solo me queda aislar mi valor requerido de los otros 3.

Ya lo explique antes, pero lo vuelvo a hacer por si no quedo muy claro, mi sensor me manda cada segundo la informacion, y lo que yo leo en mi serial del ordenador es lo siguiente:

255
0
225
224

Esto en cada pulso, no es que me mande primero el 255, luego el 0 y asi sucesivamente, sino que me aparece la cadena de 4 numeros a la vez.

Muchas gracias por la ayuda compañeros.

Chicos acabo de probar de añadir un caracter y he conseguido esto, por lo que ahora si lo tengo separado por un caracter, ahora seria mas facil separarlo??

esto es lo que ahoras recivo en mi serial;

255;0;94;94;

este es el codigo que uso ahora;

int cont=0;

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
}

void loop() {

if(Serial.available()){
 cont=Serial.read();
 Serial.print(cont);
 Serial.print(";");
}

}

a ver si lo sacamos tio que me queda muy poquito ya jajajaj :slight_smile:

Encontre este codigo que va perfecto, pero me faltaria almacenar los datos que me llegan al serial en el string acompañados de una coma.

Alguna solucion facil?

String data = "Altura,15,32,67,98,34,20";                 // Cadena de caracteres de prueba

void setup() {
  Serial.begin(9600);                                     // Iniciar comunicación serial
 
  byte values[6];                                         // Una forma más "compacta" de crear seis variables.
  byte prevPos = data.indexOf(',');                       // Buscar la posición de la primera coma en la cadena
  String first = data.substring(0, prevPos);              // Extraer la primera cadena de caracteres (sin coma)
  prevPos++;                                              // Desplazar el índice de la primera coma. Sin esto, la próxima búsqueda resultará
                                                          // en la misma posición.
  byte currPos = data.indexOf(',', prevPos);              // La siguente subcadena ya no empezará desde el principio; por lo tanto, hay que
                                                          // almacenar dos posiciones.
 
  for (byte i = 0; i < 6; i++) {
    values[i] = data.substring(prevPos, currPos).toInt(); // Extrae la subcadena que contiene un número, luego se convierte en un valor
                                                          // númerico de variable.
    prevPos = currPos + 1;                                // Como ahora trabajamos con dos posiciones y necesitamos pasar a la siguiente
                                                          // subcadena, la "posición actual" ahora es la anterior. No olvidemos el
                                                          // desplazamiento de índice.
    currPos = data.indexOf(',', prevPos);                 // La "posición actual" ahora es la próxima ocurrencia del "caracter separador"
                                                          // (en este caso, una coma).
  }                                                       // Y todo esto se repite 5 veces más.

  Serial.println("Cadena: " + first);                     // Imprime, al monitor serie, la primera subcadena extraída.
 
  for (byte i = 0; i < 6; i++) {                          // Imprime el valor de las seis variables extraídas del texto de prueba.
    Serial.println("Valor " + String(i + 1) + ": " + String(values[i]));
  }
}

void loop() {
                                                          // Y se acabó. Luego no ocurre nada :P

}

El sensor tiene que ver con esto?

DS1603 Elapsed Time Counter Module