Olá pessoal, boa tarde!

olhem essa programação:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(9600);
mySerial.begin(9600);
}

void loop() // run over and over
{
if (mySerial.available())
{
int inByte = mySerial.read();

Serial.write(inByte);
}
}

Digamos que eu conecte um dispositivo qualquer por essa porta digital que eu criei que apenas envie dados, e eu clique no monitor serial e apareça sempre essa mensagem:
"Olá, o número é: xxxxxxxx"
E o tempo todo o dispositivo ficasse mandando pro arduino essa mensagem só que no lugar dos xxx, seria números variados o tempo todo. Mas se eu só quisesse que aparecesse no Monitor Serial os dados a partir do Dois Pontos? no caso, só os números e excluísse a frase "Olá, o número é:" como eu faria? Me desculpem, sou iniciante em arduino e só pra fazer essa programação tive muita dificuldade. Agradeço desde já!

Exibições: 978

Responder esta

Respostas a este tópico

tenta isso aí, infelizmente não tenho como testar aqui. mais acho q vai funcionar.

/*
  A informação deve chegar no formato "Olá, o número é: 25"
  sendo dessa forma: <mensagem>+<espaço>+<numero>
  a mensagem vai ser armazenada em msgChar
  o numero vai ser armazenado em msgInt
  que vai ser convertido de string para int e armazenar em valor
 
*/
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

String st, msgChar, msgInt;
int valor;

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

void parseData()
{
  // Primeiro, vamos olhar para o separador de espaço por este código
   if(st.indexOf(" ")>=0)
   {
     // Se for encontrado, temos o primeiro caractere até o separador
     // de espaço e salvá-lo para msgChar por este código
     msgChar = st.substring(0,(st.indexOf(" ")));
     // Em seguida, temos os personagens do separador de espaço até
     // o fim da string e salvá-lo para msgInt por este código
     msgInt = st.substring(st.indexOf(" ")+1);
     // Por fim, converter a string para inteiro e
     // guardá-lo para valor variável por este código
     valor = (msgInt.toInt());
   }
   else
   {
     msgChar = st;
     valor = 0;
   }
}

void loop()
{
  if (mySerial.available())
  {
     st = String("");
     while(mySerial.available())
     {
        st = st + char(mySerial.read());
        delay(1);
     }
 
     parseData();
     // imprimir os dados analisados
     // convertidos para inteiro
     Serial.println(valor);
  }
}

abraços !!

Opa, valeu cara!

No caso, os dados que vou receber são de um GPS mas não coloquei os dados porque se não ia ficar muito complicado. Queria entender a lógica e como teria que fazer.

olha os dados que ele manda a cada segundo:

$GPRMC,024442.999,V,0125.5288,S,04827.3755,W,000.0,000.0,190813,,,N*7A
$GPVTG,000.0,T,,M,000.0,N,000.0,K,N*02
$GPGGA,024443.999,0125.5288,S,04827.3755,W,0,00,0.0,17.8,M,0.0,M,,0000*5C
$GPGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*30
$GPGSV,3,1,11,02,66,099,27,24,45,199,,15,42,298,,26,35,358,20*75

no caso, eu só ia usar a linha $GPGGA pra pegar o horário em hhmmss.sss, latitude, Hemisfério N/S, longitude e Hemisfério E/W que são "024443.999,0125.5288,S,04827.3755,W" respectivamente.

Ainda não testei, não estou em casa. Onde está "if(st.indexOf(" ")>=0)" eu trocaria por "if(st.indexOf("$GPGGA,")>=0)" e onde tivesse espaço eu colocaria $GPGGA estou certo?

hum, entendo. Não estou com o arduino e o GPS em mãos agora. Assim que eu chegar em casa, eu faço esse teste e te mostro os resultados :D

solução do problema:

como nosso amigo queria receber o conteúdo somente da linha sublinhada

$GPRMC,024442.999,V,0125.5288,S,04827.3755,W,000.0,000.0,190813,,,N*7A
$GPVTG,000.0,T,,M,000.0,N,000.0,K,N*02
$GPGGA,024443.999,0125.5288,S,04827.3755,W,0,00,0.0,17.8,M,0.0,M,,0000*5C
$GPGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*30
$GPGSV,3,1,11,02,66,099,27,24,45,199,,15,42,298,,26,35,358,20*75

o código ficou da seguinte forma:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

String st, msgChar;

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

void parseData()
{
  // Primeiro, vamos ver se o conteudo possui a linha $GPGGA,
   if(st.indexOf("$GPGGA,")>=0)
   {
     // Se for encontrado, temos os caracteres até o $GPGSA
     // 7 quer dizer que vamos anular 7 primeiros caracteres q são '$GPGGA,'
     // para ele mostrar somente os numeros que interessa
     msgChar = st.substring(7,(st.indexOf("$GPGSA")));
   }
}

void loop()
{
  if (mySerial.available())
  {
     st = String("");
     while(mySerial.available())
     {
        st = st + char(mySerial.read());
        delay(1);
     }
 
     parseData();
     // imprimir os dados analisados
     // convertidos para inteiro
     Serial.println(msgChar);
  }
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço