Gostaria que me ajudassem a resolver um problema no meu código.
A questão é a seguinte:
Tenho um sensor que enviar valores para a porta serial 3 separados por '\r'
(carro de retorno).
Quero inserir uma vírgula "," toda vez que o '\r' for encontrado para poder separar a matriz usando o strtok_r.
char inData[100];
char *inParse[100];
int index = 0;
int contador = 0;
boolean stringComplete = false;
do
{
if (Serial3.available()>3)
{
char inChar = Serial3.read();
inData[index] = inChar;
index++;
if (inChar == '\r')
{
contador ++;
inData[index] = ; //Adicionar carácter aqui? como?
}
if(contador == 10)
{
inData[index] = '\0';
contador = 0;
index = 0;
stringComplete = true;
}
}
}
while(stringComplete == false);
char *p = inData;
if (stringComplete == true)
{
while ((str = strtok_r(p, ",", &p)) != NULL)
{
inParse[count] = str;
count++;
}
}
O que significa que o programa não separa os valores.
Como tenho 4 sensores enviando valores para a porta serial, as vezes as primeiras leituras não é do sensor que quero.
Então quero descartar os primeiros valores.
Isso não é resposta... já experimentaste o strtok com o \r?
Se não sabes quantos vais receber, sabes o tamanho da trama? Se sabes, esperas por ter esse número de caracteres disponível no buffer e sabendo lês até encontrares o \r...
No teu exemplo:
char num[8];
num[6] = '\0';
num[7] = '\0';
if (Serial.available() >= 7) { //225.24\r 7 caracteres...
for (int i = 0; i < 6; i++) {
num[i] = Serial.read();
}
int val = atoi(num);
Serial.print("number: ");
Serial.println(val);
}
Eu continuo confuso com o que pretendes (ou se tens em atenção as limitações do chip...). Importas-te de explicar exactamente o que pretendes com isto para que possamos dar uma ideia melhor de como resolver o teu problema?
Eu já te mostrei como trocar o \r por uma vírgula... Se não sabemos como o sistema funciona, ou pretendes que funcione, não podemos fazer muito mais, né?