J'ai réorganisé le code concerné. Est-ce que j'ai bien compris ?
#include <ScheduleTable.h>
// Création des objets
ScheduleTable ouvreSonne(5,18000); // Création de la table
// déclaration des constantes
const byte pinSonne=8; // affecte l'E/S 8 au pilotage de la sonnerie sans optocoupleur
// déclaration des variables
float target = 0.0; // La cible du servo : target = 0.0 pour barrières fermées.
byte actionPN=0; // variable d'état pour le switchcase de pilotage des barrières
byte prevActionPN=0; // l'état précédent de actionPN
// fonctions pour SheduleTable
void pulseOn()
{
pinMode(pinSonne, OUTPUT);
digitalWrite(pinSonne, LOW);
}
void pulseOff()
{
pinMode(pinSonne, INPUT);
digitalWrite(pinSonne, LOW);
}
void basculeTarget()
{
target = 1.0 - target;
}
void setup() {
// put your setup code here, to run once:
pinMode(pinSonne, INPUT); // déclare pinSonne comme entrée à l'init;
digitalWrite(pinSonne,LOW); // écrit 0 sur pinSonne
// Table des événements de ouvreSonne: impulsions de 1000 ms à t=000 et t = 16000, et assigne la valeur 0.0 à target à t = 5000
ouvreSonne.at(000,pulseOn);
ouvreSonne.at(1000,pulseOff);
ouvreSonne.at(5000,basculeTarget);
ouvreSonne.at(16000,pulseOn);
ouvreSonne.at(17000,pulseOff);
}
void loop() {
// put your main code here, to run repeatedly:
// Code pour gérer le mouvement des barrières
switch (actionPN) // début du switch case de pilotage des barrières
{
case 0: // on ouvre les barrières
if (actionPN != prevActionPN) {target = 1.0; prevActionPN=actionPN;}
break;
case 1: // on ferme les barrières avec sonnerie
if (actionPN != prevActionPN) ouvreSonne.start(1);
// digitalWrite(pinSonne,sonne); cette ligne ne semble plus utile, c'est maintenant dans les fonctions
prevActionPN=actionPN;
break;
case 2: // on ferme les barrières sans sonnerie
if (actionPN != prevActionPN) {target = 0.0; prevActionPN=actionPN;}
break;
} // fin du switch case de pilotage des barrières
}