Add Controller and Updater classes for shutter control and updates

This commit is contained in:
2026-06-09 19:16:58 +02:00
parent 204cdef7d7
commit 4f81ea6c28
4 changed files with 143 additions and 1 deletions
+93
View File
@@ -0,0 +1,93 @@
#include "Arduino.h"
#include "controller.h"
/*
shutterStates[n] = 0 => le volet est fermer (position basse)
shutterStates[n] = 100 => le volet est ouvert (position haute)
*/
Controller::Controller() {
}
void Controller::initController() {
for (int i = 0; i < 5; i++) {
// créer le volet
unsigned short pinDown = 9 - (2 * i);
unsigned short pinUp = 8 - (2 * i);
Shutter shutter{pinUp, pinDown, i}; // i est le nom
pinMode(i, OUTPUT);
// stock le volet
shutters[i] = &shutter;
}
// Permet de correctement initaliser tout les volets
openExactePercentAllShutter(100);
openExactePercentAllShutter(0);
}
void Controller::openExactePercentSpecificShutter(unsigned short shutter, float percent) {
if (percent < 0)
percent = 0;
else if (percent > 100)
percent = 100;
if (shutter < 0 && shutter >= 5)
return;
float percentOpen = shutters[shutter]->percentOpen;
// si le volet est deja ouvert a son pourcentage, ne rien faire
if (percent = percentOpen)
return;
float deltaPercent = percentOpen - percent;
if (deltaPercent < 0) // on doit fermet
digitalWrite(shutters[shutter]->pinDown, 1);
else // on doit ouvrir
digitalWrite(shutters[shutter]->pinUp, 1);
// Arreter le volet au bon moment
delay((percent * 1000) / shutters[shutter]->TIMETOOPEN);
digitalWrite(shutters[shutter]->pinUp, 0);
digitalWrite(shutters[shutter]->pinDown, 0);
}
void Controller::openExactePercentAllShutter(float percent) {
for (int i = 0; i < 5; i++) {
openExactePercentSpecificShutter(i, percent);
}
}
void Controller::checkManualOpen() {
// ouvre tous les volets du salon
if (analogRead(A7) > 512) {
openExactePercentSpecificShutter(0, 100);
openExactePercentSpecificShutter(1, 100);
openExactePercentSpecificShutter(2, 100);
}
// Ferme tous les volets du salon
if (analogRead(A6) > 512) {
openExactePercentSpecificShutter(0, 0);
openExactePercentSpecificShutter(1, 0);
openExactePercentSpecificShutter(2, 0);
}
// Ouvre tous les volets de la cuisine
if (analogRead(A3) > 512) {
openExactePercentSpecificShutter(3, 100);
openExactePercentSpecificShutter(4, 100);
}
// Ferme tous les volets du salon
if (analogRead(A2) > 512) {
openExactePercentSpecificShutter(3, 0);
openExactePercentSpecificShutter(4, 0);
}
if (analogRead(A1) > 512)
openExactePercentAllShutter(100);
if (analogRead(A0) > 512)
openExactePercentAllShutter(0);
}