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?
Tags:
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
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por