Good mornig,
i read the forum Converting a float to uint8_t for LoRa radio 433MHz.
I used it to make a tx.ino and a rx.ino in order to send a temperature float value from a tx lora module to a rx lora module.
It works but i do not understand how it is possible sending through the software serial a pointer and then dereference it in the receiver.
I refer to these lines
TX.ino
(...)
mySerial.write((uint8_t *)(&t), sizeof(t));
(...)
RX.ino
(...)
uint8_t buf1[4];
uint8_t len1 = sizeof(buf1);
mySerial.readBytes(buf1, len1);
t = *((float *)buf1);
(...)
Thanks a lot!
best regards
here it is the tx.ino and rx.ino code:
TX CODE
// Qui spiega come convertire un float in uint8_t
// Converting a float to uint8_t for LoRa radio 433MHz
digita o incolla il codice qui
#include "Arduino.h"
#include "LoRa_E32.h"
#include <SoftwareSerial.h>
#include <Adafruit_Sensor.h>
#include "DHT.h"
#define DHTPIN 4
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
SoftwareSerial mySerial(3, 2); // e32 TX e32 RX
void setup() {
Serial.begin(9600);
dht.begin();
mySerial.begin(9600);
delay(500);
Serial.println("Master");
}
void loop() {
float t;
float u;
delay(2000);
t = dht.readTemperature();
u = dht.readHumidity();
if (isnan(t) || isnan(u)) {
Serial.println("Errore di lettura del sensore!");
return;
}
/* char str1[30];
String str2=(String)t;
int len =snprintf(str1,30,"Hello!");
uint8_t bval = (uint8_t)t;
mySerial.write((uint8_t *)str1, 2);
mySerial.write(bval);
*/
mySerial.write((uint8_t *)(&t), sizeof(t));
mySerial.write((uint8_t *)(&u), sizeof(u));
Serial.println(t);
Serial.println(u);
}
**RX CODE**
// Qui spiega come convertire un float in uint8_t
// https://forum.arduino.cc/t/converting-a-float-to-uint8_t-for-lora-radio-433mhz/599173
#include "Arduino.h"
#include "LoRa_E32.h"
#include <SoftwareSerial.h>
#define MAX_STR_LENGTH 20
typedef struct {
char msg[MAX_STR_LENGTH] = {0}; // an array of char
int valor = 0;
} Data_t;
Data_t Mydata;
SoftwareSerial mySerial(3, 2); // e32 TX e32 RX
float t, u;
void setup() {
pinMode(13, OUTPUT);
Serial.begin(9600);
mySerial.begin(9600);
Serial.println("RX!");
}
void loop() {
float t;
float u;
if (mySerial.available()) {
uint8_t buf1[4];
uint8_t len1 = sizeof(buf1);
mySerial.readBytes(buf1, len1);
t = *((float *)buf1);
uint8_t buf2[4];
uint8_t len2 = sizeof(buf2);
mySerial.readBytes(buf2, len2);
u = *((float *)buf2);
Serial.print("Temperatura: ");
Serial.print(t);
Serial.print(" C");
Serial.print("\n");
Serial.print("Umidità: ");
Serial.print(u);
Serial.print(" %");
Serial.print("\n");
}
/*
static int i = 0;
while (Serial.available() > 0) {
char c = Serial.read();
if (c != '\n') {
MyData.msg[i] = c;
i++;
}
else {
// terminate the array with NULL terminator and send the struct
MyData.msg[i] = '\0';
MyData.valor = 10;
Transceiver.SendStruct((uint8_t*) &MyData, (uint8_t) sizeof(MyData));
Serial.print("Sending: ");
Serial.println(MyData.msg);
Serial.println(MyData.valor);
i = 0;
}
}
*/
}