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? 

Exibições: 458

Responder esta

Respostas a este tópico

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.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço