Tratando dados recebidos pela serial, alguém pode ajudar?

Saudações amigos.

Primeiramente, gostaria de parabenizar os criadores desse forum, que até 48h atrás eu não conhecia.

Sempre fui fascinado pelo mundo dos microcontroladores, mas sempre usei a desculpa do tempo pra não me aprofundar no assunto.

Pois esses dias resolvi trabalhar em um projeto que esta na gaveta a alguns anos, então preciso da ajuda de vocês.

Antes de tudo, não tenho o mínimo de conhecimento em programação, mas mesmo assim eu consegui ir bem longe nesse projeto, graças as novas IDE's, a meu irmão que está estudando e ao vasto material disponível na Internet.

Vamos à meu problema:

Eu tenho um programa chinês que se comunica pela serial, ele controla a intensidade de 3 lâmpadas, por 'n' motivos eu tenho que usar ele, um deles é que o mesmo está conjugado com outros hardwares.

Ele envia pela serial a seguinte informação: SEFEFEFE

Vem assim, sem separação, não tem como mudar.

O primeiro "SE" serve pra iniciar o sistema, o os outros FE FE FE definem um valor de 0 a 255 em cada uma das 3 lâmpadas, valor que corresponde a intensidade.

O problema é que não tem ponto, vírgula e nem aspas, vem tudo junto.

A parte funcional do código do arduino eu já tenho, preciso descartar o "SE", pois é inútil, e preciso separar os "FE" "FE" "FE" e colocar cada um num campo diferente, e usar seus valores pra controlar as 3 lâmpadas (um valor pra cada lâmpada).

Alguém pode me ajudar? 

Exibições: 794

Responder esta

Respostas a este tópico

OI RS, boa tarde.

Não entendi bem este string de caracteres pela serial, mas acredito que seja assim:

                                                                

Ele envia os valores SEFEFEFE  ou seja:   ASCII    S       E      F       E        F       E       F       F

                                                                 HEX  " 0x53, 0x45, 0x46, 0x45, 0x46, 0x45, 0x46, 0x45"

 

Esta serial é de níveis elétricos RS232 ou TTL?

Se for níveis TTL,  pode receber estes dados via serial do arduino, através das funções seriais do  arduino.

Se for níveis RS232, precisa usar uma interface RS232/TTL para equalizar os niveis e receber estes dados

via serial do arduino, através das funções seriais do  arduino.

Depois de recebidos os dados, pode selecionar os que interessam a você e acionar as lampadas via algum modulo externo.

Rui

Ao receber os dados você pode armazenar cada byte em uma array e depois selecionar os valores através das posições da array
Por exemplo, o primeiro valor estará na posição 2 e 3, o segundo na 4 e 5 e o terceiro na 6 e 7
Na posição 0 e 1 estará o SE, caso você precise dessa informação para confirmar o comando

Valeu, vou pesquisar isso agora.

Muito obrigado.

Olá Rogério. Caso consiga, compartilhe a parte do seu código que trata os dados recebidos pela serial. Estou com o mesmo problema e não consigo resolver. Meus dados são mais simples que os seus. Espero receber +CSQ=15,0 preciso separa só o 15.

Abraço.

Bernardo

Olá Bernardo,

O número que você que pegar (15) está sempre na mesma posição e tem sempre o mesmo tamanho?

Caso positivo e supondo que o nome da variável seja entrada, então use:

String val = entrada.substring(5,7);

A variável val seria do tipo String. Para converter para int, use:

int valor = val.toInt();

Caso o número tenha tamanho e posição variáveis, então deve usar outros métodos, como o indexOf para obter a posição do "=", por exemplo.

Caro José Augusto, valeu pela ajuda.

O dado que interessa está sempre na mesma posição e tem seu valor variando entre 11 e 25.

Vou testar e dou retorno se funcionou ou não.

Bernardo

Esqueci de mencionar, esses são os dados que saem da porta COM do PC.

Para acionar as lampadas eu tenho pronto um circuito com Fet's.

Se intendi, você diz que ao invés de receber a informação pelo conversor USB do Arduino, passar a receber essa informação pela serial? tipo pino 1 e 2?

Se colocar um conversor TTL, perde muito a taxa de dados?

Olá Rogério!

Para separar os dados da entrada serial, use substrings.

Por exemplo, se o nome da variável que recebe os dados da serial é palavra:

String val1 = palavra.substring(2,4);
String val2 = palavra.substring(4,6);
String val3 = palavra.substring(6,8);

Agora você tem nas variáveis do tipo String val1,val2 e val3 os valores que você quer.

Como essas variáveis String representam valores hexadecimais (FE = 254), agora você tem que convertê-las para int (decimais) para poder setá-las em uma porta pwm 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço