bonjour a tous,
je suis entrain a cet heure si de realiser un controleur pour mon hydrometrie dans la serre familiale.
le systeme est simple :
recuperation des Températures et Humidité par le Capteur AM2320, puis avec un relais 1 canal on ouvre le relais lorsque l’hydrométrie descend en dessous d’une valeur fixé !
pour parfaire j’ai rajouter 2 potentiomètres KY040 pour la valeur max et la valeur min que je souhaite. ( c’est bizarre mais j’ai une évolution du système dans quelque temps c’est le premier essai)
le problème est que lorsque je tourne l’un ou l’autre des potentiomètres j’ai que la descente d’une incrémentation de 1 , donc je pense de 50 a 49 puis 48 puis 47 peu importe dans quel sens je tourne …
je me sens perdu pourtant j’ai vérifier et vérifier le code je ne vois pas ou j’ai pu me tromper
en vous remerciant par avance
include <Wire.h>
#include <AM2320.h>
#include <LiquidCrystal_I2C.h>
#define BACKLIGHT_PIN 13
#define I2C_ADDR 0x03F // <<----- Add your address here. Find it from I2C Scanner
#define BACKLIGHT_PIN 3 // ecran pin
#define En_pin 2 // ecran pin
#define Rw_pin 1 // ecran pin
#define Rs_pin 0 // ecran pin
#define D4_pin 4 // ecran pin
#define D5_pin 5 // ecran pin
#define D6_pin 6 // ecran pin
#define D7_pin 7 // ecran pin
int n = 1;
LiquidCrystal_I2C lcd (I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin);
AM2320 th;
int VALEURHUMIDITE = th.h;
int VALEURTEMPERATURE = th.t;
const int Relay1 = 2; //pin du relay
const int LedActif = 3;
const int LedInActif = 4;
//declaration potentiometre i2c Humidite Min
const int CLKMin = 5;
const int DTMin = 6;
int RotPositionMin = 50;
int RotationMin;
int ValueMin;
boolean LeftRightMin;
//declaration potentiometre i2c Humidite Max
const int CLKMax = 7;
const int DTMax = 8;
int RotPositionMax = 80;
int RotationMax;
int ValueMax;
boolean LeftRightMax;
void setup() {
lcd.begin (16, 2); // dimension du LCD
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE); // Pin de lumiere arriere
lcd.setBacklight(HIGH); // activation de la lumiere du LCD
lcd.home (); // go home
lcd.print(" LCD OK ");
delay(1000);
lcd.clear();
lcd.print(" Capteur Init ");
delay(1000);
lcd.clear();
Wire.begin();
switch (th.Read()) {
case 2:
lcd.print(" CRC failed");
delay(5000);
break;
case 1:
lcd.print(" Capteur off");
delay(5000);
break;
case 0:
lcd.print(" Capteur OK ");
delay(2000);
break;
}
delay(1000);
lcd.clear();
lcd.print(" Leds Init ");
delay(1000);
pinMode(LedActif, OUTPUT);
digitalWrite(LedActif, LOW);
pinMode(LedInActif, OUTPUT);
digitalWrite(LedInActif, LOW);
lcd.clear();
lcd.print(" Leds OK ");
lcd.clear();
lcd.print(" Relay Init ");
delay(1000);
pinMode(Relay1, OUTPUT);
digitalWrite(Relay1, LOW);
lcd.clear();
lcd.print(" Relay OK ");
delay(1000);
lcd.clear();
lcd.print(" Encodeur Init");
delay(1000);
//initialise l'encodeur rotatif
pinMode (CLKMin, INPUT);
pinMode (DTMin, INPUT);
RotationMin = digitalRead(CLKMin);
//initialise l'encodeur rotatif
pinMode (CLKMax, INPUT);
pinMode (DTMax, INPUT);
RotationMax = digitalRead(CLKMax);
lcd.clear();
lcd.print("HumMin : 50");
lcd.setCursor(0, 1);
lcd.print("HumMax : 80");
delay(2000);
lcd.clear();
lcd.print(" Encodeur OK");
delay(1000);
lcd.clear();
lcd.print("*CHARGEMENT*");
delay(2000);
lcd.clear();
}
void loop() {
ValueMin = digitalRead(CLKMin);
if (ValueMin != RotationMin) {
if (digitalRead(DTMin) != ValueMin) {
RotPositionMin ++;
LeftRightMin = true;
} else { //Counterclockwise
LeftRightMin = false;
RotPositionMin--;
}
lcd.clear();
lcd.home();
lcd.print("Valeur H Min");
lcd.setCursor(0, 1);
lcd.print(RotPositionMin);
delay(500);
lcd.clear();
}
RotationMin = ValueMin;
ValueMax = digitalRead(CLKMax);
if (ValueMax != RotationMax) {
if (digitalRead(DTMax) != ValueMax) {
RotPositionMax ++;
LeftRightMax = true;
} else { //Counterclockwise
LeftRightMax = false;
RotPositionMax--;
}
lcd.clear();
lcd.home();
lcd.print("Valeur H Max");
lcd.setCursor(0, 1);
lcd.print(RotPositionMax);
delay(500);
lcd.clear();
}
RotationMax = ValueMax;
lcd.home();
lcd.print("Hum: ");
lcd.print(VALEURHUMIDITE);
lcd.print(" %");
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(VALEURTEMPERATURE);
lcd.print(" °C");
if ( RotPositionMin >= VALEURHUMIDITE) {
digitalWrite(Relay1, HIGH);
digitalWrite(LedActif, HIGH);
digitalWrite(LedInActif, LOW);
}
else if ( RotPositionMin <= VALEURHUMIDITE && VALEURHUMIDITE <= RotPositionMax) {
digitalWrite(Relay1, HIGH);
digitalWrite(LedActif, HIGH);
digitalWrite(LedInActif, LOW);
}
else {
digitalWrite(Relay1, LOW);
digitalWrite(LedActif, LOW);
digitalWrite(LedInActif, HIGH);
}
delay(200);
}
pour moi sa doit marcher non ?
ValueMin = digitalRead(CLKMin);
if (ValueMin != RotationMin) {
if (digitalRead(DTMin) != ValueMin) {
RotPositionMin ++;
LeftRightMin = true;
} else { //Counterclockwise
LeftRightMin = false;
RotPositionMin--;
}
lcd.clear();
lcd.home();
lcd.print("Valeur H Min");
lcd.setCursor(0, 1);
lcd.print(RotPositionMin);
delay(500);
lcd.clear();
}
RotationMin = ValueMin;
ValueMax = digitalRead(CLKMax);
if (ValueMax != RotationMax) {
if (digitalRead(DTMax) != ValueMax) {
RotPositionMax ++;
LeftRightMax = true;
} else { //Counterclockwise
LeftRightMax = false;
RotPositionMax--;
}
lcd.clear();
lcd.home();
lcd.print("Valeur H Max");
lcd.setCursor(0, 1);
lcd.print(RotPositionMax);
delay(500);
lcd.clear();
}
RotationMax = ValueMax;