Bonjour,
Pas beaucoup de commentaires sur mon bout de code ...
Ayant fait quelques légères modifs (4 cycles de servo au lieu de 5, déplacement de certaines accolades pour ne pas faire sonner la cloche a chaque avance du servo), je repost le code:
#include <Servo.h>
#include <Wire.h>
#include <DS3231.h>
Servo monservo; //création de l'objet Servo
int pos = 0; // mettre le servo en position initiale
RTClib RTC; // utile pour heure ???
const int cloche = 2; // la clochette est sur la broche 2
const int boutoncloche = 3; // le bouton clochette est sur la broche 3
const int boutonavance = 4; // le bouton avance est sur la broche 4
int etatboutoncloche;
int etatboutonavance;
void setup() {
pinMode(cloche, OUTPUT); // met la broche 2 en sortie
pinMode(boutoncloche, INPUT); // met la broche 3 en entrée
pinMode(boutonavance, INPUT); // met la broche 4 en entrée
monservo.attach(9); //servo relié a la broche 9
Serial.begin(57600);
Wire.begin(); //demarrage liaison série
}
void loop() {
DateTime now = RTC.now();
if((now.hour() == 17) && (now.minute() == 30) && (now.second() == 00)) //heure minutes seconde de declenchement: 12h30m00s
{
for(int compteur = 0; compteur < 4; compteur++) //permet d'exécuter 4 fois le code ci-dessous
{
for (pos = 0; pos <= 180; pos += 1) // va de 0° à 180° par pas de 1
{
monservo.write(pos); // dit au servo de prendre la position 'pos'
delay(50); // attendre 50ms pour servo arrive position
}
for (pos = 180; pos >= 0; pos -= 2) // va de 180° à 0° par pas de 2
{
monservo.write(pos); // dit au servo de prendre la position 'pos'
delay(50); // attendre 50ms pour servo arrive position
}
}
for(int compteur = 0; compteur < 5; compteur++) //permet d'exécuter 5 fois le code ci-dessous
{
digitalWrite(cloche, HIGH); //declenchement de la cloche via solenoide
delay(100);
digitalWrite(cloche, LOW);
delay(100);
}
}
// utilisation manuelle de la cloche
etatboutoncloche = digitalRead(boutoncloche); // verification de l'état du boutoncloche
if(etatboutoncloche == HIGH) // enclenchement du bouton cloche
for(int compteur = 0; compteur < 5; compteur++) //permet d'exécuter 5 fois le code ci-dessous
{
digitalWrite(cloche, HIGH); //declenchement de la cloche via solenoide
delay(100);
digitalWrite(cloche, LOW);
delay(100);
}
// avance manuelle
etatboutonavance = digitalRead(boutonavance); // verification de l'état du boutonavance
if(etatboutonavance == HIGH) // enclenchement du bouton avance
{
for(int compteur = 0; compteur < 4; compteur++) //permet d'exécuter 4 fois le code ci-dessous
{
for (pos = 0; pos <= 180; pos += 1) // va de 0° à 180° par pas de 1
{
monservo.write(pos); // dit au servo de prendre la position 'pos'
delay(50); // attendre 50ms pour servo arrive position
}
for (pos = 180; pos >= 0; pos -= 2) // va de 180° à 0° par pas de 2
{
monservo.write(pos); // dit au servo de prendre la position 'pos'
delay(50); // attendre 50ms pour servo arrive position
}
}
}
}
Je ne peux pas tester ce code complet dans tinkercad car la librairie du RTC n'est pas présente.
Par contre en enlevant la partie "horloge" cela fonctionne mais mon solénoïde semble s’initialiser à 90° au lieu de 0°... bizarre je lui dit pourtant: int pos = 0; pour mettre le servo en position initiale.
Si vous avez des pistes ... Merci