Bonjour,
En me basant sur pas mal d’exemples et de littérature, j’ai écris un petit programme pour la gestion d’un arrosage automatique sur base d’un Arduino Uno, un afficheur Oled, un module RTC DS3231 et des relais ‘'(3 relais en “byte PinSorties)
Le but commander les relais à des heures différentes contenues dans un tableau “TabEvt”.
L’heure s’affiche correctement.
La commandes des relais aux heures prévues fonctionne correctement, mais je ne parviens pas à afficher quelle sortie (relais ) est active ligne “ display.print(PinSorties[i]);
Avez-vous une idée ?
Merci
#include <Wire.h>
#include <RTClib.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// OLED config
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
byte i;
RTC_DS3231 rtc;
// Variables de la plage horaire multiples
int TabEvt [3][4] =
{
{12,3,12,5},// 12h00 - 12h14 voie 1 vert
{12,6,12,8},// 12h15 - 12h25 voie 2 bleu
{12,9,12,117},// 12h26 - 12h36 voie 3 rouge
};
byte PinSorties [3] = {8, 9, 10};
void setup() {
// initialisation pour 3 relais en D8,D9 et D10
for ( i = 0; i < 3; i++ ) {pinMode(PinSorties[i], OUTPUT); digitalWrite (PinSorties[i], LOW);}
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Adresse I2C 0x3C
for(;;);
}
if (!rtc.begin()) {
for(;;);
}
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Décommenter pour régler l'heure
}
void loop() {
DateTime now = rtc.now(); // Lecture de l'heure actuelle
// -- logique de commande pour relais multiples ----
// Rechercher si heure actuelle est dans dans la ou les plages horaires
for ( i = 0; i < 3; i++ ) {
if (now.hour() == TabEvt [i][0] && now.minute() == TabEvt [i][1]) { // si H et Min spnt dans la plage horaire de la pos1 du tableau
digitalWrite (PinSorties[i], HIGH);
}
if (now.hour() == TabEvt [i][2] && now.minute() == TabEvt [i][3]) {
digitalWrite (PinSorties[i], LOW);
}
}
// --- Affichage OLED ---
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.print("Heure: ");
display.print(now.hour());
display.print(":");
if (now.minute() < 10) display.print("0"); // Affichage propre
display.print(now.minute());
display.print(":");
if (now.second() < 10) display.print("0"); // Affichage propre
display.print(now.second());
display.setCursor(0, 20);
display.print("Relais: ");
display.setCursor(25, 20);
if (PinSorties[i] == HIGH) {
display.print(PinSorties[i]);
}
else {
//display.print("OFF");
}
display.display();
delay(1000); // Mise à jour chaque seconde
}