Show Posts
Pages: [1]
1  International / Portugues / Re: Como percorrer dados obtidos da serial? on: November 21, 2012, 06:25:20 am
Olá bubulindo,

Testei o seu código e obtive o mesmo resultado. Que está correto.

Só não entendi o porque eu estava obtendo um tamanho errado do array de caracteres.
Mas pelo menos está funcionando smiley-wink

Obrigado pela ajuda!

2  International / Portugues / Re: Como percorrer dados obtidos da serial? on: November 16, 2012, 06:41:43 am
Aproveitando o tópico, gostaria de tirar mais uma duvida:

- Como percorrer um array de caracteres sem saber o seu tamanho?

Tentei desta forma:
Code:
for(i = 0; i < (sizeof(inMsg) / sizeof(char)); i++)
Porem desta forma não funciona, iterando apenas duas vezes.

Verifiquei que o Arduino trata um 'char array' diferentemente do C.

Em C:
sizeof(char) = 1 byte
char str[10]; sizeof(str) = 10 bytes

Arduino:
sizeof(char) = 1 byte
char str[10]; sizeof(str) = 2 bytes

Como assim?
3  International / Portugues / Re: Como comparar dados da serial com um protocolo? on: November 14, 2012, 10:40:49 am
Entendi.
Obrigado pela ajuda smiley-wink

abs
4  International / Portugues / Re: Como comparar dados da serial com um protocolo? on: November 13, 2012, 02:33:00 pm
Ola bubulindo,

Obrigado por responder.
Seu código deu certo. Mas a função imprimeMsg() deve percorrer o array de caracteres (string) para verificar se cada índice possui conteúdo válido.
Por exemplo, se eu mandar 123 pela serial, inMsg deve ficar assim:
inMsg[0] = 1
inMsg[1] = 2
inMsg[2] = 3
inMsg[3] =
inMsg[4] =
...

Desta forma eu poderei comparar se corresponde com o protocolo que irei utilizar.

Abs.
5  International / Portugues / Como percorrer dados obtidos da serial? on: November 13, 2012, 12:34:15 pm
Olá pessoal, tudo bom?

Preciso ler dados da serial e compara-los com um padrão (protocolo).
Não tenho muita experiência, então não sei se é melhor criar uma string de entrada e depois fazer a comparação ou fazer uma rotina para tratar cada byte recebido sem montar uma string.

Para começar fiz o seguinte código tentando jogar os bytes lidos da serial numa string:
Code:
const int N = 10;
char inMsg[N];

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

void loop()
{
  if(Serial.available() > 0)
  {
    int i = 0;
    while((Serial.available() > 0) && (i < N))
    {
      inMsg[i] = Serial.read();
      ++i;
    }
    
    // teste: imprime array para verificar o conteudo
    imprimeMsg();
  }
}

void imprimeMsg()
{
  int i = 0;
  //for(i = 0; i < (sizeof(inMsg) / sizeof(char)); i++)
  for(i = 0; i < N; i++)
    {
      Serial.print("inMsg[");
      Serial.print(i);
      Serial.print("] = ");
      Serial.println(inMsg[i]);
    }
}

O problema é que no teste, enviando a string '0123456789', tem ocorrido o seguinte:
Code:
inMsg[0] = 0
inMsg[1] = \0x00
inMsg[2] = \0x00
inMsg[3] = \0x00
inMsg[4] = \0x00
inMsg[5] = \0x00
inMsg[6] = \0x00
inMsg[7] = \0x00
inMsg[8] = \0x00
inMsg[9] = \0x00
inMsg[0] = 1
inMsg[1] = 2
inMsg[2] = 3
inMsg[3] = 4
inMsg[4] = 5
inMsg[5] = 6
inMsg[6] = 7
inMsg[7] = 8
inMsg[8] = 9
inMsg[9] =
Ou seja, ao invés de montar uma string com todos os bytes está sendo criada uma nova string após o primeiro byte lido da serial.

Obs: ainda falta fazer a rotina do protocolo, mas primeiro preciso garantir que estou obtendo os bytes corretamente.

Alguem tem ideia de como fazer?

Espero que possam ajudar.
Abs.
Pages: [1]