</>hello everyone, I'm working on a project where I have 2 arduino uno, i2c, 16x2 lcd, acs712, dht11. One arduino is master and the other slave, to arduino master I connected acs712 and dht11. To arduino slave I connected i2c and lcd.Arduino the master reads the data from the 2 sensors and transmits them to the slave, it transmits them via i2c to the lcd and displays them on it. My problem is that I cannot display the parameters read by the sensors on the lcd. The Arduino master and the slave are connected to each other thus, pins A5 to A5 and A4 to A4, GND to GND. Below I send you the master and slave codes and what they display on the serial monitor. Any justice is welcome, thank you.Code master:/ /#include <Wire.h>
#include <DHT.h>
#define DHTPIN A1
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
const int ACS712_PIN = A0;
const int slaveAddress = 8; // Adresă nouă pentru slave
void setup() {
Serial.begin(9600);
Serial.println("Initialized Serial");
dht.begin();
Wire.begin();
Serial.println("Initialized DHT and Wire");
}
void loop() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
float current = analogRead(ACS712_PIN) * (5.0 / 1023.0);
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" C, Humidity: ");
Serial.print(humidity);
Serial.print(" %, Current: ");
Serial.print(current);
Serial.println(" A");
Wire.beginTransmission(slaveAddress); // Adresa slave-ului este 9
Wire.write((byte*)&temperature, sizeof(float)); // Trimite temperatura
Wire.write((byte*)&humidity, sizeof(float)); // Trimite umiditatea
Wire.write((byte*)¤t, sizeof(float)); // Trimite curentul
Wire.endTransmission();
Serial.println("Data sent to slave");
delay(1000);
}/ /
Serial monitor:nitialized Serial
Initialized DHT and Wire
Temperature: 25.00 C, Humidity: 58.00 %, Current: 2.47 A Cod slave:/ /#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(9600);
Serial.println("Initialized Serial");
lcd.begin(16, 2);
lcd.backlight();
Serial.println("Initialized LCD");
Wire.begin(8); // Adresa acestui dispozitiv slave este 8
Wire.onReceive(receiveEvent);
Serial.println("Initialized I2C");
}
void loop() {
// Nu este nevoie de cod aici, deoarece totul este gestionat în funcția de recepție
}
void receiveEvent(int howMany) {
Serial.print("Receiving data... (howMany = ");
Serial.print(howMany);
Serial.println(")");
if (howMany >= 12) { // Verificăm dacă sunt suficiente bytes disponibile
float temperature = 0, humidity = 0, current = 0;
// Citim temperatura
delay(10); // Adăugăm o mică întârziere pentru sincronizare
int availableBytes = Wire.available();
Serial.print("Available bytes before reading temperature: ");
Serial.println(availableBytes);
if (availableBytes >= sizeof(float)) {
Serial.println("Reading temperature...");
for (int i = 0; i < sizeof(float); i++) {
((char*)&temperature)[i] = Wire.read();
}
Serial.print("Temperature received: ");
Serial.println(temperature);
} else {
Serial.println("Failed to read temperature");
return; // Dacă nu putem citi temperatura, nu continuăm
}
// Citim umiditatea
delay(10); // Adăugăm o mică întârziere pentru sincronizare
availableBytes = Wire.available();
Serial.print("Available bytes before reading humidity: ");
Serial.println(availableBytes);
if (availableBytes >= sizeof(float)) {
Serial.println("Reading humidity...");
for (int i = 0; i < sizeof(float); i++) {
((char*)&humidity)[i] = Wire.read();
}
Serial.print("Humidity received: ");
Serial.println(humidity);
} else {
Serial.println("Failed to read humidity");
return; // Dacă nu putem citi umiditatea, nu continuăm
}
// Citim curentul
delay(10); // Adăugăm o mică întârziere pentru sincronizare
availableBytes = Wire.available();
Serial.print("Available bytes before reading current: ");
Serial.println(availableBytes);
if (availableBytes >= sizeof(float)) {
Serial.println("Reading current...");
for (int i = 0; i < sizeof(float); i++) {
((char*)¤t)[i] = Wire.read();
}
Serial.print("Current received: ");
Serial.println(current);
} else {
Serial.println("Failed to read current");
return; // Dacă nu putem citi curentul, nu continuăm
}
// Afișăm datele pe LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Hum: ");
lcd.print(humidity);
lcd.print("%");
lcd.setCursor(8, 1);
lcd.print("I: ");
lcd.print(current);
lcd.print("A");
Serial.println("Data displayed successfully!");
} else {
Serial.print("Not enough data received, only ");
Serial.print(howMany);
Serial.println(" bytes available");
}
}/ /
Serial monitor:Receiving data... (howMany = 12)
Available bytes before reading temperature: 12
Reading temperature...
Temperature received: 25.00
Available bytes before reading humidity: 8
Reading humidity...
Humidity received: 62.00
Available bytes before r