Arduíno não lê informação da porta serial enviada por outro software...

Senhores, boa noite!

Estou tentando fazer o Arduíno ler uma informação na porta serial enviada por um outro programa, porém não estou conseguindo... A informação vem em sequência no seguinte formato... "<T00000" à " <T00600"... Essas informações são despejadas na porta serial em uma velocidade de aproximadamente três informações por segundo, até o "<T00100", e após isso dez a quinze informações por segundo... O que preciso é que quando a informação "<T00477" chegar na serial, seja executada uma tarefa, que para teste seria apenas acendimento de leds... Já fiz o teste manualmente, ou seja, eu mesmo enviei a informação "<T00477" para a serial e funcionou, porém com a informação sendo enviada por esse outro programa não funciona... Fiz um teste também com um display de LCD, para confirmar se tais informações estariam mesmo chegando na serial, mas verifiquei que chega certinho...

Peço ajuda dos colegas mais experientes, para tentar resolver esse impasse...!

Segue o código que estou usando...

String dados;
void setup ()
{
Serial.begin(115200);
pinMode(2,OUTPUT);
}
void loop(){

if(Serial.available()) {
dados = (Serial.readString());
if(dados == "<T00477"){
digitalWrite(2,1);
delay(150);
digitalWrite(2,0);
delay(150);
digitalWrite(2,1);
delay(150);
digitalWrite(2,0);
delay(150);
digitalWrite(2,1);
delay(150);
digitalWrite(2,0);
delay(150);
digitalWrite(2,1);
delay(150);
digitalWrite(2,0);
delay(150);
digitalWrite(2,1);
delay(150);
digitalWrite(2,0);
delay(150);
digitalWrite(2,1);
delay(150);
digitalWrite(2,0);
delay(150);
digitalWrite(2,1);
delay(150);
digitalWrite(2,0);
delay(150);
digitalWrite(2,1);
delay(150);
digitalWrite(2,0);
}

}
}

Exibições: 253

Responder esta

Respostas a este tópico

vc ja tentou usar Serial.read(); ao inves de Serial.readString();?

e coloque tb if(Serial.available() >0)

Bom dia José Miguel!

Cara, já tentei com "Serial.read();" e também com "if(Serial.available() >0)", e não funcionou...

Recebi um código do Mauricio de Souza Ortega que funcionou legal usando "Serial.Find"...

Agradeço a atenção!

Abraço.

Boa noite Sergio,

Tente com este programinha...

#define pinOut 2 /// define pino de saída

void setup ()
{
Serial.begin(115200); // inicia serial com 115200
pinMode(pinOut,OUTPUT); // define pinOut como saida

Serial.setTimeout(500); 
}//setup

void loop(){
      if(Serial.available() > 0) { // verifica se tem dados na serial
      if(Serial.find("<T00477")){ // localiza texto nos dados recebidos

     // pisca led por 15 X com delay de 150ms
        for (int i =1; i < 16; i++){
        digitalWrite(pinOut, !digitalRead(pinOut)); // lê valor do pino e inverte seu valor e escreve no próprio pino
        delay(150);
       }
    }
  }
}//loop

Até +

Mauricio Ortega

Mauricio, bom dia!

Cara, não é que vc matou a xarada??? kkkk

Mas por que será que não lia com o "Serial.readString"?

Só o acionamento do led que ficou na metade, ou seja, só pisca 8 vezes em vez de 16, mas isso era só teste mesmo...

Agradeço muito sua ajuda...

Tenha um bom fim de semana!!!

Abraço.

Olá, tente entender aquele trecho no sketch do Maurício que faz piscar os leds para descobrir porque apenas pisca 8 vezes.

Tente descobrir se é o arduino que "está errado" por não fazer o led piscar 16 vezes, ou se é o sketch quem está ordenando o arduino piscar realmente 8 vezes.

Isso serve inclusive como um exercício para melhorar sua habilidade na programação, pois a compreensão é relativamente simples.

Depois, dê um passo além e tente fazer o led piscar realmente 16 vezes. E se quiser, dê um passo mais além e tente descobrir uma outra forma alternativa de programar oo sketch para fazer o arduino piscar 16 vezes. 

É que metade fica apagado, mude aumente o contador....

Abs

Sim... Percebi isso...

Valeu Maurício!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço