Bonjour a tous
Je suis jeune retraité et commence tout juste sur arduino.
Je cherche a envoyer une (au moins) variable de type float d'un uno vers un mega, par une liaison série TX/RX.
Pour info la variable est issue d'un ds18b20 (enfin, 4 en l’occurrence).
Les branchements sont ok, car j'arrive a envoyer un int sans problème.
Malgré avoir lu beaucoup de blogs (Eskimon, zeste, et d'autres), je n'arrive pas a mes fins.
J'ai fait 2 progs d'essais en assemblant des infos prises un peu partout, mais bon...
Dans l'état actuel je ne reçoit que des 0.
Je me permet de vous envoyer les 2 progs.(on ne rigole pas)
Émission
#include <SoftwareSerial.h>
///================ UNO ===================
#include <SoftwareSerial.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
int potarPin = A0;
int potarValue = 0;
long temp = 0;
//long val = 0x74CBB1;
//float temp=0;
LiquidCrystal_I2C lcd(0x27, 20, 4);
SoftwareSerial mySerial(10, 11); // RX, TX
void setup()
{
Serial.begin(9600);
mySerial.begin(2400);
lcd.init();
lcd.backlight();
lcd.clear();
}
void loop() {
potarValue = analogRead(potarPin);
temp = potarValue * (30.0 / 1023.0); // force la valeur entre 0 et 30
Serial.print(0xff); // la valeur envoyée est 0xFF
Serial.print((temp >> 24) & 0xFF); // la valeur envoyée est 0x0
Serial.print((temp >> 16) & 0xFF); // la valeur envoyée est 0x74
Serial.print((temp >> 8) & 0xFF); // la valeur envoyée est 0xCB
Serial.print(temp & 0xFF); // la valeur envoyée est 0xB1
lcd.setCursor(0, 0);
lcd.print("potar=");
lcd.setCursor(6, 0);
lcd.print(" ");
lcd.setCursor(6, 0);
lcd.print(potarValue);
lcd.setCursor(0, 1);
lcd.print("temp=");
lcd.setCursor(6, 1);
lcd.print(" ");
lcd.setCursor(6, 1);
lcd.print(temp, 1);
delay(100);
}
Réception
// Réception sur Mega 2560
// SDA=20 SCL=21
// Serial 1 (TX 18, RX 19)
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x3F, 20, 4);
int val = 0;
int val2 = 0;
int val3 = 0;
int val4 = 0;
float valeur = 0;
//float var;
void setup() {
lcd.init();
lcd.backlight();
lcd.clear();
Serial.begin(9600);
Serial1.begin(2400);
Serial.println("Attente réception !");
}
void loop() {
while (Serial1.available() >= 5) {
if (Serial1.read() == 0xff) {
val = Serial1.read();
val2 = Serial1.read();
val3 = Serial1.read();
val4 = Serial1.read();
Serial1.flush();
valeur = ((val4 << 24) | (val3 << 16) | (val2 << 8) | (val));
}
}
Serial.println(valeur);
lcd.setCursor(0, 0);
lcd.print("recu =");
lcd.setCursor(6, 0);
lcd.print(" ");
lcd.setCursor(6, 0);
lcd.print(valeur, 1);
}
Merci de votre attention et de vos conseils avisés.