delay() attend un argument long non signé soit un nombre codé sur 32 bits.
Donc -99 est interprété comme 232 - 99 soit 4294967197 ce qui fait un délai de 4294967197 millisecondes soit :
4294967197 / 1000 / 60 / 60 / 24 = 49,71 jours
Quelles sont les temps exacts que tu voudrais obtenir, pour chaque pas de la séquence?
A noter que delay() repose entièrement sur la précision de l'horloge de la carte Arduino qui n'est pas très précise. Par conséquent ta séquence va doucement se décaler dans le temps, si par exemple tu avais démarré ton montage à 8h du matin au bout de quelques semaines les poissons seront nourris à 10h, puis au bout de quelques mois ils seront nourris à 20h.
Si tu veux que l'heure de leur repas ne se décale pas dans le temps, il faut utiliser une horloge temps réelle (RTC chez les marchands de produits Arduino) qui elle est beaucoup plus précise.
Le DS1307 va légèrement dériver aussi, 2s par jour je crois.
Pour programmer un module RTC, le plus simple est d'utiliser une librairie dédié, que tu peux trouver dans le gestionnaire de librairie de l'IDE d'Arduino.
Tu peux rechercher celui-ci
Le plus souvent lorsque tu installe une librairie via ton IDE, tu trouvera dans le menu dédié des exemples qui accompagne la librairie.
Tu peux aussi trouver les exemples sur leur gitHub
Il faudrait commencer par modifier l'appel de la fonction "delay" avec un chiffre négtif, comme tu l'a indiqué @fdufnews
Une fois que ta séquence de distribution sera correcte, on pourra t'indiquer les changements à faire pour utiliser le RTC et déclencher ta séquence à une heure précise (soit 19h)
Sur l'oscillateur d'un ARDUINO j'ai déjà relevé 2 minutes de dérive sur 48 heures.
La dérive d'un DS1307 dépend complètement de l'oscillateur utilisé, on ne peut donner de chiffres que pour un exemplaire X d'un fabriquant Y. La dérive varie en fonction de la température, mais comme elle sera à peu près stable en intérieur, cela ne devrait pas avoir un impact important.
Un DS3231 dérivera au maximum d'une minute par an.
Une ds3231 se programme comme une ds1307, le cœur est le même.
Les plus d’une ds3231: sa précision et sa double alarme, la ds1307 ne possède aucune alarme, il faut faire soit même l’alarme dans le code.
Pour quelques euros de plus je n’hésiterais pas une seconde.
En attendant la disponibilité de la ds3231 tu pourra te faire la main avec la 1307 pour comprendre, avec les exemples fournis avec la bibliothèque, comment mettre a l’heure et comment récupérer l’année, le mois, le jour, l’heure, minute, seconde.
Ce ne sera pas du temps perdu, mais gagné.
Certes, c’est des délais que tu n’avais probablement pas envisagés, mais c’est la méthode la plus sure pour aller au bout du projet.
C’est la méthode de travail d’un grand nombre d’aidants sur ce forum.
L’autre solution étant de te faire faire ton projet par quelqu’un, il faut juste trouver l’oiseau rare.
Voici un exemple de l'oiseau rare qui pourrais vous aider. Ce sketch fait allumer un led tous les jours à 19 heures.
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 rtc;
void setup() {
// Initialisation du port série
Serial.begin(9600);
// Initialisation du bus I2C
Wire.begin();
// Initialisation du DS1307
if (! rtc.begin()) {
Serial.println("RTC non trouvé !");
while (1);
}
// Pour mettre à jour l'heure, utilisez la ligne suivante en décommentant et en ajustant l'heure
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
void loop() {
// Obtenir la date et l'heure courantes
DateTime now = rtc.now();
// Vérification si l'heure actuelle est 19:00
if (now.hour() == 19 && now.minute() == 0 && now.second() == 0) {
// Insérez l'action ou l'événement à déclencher ici.
// Par exemple, allumer une LED sur la broche 13
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
// Attendre quelques secondes pour éviter de répéter l'action plusieurs fois à 19:00
delay(5000);
// Éteindre la LED
digitalWrite(13, LOW);
}
// Attente d'une seconde avant de refaire la boucle
delay(1000);
}
On ne débute pas sur un projet complexe.
On débute calmement avec des sujets simples. => quand tu as appris à conduire ce n'était pas en faisant directement Paris-Nice.
On débute avec les tutos d'Eskimon.
Quand on utilise un composant qui nécessite une bibliothèque on commence par faire les exemples qui accompagnent systématiquement la bibliothèque, avant d'écrire son propre programme.
Cela permet de vérifier avec des programmes certifiés que le composant n'a pas été tué par des manipulations hasardeuses et que le câblage est le bon.
Toute tentative de bruler les étapes est vouée à l'échec.
Pour associer deux programmes on fusionne intelligemment les setup() et les loop().
En vérifiant que les deux programmes n'utilisent pas les même ressources (timers ou tout betement les même pins)