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 serialSerial.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.
Tags:
As respostas para este tópico estão encerradas.
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»ÿ±¾û³¾·;¿í;"
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por