Problème au niveau de simulation avec isis ou en real

"Quand je téléverse le code vers l'Arduino Mega 2560, il ne fonctionne pas. Seul l'écran LCD I2C s'allume, mais il n'affiche rien. De plus, j'ai un problème avec l'USB de l'Arduino Mega : mon PC ne détecte pas l'USB, bien que la carte reçoive la tension correctement. Voici mon code pour l'Arduino Mega. Quelles sont les solutions à mes problèmes ?"
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>
#include <toneAC.h>
#include <SPI.h>
#include <Ethernet.h>
#include <TaskScheduler.h>

const float GRAND_POSTE_SEUIL = 40.0f; // Température seuil pour l'alerte de priorité élevée
const uint8_t DHT_TYPE = DHT22; // Type de capteur DHT

// Définir les constantes pour la communication I2C
const uint8_t SDA_PIN = 20;
const uint8_t SCL_PIN = 21;

// Définir les constantes pour la communication avec le module GSM
const uint8_t GSM_TX_PIN = 0;
const uint8_t GSM_RX_PIN = 1;

// Définir les constantes pour les broches de relais
const uint8_t RELAY_THERMOSTAT_1 = 22;
const uint8_t RELAY_THERMOSTAT_2 = 23;
const uint8_t RELAY_BUHCHOLZ_1 = 24;
const uint8_t RELAY_BUHCHOLZ_2 = 25;
const uint8_t RELAY_THERMOSTAT_1_2 = 26;
const uint8_t RELAY_THERMOSTAT_2_2 = 27;
const uint8_t RELAY_BUHCHOLZ_1_2 = 28;
const uint8_t RELAY_BUHCHOLZ_2_2 = 29;
const uint8_t RELAY_DECROCHAGE = 30;
const uint8_t RELAY_DECROCHAGE_2 = 31;
const uint8_t RELAY_LAMPE_1 = 32;
const uint8_t RELAY_LAMPE_2 = 33;
const uint8_t RELAY_BUZZER = 34;
const uint8_t RELAY_VENTILATEUR = 35;

// Définir les constantes pour la broche du capteur DHT
const uint8_t DHT_PIN = 36;
// Définir les constantes pour l'affichage LCD
const uint8_t LCD_ADDRESS = 0x27;
const uint8_t LCD_COLS = 16;
const uint8_t LCD_ROWS = 4;

// Initialiser les objets pour les capteurs, la communication et l'affichage
DHT dht(DHT_PIN, DHT_TYPE);
LiquidCrystal_I2C lcd(LCD_ADDRESS, LCD_COLS, LCD_ROWS);
SoftwareSerial myGSM(GSM_RX_PIN, GSM_TX_PIN);
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Adresse MAC Ethernet
IPAddress ip(192, 168, 1, 2); // Adresse IP local
EthernetClient client ; // Client Ethernet
Scheduler scheduler; // Planificateur de tâches

// Fonction pour envoyer une notification SMS
void sendSMS(const char* message) {
Serial.println("Envoi d'un SMS...");
myGSM.println("AT+CMGS=" +21692058604"");
delay(1000);
myGSM.println(message);
delay(1000);
myGSM.println(char(26));
Serial.println("SMS envoyé !");
}

// Fonction pour lire la température et l'humidité du capteur DHT et les afficher sur l'écran LCD
void readAndDisplayTemperature() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Échec de lecture du capteur DHT !");
return;
}

lcd.setCursor(0, 0);
lcd.print(" "); // Effacer la ligne précédente sur l'écran LCD
lcd.setCursor(0, 0);
lcd.print("T: ");
lcd.print(temperature);
lcd.print(" C H: ");
lcd.print(humidity);
lcd.print("%");
}

// Fonction pour vérifier si un seuil est dépassé en fonction de l'état de deux relais
bool isThresholdExceeded(uint8_t relay1, uint8_t relay2) {
return (digitalRead(relay1) == HIGH || digitalRead(relay2) == HIGH);
}

// Fonction pour contrôler le ventilateur en fonction du seuil de température
void controlVentilator() {
float temperature = dht.readTemperature();
if (temperature >= GRAND_POSTE_SEUIL) {
digitalWrite(RELAY_VENTILATEUR, HIGH);
} else {
digitalWrite(RELAY_VENTILATEUR, LOW);
}
}

// Fonction pour envoyer les données de télémétrie au serveur Thingsboard
void sendTelemetry() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
String data = "{"temperature": " + String(temperature) + ", "humidity": " + String(humidity);
// Ajouter les états des relais aux données de télémétrie
data += ", "RELAY_THERMOSTAT_1": " + String(digitalRead(RELAY_THERMOSTAT_1));
data += ", "RELAY_THERMOSTAT_2": " + String(digitalRead(RELAY_THERMOSTAT_2));
data += ", "RELAY_BUHCHOLZ_1": " + String(digitalRead(RELAY_BUHCHOLZ_1));
data += ", "RELAY_BUHCHOLZ_2": " + String(digitalRead(RELAY_BUHCHOLZ_2));
data += ", "RELAY_THERMOSTAT_1_2": " + String(digitalRead(RELAY_THERMOSTAT_1_2));
data += ", "RELAY_THERMOSTAT_2_2": " + String(digitalRead(RELAY_THERMOSTAT_2_2));
data += ", "RELAY_BUHCHOLZ_1_2": " + String(digitalRead(RELAY_BUHCHOLZ_1_2));
data += ", "RELAY_BUHCHOLZ_2_2": " + String(digitalRead(RELAY_BUHCHOLZ_2_2));
data += "}";

if (client.connect("THINGSBOARD_HOST", 80)) {
client.print("POST /api/v1/ACCESS_TOKEN/telemetry HTTP/1.1\r\n");
client.print("Host: THINGSBOARD_HOST\r\n");
client.print("Content-Type: application/json\r\n");
client.print("Content-Length: ");
client.print(data.length());
client.print("\r\n\r\n");
client.print(data);
client.stop();
} else {
Serial.println("Échec de connexion à Thingsboard");
}
}

// Fonction pour vérifier les seuils et contrôler les relais en conséquence
void checkThresholds() {
if (!isThresholdExceeded(RELAY_THERMOSTAT_1, RELAY_BUHCHOLZ_1)) {
lcd.setCursor(0, 1);
lcd.print("TR1 normal");
toneAC(RELAY_BUZZER, 0);
digitalWrite(RELAY_LAMPE_1, LOW);
digitalWrite(RELAY_LAMPE_2, LOW);
digitalWrite(RELAY_DECROCHAGE, LOW);
digitalWrite(RELAY_DECROCHAGE_2, LOW);
} else {
digitalWrite(RELAY_LAMPE_1, HIGH);
lcd.setCursor(0, 1);
lcd.print("Seuil 1 THR/BUC");
sendSMS("Seuil 1 est atteint");
}

if (!isThresholdExceeded(RELAY_THERMOSTAT_2, RELAY_BUHCHOLZ_2)) {
lcd.setCursor(0, 2);
lcd.print("TR2 normal");
toneAC(RELAY_BUZZER, 0);
digitalWrite(RELAY_LAMPE_2, LOW);
digitalWrite(RELAY_DECROCHAGE, LOW);
digitalWrite(RELAY_DECROCHAGE_2, LOW);
} else {
toneAC(RELAY_BUZZER, 1000);
digitalWrite(RELAY_LAMPE_2, HIGH);
digitalWrite(RELAY_DECROCHAGE, HIGH);
lcd.setCursor(0, 2);
lcd.print("Seuil 2 THR/BUC");
sendSMS("Seuil 2 est atteint");
}

if (!isThresholdExceeded(RELAY_THERMOSTAT_1_2, RELAY_BUHCHOLZ_1_2)) {
lcd.setCursor(0, 3);
lcd.print("TR1 normal");
digitalWrite(RELAY_LAMPE_1, LOW);
} else {
digitalWrite(RELAY_LAMPE_1, HIGH);
lcd.setCursor(0, 3);
lcd.print("Seuil 1 THR/BUC");
sendSMS("Seuil 1 est atteint");
}

if (!isThresholdExceeded(RELAY_THERMOSTAT_2_2, RELAY_BUHCHOLZ_2_2)) {
lcd.setCursor(0, 3);
lcd.print("TR2 normal");
digitalWrite(RELAY_LAMPE_2, LOW);
digitalWrite(RELAY_DECROCHAGE_2, LOW);
} else {
toneAC(RELAY_BUZZER, 1000);
digitalWrite(RELAY_LAMPE_2, HIGH);
digitalWrite(RELAY_DECROCHAGE_2, HIGH);
lcd.setCursor(0, 3);
lcd.print("Seuil 2 THR/BUC");
sendSMS("Seuil 2 est atteint");
}
}

// Objets de tâche pour les tâches planifiées
Task t1(2000, TASK_FOREVER, readAndDisplayTemperature);
Task t2(10000, TASK_FOREVER, checkThresholds);
Task t3(10000, TASK_FOREVER, controlVentilator);
Task t4(10000, TASK_FOREVER, sendTelemetry);
void setup() {
Serial.begin(9600);
dht.begin();
lcd.init();
lcd.backlight();
lcd.clear();

// Connexion Ethernet
Ethernet.begin(mac, ip);

myGSM.begin(9600); // Initialiser le module GSM
delay(2000); // Laisser le temps au module GSM de démarrer
// Vérifier si le module GSM est prêt à être utilisé
if (myGSM.available()) {
Serial.println("Module GSM connecté !");
} else {
Serial.println("Échec de connexion au module GSM !");
}

// Définir les modes de broche pour les relais et le capteur DHT
pinMode(RELAY_THERMOSTAT_1, INPUT);
pinMode(RELAY_THERMOSTAT_2, INPUT);
pinMode(RELAY_BUHCHOLZ_1, INPUT);
pinMode(RELAY_BUHCHOLZ_2, INPUT);
pinMode(RELAY_THERMOSTAT_1_2, INPUT);
pinMode(RELAY_THERMOSTAT_2_2, INPUT);
pinMode(RELAY_BUHCHOLZ_1_2, INPUT);
pinMode(RELAY_BUHCHOLZ_2_2, INPUT);
pinMode(DHT_PIN, INPUT);
pinMode(RELAY_LAMPE_1, OUTPUT);
pinMode(RELAY_LAMPE_2, OUTPUT);
pinMode(RELAY_BUZZER, OUTPUT);
pinMode(RELAY_VENTILATEUR, OUTPUT);
pinMode(RELAY_DECROCHAGE, OUTPUT);
pinMode(RELAY_DECROCHAGE_2, OUTPUT);

// Ajouter les tâches au planificateur et démarrer immédiatement
scheduler.addTask(t1);
scheduler.addTask(t2);
scheduler.addTask(t3);
scheduler.addTask(t4);
scheduler.startNow();
}

void loop() {
scheduler.execute();
}

Bonsoir ...

bonsoir

Je déplace dans le forum principal, ce n'est pas un projet terminé.
Merci de lire le message épinglé en haut du forum, qui explique notamment comment formatter ton code pour le rendre plus lisible (et donner envie aux membres du forum de lire ta demande) ainsi que les informations à fournir (driver USB, comment sont connectés les périphériques, détection par I2C scanner, etc).

C'est ici :

Pour le problème de l'USB, il est probable que tu trouveras une solution ici :

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.