Boa noite amigos
Estou com dificuldade em transferir algumas variáveis de um arduino para outro.
Estou usado 2 arduino nano sendo que um esta conectado com LM35 (Temperatura), RTC DS3231 (Hora) e HC-SR04 (Ultrassom) para medir a capacidade de um tanque de Diesel.
No outro nano tenho um w5100 para imprimir esses dados no meu browser carregado com HTML5.
Consegui adicionar a comunicação i2c tanto no Master (usei o nano dos sensores) quanto no Slave (nano com w5100), usando o codigo exemplo WIRE nativo da IDE transferi "x is" + valor de x com sucesso.
Wire.write("x is "); // sends five bytes
Wire.write(x); // sends one byte
Enviei a temperatura do RTC "rtc.getDateStr()" e do LM35 via i2c sem problema. O LM35 tinha 2 casas dpois da virgula, quando envia perde-se mas envia o numero inteiro até ai tudo ok.
Agora quando envio a variável Litros que é um float ela não aparece corretamente.
No monitor serial ela aparece 1470.61 e variando, oque é normal.
No outro Slave aparece só 202 e variando, não aparece o valor completo.
Quanto tento enviar o rtc.getTimeStr() ou rtc.getDateStr() da erro informando
invalid conversion from 'char*' to 'byte {aka unsigned char}' [-fpermissive]
Alguem pode dar um help e me ajudar a enviar Data, Hora e o valor Litros (float) via i2c?
Tags:
Oi W, boa noite.
Você está com problema de conversão de dados.
Rui
Como posso converter os dados?
Preciso quebrar ele em partes antes de enviar e remontar quando receber?
Trata tudo como Hexadecimal
Rui
Boa noite!
Cada programador tem um jeito diferente de fazer as coisas.
Com comunicação serial ou I2C eu prefiro compactar todas as variáveis em uma única variável String e depois no receptor descompactar.
A classe String do Arduino possui vários métodos que facilitam esse tipo de operação.
No seu caso, você precisa identificar porque está ocorrendo o erro de conversão no getTimeStr.
Para isso é necessário estudar as librarys que está usando e verificar qual tipo de dado ela está esperando.
- Esse método retorna uma String ou Array de chars?
- O comando de transferência I2C que está usando aceita que tipo de dados para a transferência?
- Você está usando a lib Wire?
Essa lib aceita Strings, mas no formato do C.
Tente fazer assim
Wire.write(data.c_str());
Onde data é o campo getDateStr().
Mas como eu disse é necessário estudar a lib para identificar os tipos corretos.
Se você puder anexar uma parte do seu código talvez fique mais fácil te ajudar...
Após a dica do Rui fui pesquisar como converter as variaveis em HEX, pelo menos os Litros "xxxx.xx"
Mas ainda não consegui.
Tentei
Serial.println(Litros);
Serial.println(Litros, HEX);
Mas retornou assim:
1465.67
1465.6734619140625000
Ai voltei e vi a dica do Jose e fui pesquisar mais sobre a biblioteca do DS3231.
Descobri que ele pode imprmir a Data e Hora em formato UnixTime.
Serial.println(rtc.getUnixTime(rtc.getTime()));
Retornou:
1484783101
Tentei enviar o unixtime via i2c mas só chegam 3 algarismos no outro nano.
Vou pesquisar mais sobre o
Wire.write(); e conversão para HEX.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por