Bonjour, je possède un programme Arduino mais.... il fonctionne pas .
![]()
Mon but est de créer un nourrisseur pour poissons automatique. Il dispose d’un moteur stepper 28BYJ-48, un module RTC et deux 3 boutons poussoir (voire le schéma d’assemblage).
Si j’appuie sur Bouton1, je règle mon programme pour qu’ils leurs donnent à manger 1x par jours à midi pile. De plus, tant que je n’appuie sur aucun autre bouton mon programme se fait en boucle.
Si j’appuie sur Bouton2, je règle mon programme pour qu’ils leurs donnent à manger 2x par jours. Une première fois à midi est une deuxième fois à 19h. De plus, tant que je n’appuie sur aucun autre bouton mon programme se fait en boucle.
Si j’appuie sur Bouton3, je règle mon programme pour qu’ils leurs donnent à manger maintenant. De plus, tant que je n’appuie sur aucun autre bouton mon programme se fait en boucle.
Part contre, si j’appuie pendant 3sc sur Bouton1 j’ai la possibilité de définir à quel jour et à quelle heure je leurs donne à manger.
Pour augmenter de +1 le jours de la semaine qui sera définit comme moment les poissons auront à manger je dois appuyer 1x sur Bouton1. Mais si j’appuie alors qu’il est dimanche, je reviens à lundi. Le système est exactement pareil pour les heures mais cette fois je dois appuyer sur le Bouton2.
Pour finir, je dois appuyer 1x sur le Bouton3pour initialiser cette « alarme », de telle sorte qu’a l’heure voulut mon programme se mette en route (exemple : Mardi ; 12h).
De plus, tant que je n’appuie sur aucun autre bouton mon programme se fait en boucle.
A mon avis, ce que je vous dit ce n’est pas très claire mais je vous joint ci-joint le code avec des annotations pour une meilleur compréhension ![]()
Programe_distributeur_automatique_de_nourriture_pour_poissons.ino (9,3 Ko)
Si ca marche pas, je vous l'envoie comme cela:
#include <Stepper.h>
#include <Wire.h> /*Ici se sont les librairies que je souhaite utuliser, étant débutant il n'est pas
improbable que je les aient mal installer*/
#include <DS3231.h>
const int STEPPPER_PIN_1 = 2;
const int STEPPPER_PIN_2 = 3;
const int STEPPPER_PIN_3 = 4; // Ici, j'initialise les broches de mon moteur 28BYJ-48 aini que 3 Bouton poussoire
const int STEPPPER_PIN_4 = 5;
const int Bouton1 = 6;
const int Bouton2 = 7;
const int Bouton3 = 8;
int Bouton_presse= pulseIn(Bouton1, HIGH); //cette variable ne sert a rien, juste a la lisibilité du programe
int Nombre_de_pas= 148; //cette variable me permet de definir le nombre de pas qu'il faut au moteur pour pouvoire "lacher" completement un compartiment de nouriture (2048 (nombre de pas pour un tour)/14 (nombre de compartiment))
int LdT_Allumage= 60000;
int LdT_Mise_en_veille= 60000; //ici se sont des variables, LdT_Allumage et LdT_Mise_en_veille vont me servire a "mettre en veille" ou a "allumer mon moteur stepper". Je sais que cela n'est pas très utile, mais pour mon usage personnelle je souhaite garder ces deux variables
unsigned char Jour= 0;
unsigned char Heure= 0; //ces deux variables me permettent d'initialiser une "alarme" sur un module RTC, ces valeurs sont changer sur l'appuie de Bouton1 (Jour) et Bouton2 (Heure)
Stepper Moteur_plateforme(2048, STEPPPER_PIN_2, STEPPPER_PIN_4, STEPPPER_PIN_3, STEPPPER_PIN_1);// Déclare un Stepper nommer Moteur_plateforme
DS3231 rtc(SDA, SCL); // Initialisation du module RTC---Repris d'un code fait par l'IA.
void setup() {
pinMode(STEPPPER_PIN_1, OUTPUT);
pinMode(STEPPPER_PIN_2, OUTPUT);
pinMode(STEPPPER_PIN_3, OUTPUT);
pinMode(STEPPPER_PIN_4, OUTPUT); //Ici je declare les broches ainsi que si ils sont en entrées ou sorties
pinMode(Bouton1, INPUT);
pinMode(Bouton2, INPUT);
pinMode(Bouton3, INPUT);
Moteur_plateforme.setSpeed(1); // Ici la vitesse de mon moteur (nommé: Moteur_plateforme)
rtc.begin(); // Initialisation du module RTC---Repris d'un code fait par l'IA, je ne sais pas trop ce que cela signifie
Jour= map (Jour, 0, 6, 1, 7);
Heure= map (Heure, 0, 23, 1, 24); // Grace a la fonction map, je vais pouvoire initialiser une "alarme" sur un module RTC (ligne 19) sans aucun dysfonctionnement et en evitant d'ecrire des valeurs= 0, ce qui m'empecherait d'attendre le 7eme jour de la semaine ou la 24ème h de la journée
}
void Distribution(){
digitalWrite(STEPPPER_PIN_1, HIGH);
digitalWrite(STEPPPER_PIN_2, HIGH); //mise en route du stepper (Moteur_plateforme)
digitalWrite(STEPPPER_PIN_3, HIGH);
digitalWrite(STEPPPER_PIN_4, HIGH);
delay(LdT_Allumage); //les variables, LdT_Allumage et LdT_Mise_en_veille vont me servire a "mettre en veille" ou a "allumer mon moteur stepper". Je sais que cela n'est pas très utile, mais pour mon usage personnelle je souhaite garder ces deux variables
Moteur_plateforme.step(Nombre_de_pas); //Ici je met une fonction, cela me permet d'allegr mon programe. En gros, j'allume les broche de moon stepper (Moteur_plateforme) puis je lui demande de tourner de Nombre_de_pas (148), 148 est le nombre de pas qu'il faut au moteur pour pouvoire "lacher" completement un compartiment de nouriture
delay(LdT_Mise_en_veille); //les variables, LdT_Allumage et LdT_Mise_en_veille vont me servire a "mettre en veille" ou a "allumer mon moteur stepper". Je sais que cela n'est pas très utile, mais pour mon usage personnelle je souhaite garder ces deux variables
digitalWrite(STEPPPER_PIN_1, LOW);
digitalWrite(STEPPPER_PIN_2, LOW);
digitalWrite(STEPPPER_PIN_3, LOW); // je met en veille mon stepper (Moteur_plateforme) pour eviter de trop consomer
digitalWrite(STEPPPER_PIN_4, LOW);
}
void loop() {
if (Bouton_presse >= 30000){ //si j'appuie sur mon Bouton1 (bouton poussoir) pendant 3sc:
while (pulseIn(Bouton3, LOW)){ //je fais de telle sorte que tant que je n'appuie pas sur le Bouton3 (bouton poussoir), ce dernier me permet d'initialiser l'alarme que je suis entrain de creer pour telle jours et telle heure
if (pulseIn(Bouton1, HIGH)){
if (Jour <= 6){
Jour= Jour + 1;
}
else{ // En gros, si j'appuie sur le Bouton1, j'augmente ma variable jour de 1. Par exemple deux appuie= Jour=1, cela signifirera plus bas dans le code que je programe mon alarme a mardi
Jour= 0; // En revenche, si j'appuie dessus alors que jour=6 (ce qui represente dimanche), ma variable jour vaut 0 qui grace a ma fonction map (*****montrer plus bas dans le code*****) devient 1 (cela reprenste le 1er jour de la semaine, soit lundi)
}
}
if (pulseIn(Bouton2, HIGH)){
if (Heure <= 23){
Heure= Heure + 1;
} //Pareil que tout a l'heure, mais pour regler l'heure de mon alarme et non les jours
else{
Heure= 0;
}
}
} //Petit rappel: je peux quitter ma boucle while en appyant sur Bouton3, cela ma permet alors d'initialiser mon alarme a l'heure choisit
while (pulseIn(Bouton1, LOW) && pulseIn(Bouton2, LOW) && pulseIn(Bouton3, LOW)){ //maintenant, tant que j'appui nulle part, mon programe s'effectue en boucle qui est de: donner a manger aux poisson a l'heure définit (l'alarme en question). Cette boucle me permet de faire repeter ce programe en permananance, meme quand je suis pas present.
Jour= map (Jour, 0, 6, 1, 7);
Heure= map (Heure, 0, 23, 1, 24); // la fonction map me permet d'éviter que jour=0 ou heure=0 mais qu'ils soient minimum a 1. Cela devrait m'eviter des dysfonctionnement lors de mon initialisation de mon alarme (juste en dessous)
DateTime now = rtc.now() // Récupération de l'heure actuelle---Repris d'un code fait par l'IA, je ne sais pas trop ce que cela signifie
if (now.hour() == Heure && now.minute() == 0 && now.second() == 0 && now.dayOfWeek() == Jour) { //Ici, j'ai demandé a l'IA comment faire pour que je puisse verifier que mon temps actuel soit égale a mon alrme que j'avais programmé. Par la suite j'y ai rajouter les variables Jour et Heure.
Distribution(); // je donne a manger au poisson grace a ma fonction Distribution() (et eux sont tout content ;) )
}
}
}
else{ // Par contre, si je n'appuie pas sur mon Bouton1 pendant 3sc mais que j'appuie dessus comme meme:
while (pulseIn(Bouton2, LOW) && pulseIn(Bouton3, LOW)){ //Tant que je n'appuie sur aucun autre bouton mon programe passe en boucle. Cela me permet d'avoir la possibiliter d'appuyer sur Bouton2 ou Bouton3 et d'executer leurs programes respectifs tout en empechant celui de Bouton1 de fonctionner. Deplus, mon programme pourra tourner en boucle tant que je n'appuie pas sur les autres bouton poussoir. L'avantage et que si je pars pendant un certain temps, l'action pourra continuer de fonctionner
Bouton1= HIGH; //je ne sais plus a quoi ca sert, j'avais mis cela quand j'avait debuter mon programme. Je la laisse donc pour eviter des erreurs si elle est utile
DateTime now = rtc.now() // Récupération de l'heure actuelle---Repris d'un code fait par l'IA, je ne sais pas trop ce que cela signifie
if (now.hour() == 11 && now.minute() == 59){ //Ici, j'ai demandé a l'IA comment faire pour que je puisse verifier que mon temps actuel soit égale a maintenant, un peut comme une alarme.
Distribution(); // je donne a manger au poisson grace a ma fonction Distribution() (et eux sont tout content ;) )
}
}
Bouton1= LOW; //je ne sais plus a quoi ca sert, j'avais mis cela quand j'avait debuter mon programme. Je la laisse donc pour eviter des erreurs si elle est utile
}
if (pulseIn(Bouton1, HIGH)){ //si j'appuie sur le Bouton2:
while (pulseIn(Bouton1, LOW) && pulseIn(Bouton3, LOW)){ //maintenant, tant que j'appui nulle part, mon programe s'effectue en boucle qui est de: donner a manger aux poisson a l'heure définit (l'alarme en question). Cette boucle me permet de faire repeter ce programe en permananance, meme quand je suis pas present.
Bouton2= HIGH; //je ne sais plus a quoi ca sert, j'avais mis cela quand j'avait debuter mon programme. Je la laisse donc pour eviter des erreurs si elle est utile
DateTime now = rtc.now() // Récupération de l'heure actuelle---Repris d'un code fait par l'IA, je ne sais pas trop ce que cela signifie
if (now.hour() == 9 && now.minute() == 59 || now.hour() == 18 && now.minute() == 59) { //Ici, j'ai demandé a l'IA comment faire pour que je puisse verifier que mon temps actuel soit égale a maintenant, un peut comme une alarme.
Distribution(); // je donne a manger au poisson grace a ma fonction Distribution() (et eux sont tout content ;) )
}
}
Bouton2= LOW; //je ne sais plus a quoi ca sert, j'avais mis cela quand j'avait debuter mon programme. Je la laisse donc pour eviter des erreurs si elle est utile
}
if (pulseIn(Bouton3, HIGH)){ //si j'appuie sur le bouton3:
LdT_Allumage= 3000;
LdT_Mise_en_veille= 3000; //cela me permet d'allumer ou d'etendre mon moteur le plus raidement possible (c'est surtout pour un interet personnel qu'il y ait un laps de temps)
Distribution(); // je donne a manger au poisson grace a ma fonction Distribution() (et eux sont tout content ;) )
LdT_Allumage= 60000;
LdT_Mise_en_veille= 60000; //cela me permet de reintialiser les variables precendentes a leurs valeurs par défaut
}
}
Pour finir, si vous voulez je vous joint une photo de mon programme avec les erreurs:
sC:\Users\alexm\Documents\Arduino\Programe_distributeur_automatique_de_nourriture_pour_poissons\Programe_distributeur_automatique_de_nourriture_pour_poissons.ino:22:20: error: no matching function for call to 'DS3231::DS3231(const uint8_t&, const uint8_t&)'
DS3231 rtc(SDA, SCL); // Initialisation du module RTC---Repris d'un code fait par l'IA.
^
In file included from C:\Users\alexm\Documents\Arduino\Programe_distributeur_automatique_de_nourriture_pour_poissons\Programe_distributeur_automatique_de_nourriture_pour_poissons.ino:4:0:
C:\Users\alexm\Documents\Arduino\libraries\DS3231/DS3231.h:73:3: note: candidate: DS3231::DS3231(TwoWire&)
DS3231(TwoWire & w);
^~~~~~
C:\Users\alexm\Documents\Arduino\libraries\DS3231/DS3231.h:73:3: note: candidate expects 1 argument, 2 provided
C:\Users\alexm\Documents\Arduino\libraries\DS3231/DS3231.h:72:3: note: candidate: DS3231::DS3231()
DS3231();
^~~~~~
C:\Users\alexm\Documents\Arduino\libraries\DS3231/DS3231.h:72:3: note: candidate expects 0 arguments, 2 provided
C:\Users\alexm\Documents\Arduino\libraries\DS3231/DS3231.h:68:7: note: candidate: constexpr DS3231::DS3231(const DS3231&)
class DS3231 {
^~~~~~
C:\Users\alexm\Documents\Arduino\libraries\DS3231/DS3231.h:68:7: note: candidate expects 1 argument, 2 provided
C:\Users\alexm\Documents\Arduino\libraries\DS3231/DS3231.h:68:7: note: candidate: constexpr DS3231::DS3231(DS3231&&)
C:\Users\alexm\Documents\Arduino\libraries\DS3231/DS3231.h:68:7: note: candidate expects 1 argument, 2 provided
C:\Users\alexm\Documents\Arduino\Programe_distributeur_automatique_de_nourriture_pour_poissons\Programe_distributeur_automatique_de_nourriture_pour_poissons.ino: In function 'void setup()':
C:\Users\alexm\Documents\Arduino\Programe_distributeur_automatique_de_nourriture_pour_poissons\Programe_distributeur_automatique_de_nourriture_pour_poissons.ino:33:7: error: 'class DS3231' has no member named 'begin'
rtc.begin(); // Initialisation du module RTC---Repris d'un code fait par l'IA, je ne sais pas trop ce que cela signifie
^~~~~
C:\Users\alexm\Documents\Arduino\Programe_distributeur_automatique_de_nourriture_pour_poissons\Programe_distributeur_automatique_de_nourriture_pour_poissons.ino: In function 'void loop()':
C:\Users\alexm\Documents\Arduino\Programe_distributeur_automatique_de_nourriture_pour_poissons\Programe_distributeur_automatique_de_nourriture_pour_poissons.ino:78:24: error: 'class DS3231' has no member named 'now'
DateTime now = rtc.now() // Récupération de l'heure actuelle---Repris d'un code fait par l'IA, je ne sais pas trop ce que cela signifie
^~~
C:\Users\alexm\Documents\Arduino\Programe_distributeur_automatique_de_nourriture_pour_poissons\Programe_distributeur_automatique_de_nourriture_pour_poissons.ino:82:3: error: expected ',' or ';' before '}' token
}
^
In file included from C:\Users\alexm\AppData\Local\Temp\arduino\sketches\0B901E0DB9F963A5043E3657B961FDE5\sketch\Programe_distributeur_automatique_de_nourriture_pour_poissons.ino.cpp:1:0:
C:\Users\alexm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino/Arduino.h:40:14: error: assignment of read-only variable 'Bouton1'
#define HIGH 0x1
^
C:\Users\alexm\Documents\Arduino\Programe_distributeur_automatique_de_nourriture_pour_poissons\Programe_distributeur_automatique_de_nourriture_pour_poissons.ino:86:14: note: in expansion of macro 'HIGH'
Bouton1= HIGH; //je ne sais plus a quoi ca sert, j'avais mis cela quand j'avait debuter mon programme. Je la laisse donc pour eviter des erreurs si elle est utile
^~~~
C:\Users\alexm\Documents\Arduino\Programe_distributeur_automatique_de_nourriture_pour_poissons\Programe_distributeur_automatique_de_nourriture_pour_poissons.ino:87:24: error: 'class DS3231' has no member named 'now'
DateTime now = rtc.now() // Récupération de l'heure actuelle---Repris d'un code fait par l'IA, je ne sais pas trop ce que cela signifie
^~~
C:\Users\alexm\Documents\Arduino\Programe_distributeur_automatique_de_nourriture_pour_poissons\Programe_distributeur_automatique_de_nourriture_pour_poissons.ino:91:3: error: expected ',' or ';' before '}' token
}
^
In file included from C:\Users\alexm\AppData\Local\Temp\arduino\sketches\0B901E0DB9F963A5043E3657B961FDE5\sketch\Programe_distributeur_automatique_de_nourriture_pour_poissons.ino.cpp:1:0:
C:\Users\alexm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino/Arduino.h:41:14: error: assignment of read-only variable 'Bouton1'
#define LOW 0x0
^
C:\Users\alexm\Documents\Arduino\Programe_distributeur_automatique_de_nourriture_pour_poissons\Programe_distributeur_automatique_de_nourriture_pour_poissons.ino:92:12: note: in expansion of macro 'LOW'
Bouton1= LOW; //je ne sais plus a quoi ca sert, j'avais mis cela quand j'avait debuter mon programme. Je la laisse donc pour eviter des erreurs si elle est utile
^~~
C:\Users\alexm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino/Arduino.h:40:14: error: assignment of read-only variable 'Bouton2'
#define HIGH 0x1
^
C:\Users\alexm\Documents\Arduino\Programe_distributeur_automatique_de_nourriture_pour_poissons\Programe_distributeur_automatique_de_nourriture_pour_poissons.ino:97:14: note: in expansion of macro 'HIGH'
Bouton2= HIGH; //je ne sais plus a quoi ca sert, j'avais mis cela quand j'avait debuter mon programme. Je la laisse donc pour eviter des erreurs si elle est utile
^~~~
C:\Users\alexm\Documents\Arduino\Programe_distributeur_automatique_de_nourriture_pour_poissons\Programe_distributeur_automatique_de_nourriture_pour_poissons.ino:98:24: error: 'class DS3231' has no member named 'now'
DateTime now = rtc.now() // Récupération de l'heure actuelle---Repris d'un code fait par l'IA, je ne sais pas trop ce que cela signifie
^~~
C:\Users\alexm\Documents\Arduino\Programe_distributeur_automatique_de_nourriture_pour_poissons\Programe_distributeur_automatique_de_nourriture_pour_poissons.ino:102:3: error: expected ',' or ';' before '}' token
}
^
In file included from C:\Users\alexm\AppData\Local\Temp\arduino\sketches\0B901E0DB9F963A5043E3657B961FDE5\sketch\Programe_distributeur_automatique_de_nourriture_pour_poissons.ino.cpp:1:0:
C:\Users\alexm\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino/Arduino.h:41:14: error: assignment of read-only variable 'Bouton2'
#define LOW 0x0
^
C:\Users\alexm\Documents\Arduino\Programe_distributeur_automatique_de_nourriture_pour_poissons\Programe_distributeur_automatique_de_nourriture_pour_poissons.ino:103:12: note: in expansion of macro 'LOW'
Bouton2= LOW; //je ne sais plus a quoi ca sert, j'avais mis cela quand j'avait debuter mon programme. Je la laisse donc pour eviter des erreurs si elle est utile
^~~
Plusieurs bibliothèque trouvées pour "Stepper.h"
Utilisé: C:\Users\alexm\Documents\Arduino\libraries\Stepper
Non utilisé: C:\Users\alexm\AppData\Local\Arduino15\libraries\Stepper
exit status 1
Compilation error: no matching function for call to 'DS3231::DS3231(const uint8_t&, const uint8_t&)'



