Je n'arrive pas à faire tourner mon moteur pas à pas tous les 24H

je n'arrive pas à faire tournée mon moteur pas à pas tous les 24H

#include "Stepper.h"

const int stepsPerRevolution = 200;

Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

void setup() {
  myStepper.setSpeed(60);
}

void loop() {
  myStepper.step(stepsPerRevolution);
  delay(100);

  myStepper.step(-stepsPerRevolution);
  delay(100);

  myStepper.step(-9994); // nombre de pas
  delay(-99);
  myStepper.step(-9994); // nobre de pas
  delay(99);
}

Post mis dans la mauvaise section, on parle anglais dans les forums généraux. ➜ déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans "Les bonnes pratiques du Forum Francophone".

Qu'est-ce que tu voulais faire exactement?

Actuellement ton programme fait

  • un tour dans le sens "positif"
  • attente de 100 millisecondes
  • un tour dans le sens "négatif"
  • attente de 100 millisecondes
  • un peu moins de 50 tours dans le sens "négatif"
  • attente de presque 50 jours
  • un peu moins de 50 tours dans le sens "négatif"
  • attente de 99 millisecondes

Et cette séquence se répète indéfiniment.

delay(-99); donne un résultat énorme.

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

que mon programme tourne tous les 24h comme quand je le branche il tourne puis le jour d'après il tourne à la même heure

je souhaiterai que la séquence se répète tous les 24H

pouvez vous m'aider et m'apporter les modifications à mon programme car mon projet est de donne à manger à mais poisson

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.

je voudrai 19H le programme se lance et le jour d'après à 19H sa se relance

je voudrai 19h le programme se lance et le jour d'après à 19h sa se relance

je l'ai mais comment je le programme

oui je l'ai chez un DS1307
mais comment je le programme

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.

Ds1307 en 2023 : p*tain de youtube !

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.

je voudrai que quelqu'un me modifie mon programme pour m'aidé

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);
}

est pour le moteur stp

Fichiers>Exemples>Servo.
Base toi sur l'exemple et intègre les deux sketch ensemble.

je ne sais pas le faire et j'ai déjà essayer

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)