90 lines
2.5 KiB
C++
90 lines
2.5 KiB
C++
#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 (unsigned short i = 0; i < 5; i++) {
|
|
// créer le volet
|
|
unsigned short pinDown = 9 - (2 * i);
|
|
unsigned short pinUp = 8 - (2 * i);
|
|
|
|
shutters[i] = new Shutter(pinUp, pinDown, i);
|
|
|
|
pinMode(i, OUTPUT);
|
|
}
|
|
|
|
// 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::manualOpen() {
|
|
// 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);
|
|
} |