-
Notifications
You must be signed in to change notification settings - Fork 0
/
modes.cpp
100 lines (78 loc) · 3.69 KB
/
modes.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
// include core Wiring API
#include "Arduino.h"
#include "Arducase.h"
#include "modes.h"
//============================================================================================================//
// _______________________________________ REGULATION MODE __________________________________________________
// Définition des modes (déclaration des variables pour chaque mode)
Mode mode_silent;
Mode mode_normal;
Mode mode_heavy;
Mode mode_extreme;
Mode *selected_mode = &mode_silent; // Variable de type "pointeur" vers le mode selectionné, ici, = &mode_silent pour démarré avec le mode "silent" au lancement de la carte.
Mode *modes[MAX_NB_MODES]; // Tableau de pointeur vers l'objet "Mode", ou plutôt un tableau de pointeur vers les objets "Mode", sert à lister tout les modes, en faire l'inventaire.
int nb_modes = 0; //Variable pour compter le nombre de modes, utilisé plus bas
/*
* Fonction permetant de créer un "mode" et initialiser l'objet avec les propriétés définies plus bas dans "Gestion des Modes"
*/
void create_mode(struct Mode &mode, int pin_button, int pin_led, char *name, int pourcentage_min, int pourcentage_max){
if (nb_modes + 1 > MAX_NB_MODES){ //Si nb_mode + 1 est supérieur au nombre de mode maxi,
return; //Arrête la fonction, ne retourne rien.
}
//Sinon,
modes[nb_modes] = &mode; // ajout du mode dans l'invertaire de tous les modes
nb_modes++; //Incrémenter de 1 "nb_mode"
mode.pin_button = pin_button; //Stocker dans "pin_button" qui se trouve dans "mode" la valeur de "pin_button" -> celle lu plus bas dans "Gestion des Modes"
mode.pin_led = pin_led; //Pareil
mode.name = name; //Idem
mode.pourcentage_min = pourcentage_min; //Idem
mode.pourcentage_max = pourcentage_max; //Idem
pinMode(mode.pin_button, INPUT); //définir le pin du bouton comme une entrée
pinMode(mode.pin_led, OUTPUT); //et le pin de la led comme une sortie, sinon ça marche pas.
}
void init_modes(){
// _________________________________ Gestion des Modes _____________________________________________
// variable btn led nom min max
create_mode(mode_silent , 23, 22, "Silent" , 0 , 30 ); //En mode Silent, pourcentage de marche ventilateur maximal
create_mode(mode_normal , 25, 24, "Normal" , 30 , 60 ); //En mode Normal, pourcentage de marche ventilateur maximal
create_mode(mode_heavy , 27, 26, "Heavy" , 60 , 95 ); //En mode Heavy, pourcentage de marche ventilateur maximal
create_mode(mode_extreme , 29, 28, "Extreme" , 95 , 100 ); //En mode Extreme, pourcentage de marche ventilateur maximal
// alume la led du mode selectionné dès le debut
digitalWrite(selected_mode->pin_led, HIGH);
}
void mode_up() {
for (int i = 0; i < nb_modes - 1; ++i){
if(selected_mode == modes[ i ]) {
switch_mode(modes[ i + 1 ]);
return;
}
}
}
void mode_down() {
for (int i = 1; i < nb_modes ; ++i){
if(selected_mode == modes[ i ]) {
switch_mode(modes[ i - 1 ]);
return;
}
}
}
void switch_mode(Mode *mode_appuye) {
// on set le mode actuel
selected_mode = mode_appuye;
// on eteinds toutes les leds
for (int i = 0; i < nb_modes; ++i){
digitalWrite(modes[i]->pin_led, LOW);
}
// on ralume le mode selectionné
digitalWrite(selected_mode->pin_led, HIGH);
// on affiche engage
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(selected_mode->name);
lcd.setCursor(0, 1);
lcd.print("Engage");
delay(500);
lcd.clear();
}
// _______________________________________ REGULATION MODE __________________________________________________
//============================================================================================================//