Leitura de dados de outro Arduino falha [Serial.read()]

Estou com um problema, preciso ler valores de ponto flutuante vindos de um Arduino em outro Arduino, consigo mandar o primeiro imprimir e ler no serial do outro (isso quando deixo o código do receptor limpo), mas não consigo fazer com que o receptor entenda os dados recebidos.

Esse é o código do receptor:

void setup()
{
Serial.begin(9600);
pinMode(8, OUTPUT);
digitalWrite(8, LOW);

}

void loop()
{
if (Serial.available()) { //informa se tem bytes para serem lidos da porta serial
float comando = 0.0;
comando = (float) Serial.read(); //le um byte da porta serial

Serial.println("leu");
Serial.println(comando);
Serial.println("imprimiu");
}
else
{ c = 0.0; }

Serial.println("saiu do laco");

if (c == 1.0)
{ digitalWrite(8, HIGH);}
delay(100);
}

Já tentei utilizar também o "comando = Serial.parseFloat();", mas não funcionou.

Recebendo um valor de 1.0 acenderia o led, e precisaria ser um float, pois o queria mandar sinais pela metade também (ex: 1.5)

Alguém tem alguma sugestão ou sabe onde está o erro do código? Obrigado.

Exibições: 649

As respostas para este tópico estão encerradas.

Respostas a este tópico

Ah, outra coisa, como mandar para o serial um ponto flutuante?

float ponto = 1.0;

mySerial.print(ponto); //no caso, criei um novo serial pois o emissor é um attiny.

Esse código não funciona.

Meu amigo não estou entendendo pq vc quer transmitir floats de um Arduino para o outro.simplesmente envie a variável e faça a conversão para float no receptor.Para a tomada de decisão com os valores recebidos use o SwitchCase pois é mais prático e para enviar o float para a serial coloque o parâmetro do formato para obter um número específico de casas decimais.:

Serial.println(1.2345, 2); retorna 1.23

a=float(x); converte para float

switch (var) {     
case 1: //do something when var equals 1
break;
case 2: //do something when var equals 2
break;
default: // if nothing else matches, do the default // default is optional
}







Esse tipo de código:

Serial.println(1.2345, 2);

Não compila para o ATTINY.

E para fazer a conversão para float eu teria que ter algo acima de um float, para caber todos os dados.

Uma possibilidade seria um char:

char comando = {0.0};
comando = Serial.read();

Mas isso também não funciona, dá retornos zoados do tipo "ÿÿ­ÿ7»ÿ±¾û³¾·;¿í;"

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço