Bonsoir,
Après quelques heures passées sur des feuilles de papier brouillon, je me suis lancé dans un premier temps sur le code de Mr arduino...
Je sais, j'aurais dû commencer par coder le plus difficile, mais je voulais être sûr du "fonctionnement" pricncipal ..
J'ai donc essayé de coder la boucle principale en travaillant d'abord sur un séchoir et je voulais avoir votre avis (pour les plus courageux :P), n'hésitez pas à me poser des questions, je dois pouvoir surement l'améliorer, l’alléger, le simplifier...
A vos commentaires ( mais pas trop virulents non plus..je suis un newbie :D)
Je vous expliquerai si vous voulez le mode "AUTO" du séchoir ou je bataille sur les tableaux dynamiques, les pointeurs...
#include <Arduino.h>
#include <DHT.h">
#include <SoftwareSerial.h>
#define DHTPIN1 11 //DHT1 SUR PIN DIGITAL 11
#define DHTPIN2 12 //DHT2 SUR PIN DIGITAL 12
#define DHTPIN3 13 //DHT3 SUR PIN DIGITAL 13
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht1(DHTPIN1, DHTTYPE);
DHT dht2(DHTPIN2, DHTTYPE);
DHT dht3(DHTPIN3, DHTTYPE);
int Palier_S1[10] = {0,0,0,0,0,0,0,0,0,0}; // tableau des valeurs d'HR% des palier du mode auto
int MODE_S1 = 0; // variable du mode du sechoir n_1
float HR [3] = {0,0,0}; // Tableau des mesures d'humidite relative
float TEMP [3] = {0,0,0}; // Tableau des mesures de temperatures
boolean Xon [3] = {0,0,0}; // Tableau action sur extracteurs
boolean Von [3] = {0,0,0}; // Tableau action sur ventilateurs
boolean Con [3] = {0,0,0}; // Tableau action sur chauffages
float CONS_T [3] = {0,0,0}; // Tableau des consignes de temperatures
int DONSERIE; // Variable servant à récupérer
// les données reçues sur le port serie
int PINRELAISCH [3]; //Création tableau pin arduino/type de relais
int PINRELAISEX [3];
int PINRELAISVEN [3] ;
void setup()
{
Serial.begin(9600);
dht.begin();
int v = 0 ;
for (v = 0; v < 3; v = v+1) //initialisation du tableau pin arduino/type de relais
{ // et passage des pins en sortie
PINRELAISCH [v] = v + 2 ;
PINRELAISEX [v] = v + 5 ;
PINRELAISVEN [v] = v + 8 ;
pinMode(PINRELAISCH[v],OUTPUT); //Pinrelais 0 = Pin 2 (relais Chauffage 1)
pinMode (PINRELAISEX[v],OUTPUT); //Pinrelais 1 = Pin 3 (relais Chauffage 2)
pinMode(PINRELAISVEN[v],OUTPUT); //Pinrelais 2 = Pin 4 (relais Chauffage 3)
} //Pinrelais 3 = Pin 5 (relais Extracteur 1)
//Pinrelais 4 = Pin 6 (relais Extracteur 2)
//Pinrelais 5 = Pin 7 (relais Extracteur 3)
//Pinrelais 6 = Pin 8 (relais Ventilos 1)
//Pinrelais 7 = Pin 9 (relais Ventilos 2)
//Pinrelais 8 = Pin 10 (relais Ventilos 3)
}
void loop()
{
HR [0] = dht1.readHumidity(); //Acquisition données capteur HR et temp
TEMP [0] = dht1.readTemperature(); //.(...).
HR [1] = dht2.readHumidity();
TEMP [1] = dht2.readTemperature();
HR [2] = dht3.readHumidity();
TEMP [2] = dht3.readTemperature();
int i=0;
for (i=0;i<3;i=i+1) //traitement mesures HR et TEMP des 3 sechoirs
{
if (isnan(TEMP[i]) || isnan(HR[i])) //test erreur mesure des 3 capteurs DHT
{
Serial.println("ERREUR DHT22");
}
else // Essai Affichage données des 3 capteurs sur moniteur
{
Serial.print(i+1);
Serial.print(": Humidite : ");
Serial.print(HR[i]);
Serial.print(" %\t");
Serial.print("Temperature : ");
Serial.print(TEMP[i]);
Serial.println(" *C");
}
}
switch (MODE_S1) // test du mode du séchoir 1 (Stand by, manuel ou auto)
{
case 1: //Mode Manuel
if (Serial.available()>0) // Si des données sont disponibles sur le port série
{
DONSERIE = Serial.read(); // On les récupère dans DONSERIE
switch (DONSERIE) //Traitement des données reçues
{
case '1': // Si "V1ON" est reçu
Von [1] = 1 ; // On stock la commande
case '2': // (...)
Von [1] = 0 ;
case '3':
Con [1] = 1 ;
case '4':
Con [1] = 0 ;
case '5':
Xon [1] = 1 ;
case '6':
Xon [1] = 0 ;
break;
}
}
break;
case 2: // Mode Auto
break;
}
// Mode Stand by
ContactRelais();
//switch (MODE_S2) // test du mode du séchoir 2 (Stand by, manuel ou auto)
//switch (MODE_S3) // test du mode du séchoir 3 (Stand by, manuel ou auto)
}
void ContactRelais() //Fonction commande des relais suivant etat des variables
{
for (int i=0;i<3;i++)
{
if (Xon[i] = 1 )
{
digitalWrite(PINRELAISEX[i],HIGH);
}
else{
digitalWrite(PINRELAISEX[i],LOW);
}
if (Con[i] = 1 )
{
digitalWrite(PINRELAISCH[i],HIGH);
}
else{
digitalWrite(PINRELAISCH[i],LOW);
}
if (Von[i] = 1 )
{
digitalWrite(PINRELAISVEN[i],HIGH);
}
else{
digitalWrite(PINRELAISVEN[i],LOW);
}
}
}