J'ai un capteur DHT22, j'aimerai commander un ruban de led en fonction de la température ET de l'hygrométrie.
En revanche, je ne sais pas comment faire pour qu'une condition intègre deux variable, cad, si la température est supérieur à X ET si l'hygro est supérieur à Y alors action 1
voici un bout de code qui fonctionne. mais qui ne satisfaire pas mes attentes.
D'avance merci.
#include "DHT.h" //librairie du DHT22
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
int ledPinRed = 9;
int ledPinBlue = 10;
int ledPinGreen = 11;
void setup() {
Serial.begin(9600);
Serial.println("Le Capteur fonctionne correctement");
dht.begin();
}
void loop () {
delay(500); //temps entre chaque mesures
float h = dht.readHumidity();
float t = dht.readTemperature(); // température en Celsius
float f = dht.readTemperature(true); // température en Fahrenheit
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Impossible d'établir une connection avec le capteur DHT:(");
return;
}
if(float t = dht.readTemperature() >20)
{Serial.println("très chaud");
{
// fade in de min à max par incrément de n points:
for(int fadeValue = 32 ; fadeValue <= 255; fadeValue +=10) {
// sets the value (range from 0 to 255):
analogWrite(ledPinRed, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(30);
}
// fade out from max to min in increments of 5 points:
for(int fadeValue = 255 ; fadeValue >= 32; fadeValue -=25) {
// sets the value (range from 0 to 255):
analogWrite(ledPinRed, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(30);
}
}
}
else
{
analogWrite(ledPinRed,32);
}
if (float h = dht.readHumidity() >60)
{Serial.println("très humide");
{
for(int fadeValue = 32 ; fadeValue <= 255; fadeValue +=10) {
analogWrite(ledPinRed, fadeValue);
analogWrite(ledPinGreen, fadeValue);
delay(30);
}
for(int fadeValue = 255 ; fadeValue >= 32; fadeValue -=25) {
analogWrite(ledPinRed, fadeValue);
analogWrite(ledPinGreen, fadeValue);
delay(30);
}
}
}
else
{
analogWrite(ledPinRed,32);
analogWrite(ledPinGreen,32);
}
float hi = dht.computeHeatIndex(f, h);
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature");
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t");
Serial.print("Heat index: ");
Serial.print(hi);
Serial.println(" *F");
}
#include "DHT.h" //librairie du DHT22
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
int ledPinRed = 9;
int ledPinBlue = 10;
int ledPinGreen = 11;
void setup() {
Serial.begin(9600);
Serial.println("Le Capteur fonctionne correctement");
dht.begin();
}
void loop () {
delay(500); //temps entre chaque mesures
float h = dht.readHumidity();
float t = dht.readTemperature(); // température en Celsius
float f = dht.readTemperature(true); // température en Fahrenheit
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Impossible d'établir une connection avec le capteur DHT:(");
return;
}
if (float t = dht.readTemperature() >20 && float h = dht.readHumidity() >60)
{Serial.println("très chaud très humide");
{
// fade in de min à max par incrément de n points:
for(int fadeValue = 32 ; fadeValue <= 255; fadeValue +=10) {
// sets the value (range from 0 to 255):
analogWrite(ledPinRed, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(30);
}
// fade out from max to min in increments of 5 points:
for(int fadeValue = 255 ; fadeValue >= 32; fadeValue -=25) {
// sets the value (range from 0 to 255):
analogWrite(ledPinRed, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(30);
}
}
for(int fadeValue = 32 ; fadeValue <= 255; fadeValue +=10) {
// sets the value (range from 0 to 255):
analogWrite(ledPinRed, fadeValue);
analogWrite(ledPinGreen, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(30);
}
// fade out from max to min in increments of 5 points:
for(int fadeValue = 255 ; fadeValue >= 32; fadeValue -=25) {
// sets the value (range from 0 to 255):
analogWrite(ledPinRed, fadeValue);
analogWrite(ledPinGreen, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(30);
}
}
}
else
{
analogWrite(ledPinRed,32);
}
if (float h = dht.readHumidity() >60)
{Serial.println("très humide");
{
for(int fadeValue = 32 ; fadeValue <= 255; fadeValue +=10) {
analogWrite(ledPinRed, fadeValue);
analogWrite(ledPinGreen, fadeValue);
delay(30);
}
for(int fadeValue = 255 ; fadeValue >= 32; fadeValue -=25) {
analogWrite(ledPinRed, fadeValue);
analogWrite(ledPinGreen, fadeValue);
delay(30);
}
}
}
else
{
analogWrite(ledPinRed,32);
analogWrite(ledPinGreen,32);
}
float hi = dht.computeHeatIndex(f, h);
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature");
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t");
Serial.print("Heat index: ");
Serial.print(hi);
Serial.println(" *F");
}
This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
Arduino: 1.0.6 (Windows 7), Board: "Arduino Uno"
LedTemp_hygroDependant.ino: In function 'void loop()':
LedTemp_hygroDependant:34: error: expected primary-expression before 'float'
LedTemp_hygroDependant:34: error: expected `)' before 'float'
LedTemp_hygroDependant.ino: At global scope:
LedTemp_hygroDependant:71: error: expected unqualified-id before 'else'
LedTemp_hygroDependant:76: error: expected unqualified-id before 'if'
Déclare tes variables avec leur genre au début du sketch et lorsque tu les utilises ne mets pas le genre devant (int, float,...)
Ensuite dans ta loop() tu fais une première lecture de tes valeurs que tu attribue à une variable:
void loop () {
delay(500); //temps entre chaque mesures
float h = dht.readHumidity();
float t = dht.readTemperature(); // température en Celsius
float f = dht.readTemperature(true); // température en Fahrenheit
Puis tu refais une lecture dans ta condition pour attribuer une valeur à une variable que tu redéclares :
if (float h = dht.readHumidity() >60)
Est ce que ça ne fonctionnerait pas comme ça, en plus ce serait plus simple :
if ( t >= 20 && h >= 60)
En plus tes signes de comparaisons étaient inversés :
x == y (x is equal to y)
x != y (x is not equal to y)
x < y (x is less than y)
x > y (x is greater than y)
x <= y (x is less than or equal to y)
x >= y (x is greater than or equal to y)
Problème lié à la priorité des opérateurs.
L'égalité et la moins prioritaire. Du coup le && ne s'effectue pas sur les bonnes expressions.
Il aurait fallu mettre des parenthèses pour forcer l'affectation en premier.