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 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268
| #include "Adafruit_NeoPixel.h" // Bibliothèque du ruban Led
#define PIN 3 // Pin des DATA pour le ruban RGB
#define LEDS 84 // Nombre de Led
#define DELAY_MS (50) // Délai de 50 ms
#define NO_BUTTON (0) // Numéro donné si aucun BP poussé
#define BUTTON_1 (1) // Numéro donné si BP poussé est 1
#define BUTTON_2 (2) // Numéro donné si BP poussé est 2
#define BUTTON_3 (3) // Numéro donné si BP poussé est 3
#define BUTTON_4 (4) // Numéro donné si BP poussé est 4
#define BUTTON_5 (5) // Numéro donné si BP poussé est 5
#define BUTTON_RESET (6) // Numéro donné si BP poussé est Reset
#define BUTTON_Change_Digit (7)
const int MIN_VALUE = 0; // Chiffre Minimum à afficher
const int MAX_VALUE = 10; // Chiffre Maximum à afficher
const int pin1 = A0; // Pin BP 1
const int pin2 = A1; // Pin BP 2
const int pin3 = A2; // Pin BP 3
const int pin4 = A3; // Pin BP 4
const int pin5 = A4; // Pin BP 5
const int pinReset = A5; // Pin BP Reset
const int Pin_Led_Digit_G = 8; // Pin de la Led Indication Digit G activé
const int Pin_Led_Digit_D = 9; // Pin de la Led Indication Digit D activé
const int InterPin1 = 7; // Pin de l'interrupteur pour sélection Digits Gauche ou Droit
const byte lesSegments_Digit_1[] =
{
0b0111111, // chiffre 0 la lecture des segments se fait de droite à gauche 7-6-5-4-3-2-1
0b0001100, // chiffre 1
0b1110110, // chiffre 2
0b1011110, // chiffre 3
0b1001101, // chiffre 4
0b1011011 // chiffre 5
};
const byte lesSegments_Digit_2[] =
{
0b0111111, // chiffre 0 la lecture des segments se fait de droite à gauche 7-6-5-4-3-2-1
0b0001100, // chiffre 1
0b1110110, // chiffre 2
0b1011110, // chiffre 3
0b1001101, // chiffre 4
0b1011011 // chiffre 5
};
const byte nombreDeSegments_Digit_1 = sizeof lesSegments_Digit_1;
const byte nombreDeSegments_Digit_2 = sizeof lesSegments_Digit_2;
//Serial.println(nombreDeSegments);
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LEDS, 3, NEO_GRB + NEO_KHZ800);
boolean Inter_Change_Digit; // Variable Boolean pour le changement du Digit
void setup()
{
Serial.begin(115200); // Vitesse du Port sériel
pinMode(pin1, INPUT_PULLUP); // Défini la pin A0 en Input_PullUp
pinMode(pin2, INPUT_PULLUP); // Défini la pin A1 en Input_PullUp
pinMode(pin3, INPUT_PULLUP); // Défini la pin A2 en Input_PullUp
pinMode(pin4, INPUT_PULLUP); // Défini la pin A3 en Input_PullUp
pinMode(pin5, INPUT_PULLUP); // Défini la pin A4 en Input_PullUp
pinMode(pinReset, INPUT_PULLUP); // Défini la pin A5 en Input_PullUp
pinMode(Pin_Led_Digit_G, OUTPUT); // Pin 8
pinMode(Pin_Led_Digit_D, OUTPUT); // Pin 9
pinMode(InterPin1,INPUT_PULLUP);
Inter_Change_Digit = false; // Met la variable à False
}
int curValue_Digit_1 = 0; // Valeur du Digit 1 au Démarrage est 0
int curValue_Digit_2 = 0; // Valeur du Digit 2 au Démarrage est 0
void loop() // Boucle Principale
{
//Serial.println(PIN_Ruban);
int keyPressed = scanButtons();
if(keyPressed == BUTTON_Change_Digit)
{
Inter_Change_Digit = !Inter_Change_Digit; // Inverse l'état de la variable Boolean Inter_Change_Digit
strip.clear(); // Eteint toutes les Led
curValue_Digit_1 = 0;
curValue_Digit_2 = 0;
}
if(keyPressed == BUTTON_1) // BP 1 Pressé
{
strip.clear(); // Eteint toutes les Led
curValue_Digit_1 = 1; //
curValue_Digit_2 = 1;
}
if(keyPressed == BUTTON_2) // BP 2 Pressé
{
strip.clear(); // Eteint toutes les Led
curValue_Digit_1 = 2; //
curValue_Digit_2 = 2; //
}
if(keyPressed == BUTTON_3) // BP 3 Pressé
{
strip.clear(); // Eteint toutes les Led
curValue_Digit_1 = 3; //
curValue_Digit_2 = 3; //
}
if(keyPressed == BUTTON_4) // BP 4 Pressé
{
strip.clear(); // Eteint toutes les Led
curValue_Digit_1 = 4; //
curValue_Digit_2 = 4; //
}
if(keyPressed == BUTTON_5) // BP 5 Pressé
{
strip.clear(); // Eteint toutes les Led
curValue_Digit_1 = 5; //
curValue_Digit_2 = 5; //
}
if(keyPressed == BUTTON_RESET) // BP Reset Pressé
{
strip.clear(); // Eteint toutes les Led
curValue_Digit_1 = MIN_VALUE; // On donne à la variable la valeur 0
curValue_Digit_2 = MIN_VALUE; // On donne à la variable la valeur 0
}
//Serial.print(F("Etat de l'interrupteur "));
//Serial.println(Inter_Change_Digit); // Affichage de la valeur de curValue
if (Inter_Change_Digit)
{
afficher_Digit_2(curValue_Digit_2); // Va à la procédure afficher pour afficher le chiffre dans la variable curValue
}
else
{
afficher_Digit_1(curValue_Digit_1); // Va à la procédure afficher pour afficher le chiffre dans la variable curValue
}
delay(DELAY_MS);
}
void afficher_Digit_1(const byte chiffre) // Procédure Afficher Digit 1 (Gauche)
{
digitalWrite(Pin_Led_Digit_G,HIGH); // Allume le Led G pour indiquer que le Digit G est actionné
digitalWrite(Pin_Led_Digit_D,LOW); // Eteint le Led D pour indiquer que le Digit D n'est plus actionné
if (chiffre < nombreDeSegments_Digit_1) // Nombre de segment = 6 (de 1 à 6, chiffre de 0 à 5)
{Serial.println(nombreDeSegments_Digit_1); //
for (byte segment = 0; segment < 7; segment++) // segment = barre de Led (démarrage;fin;+1)
{ // Débur For
if (bitRead(lesSegments_Digit_1[chiffre], segment) == 0)
{
// le segment est éteint
} else
{
// le segment est allumé
int Num_Led = (6 * segment); // Numéro de la Led de démarrage du segment à afficher
for(Num_Led ; Num_Led <((6 * segment)+6); (Num_Led++)) // Boucle pour allumer les Led (N° Led début; N° Led fin;N° Led+1)
{ // Debut For
if (curValue_Digit_1 == 5)
{Serial.println(Num_Led);
strip.setPixelColor(Num_Led, 255, 0, 0); // (N° de la Led,Rouge,Vert,bleu) = Rouge
}
else if (curValue_Digit_1 == 4)
{Serial.println(Num_Led);
strip.setPixelColor(Num_Led, 255, 165, 0); // (N° de la Led,Rouge,Vert,bleu) = Orange
}
else if(curValue_Digit_1 < 4)
{
strip.setPixelColor(Num_Led, 0, 255, 0); // (N° de la Led,Rouge,Vert,bleu) = Vert
}
} // Fin For
strip.show(); // Affichage des segments avec la couleur
}
}
}
}
void afficher_Digit_2(const byte chiffre) // Procédure Afficher Digit 2 (Droite)
{
digitalWrite(Pin_Led_Digit_D,HIGH); // Allume le Led D pour indiquer que le Digit D est actionné
digitalWrite(Pin_Led_Digit_G,LOW); // Eteint le Led G pour indiquer que le Digit G n'est plus actionné
if (chiffre < nombreDeSegments_Digit_2) // Nombre de segment = 6 (de 1 à 6, chiffre de 0 à 5)
{Serial.println(nombreDeSegments_Digit_2); //
for (byte segment = 0; segment < 7; segment++) // segment = barre de Led (démarrage;fin;+1)
{ Serial.println(segment);
if (bitRead(lesSegments_Digit_2[chiffre], segment) == 0)
{
// le segment est éteint
} else
{
// le segment est allumé
int Num_Led = (6 * (segment)); // Numéro de la Led de démarrage du segment à afficher
Num_Led = Num_Led + 42; // Ajout de 42 car 2° Digit démarre à la Led 42
for(Num_Led ; Num_Led <((6 * segment)+48); (Num_Led++)) // Boucle pour allumer les Led (N° Led début; N° Led fin;N° Led+1)
{
// Debut For
if (curValue_Digit_2 == 5)
{
strip.setPixelColor(Num_Led, 255, 0, 0); // (N° de la Led,Rouge,Vert,bleu) = Rouge
}
else if (curValue_Digit_2 == 4)
{
strip.setPixelColor(Num_Led, 255, 165, 0); // (N° de la Led,Rouge,Vert,bleu) = Orange
}
else if(curValue_Digit_2 < 4)
{
strip.setPixelColor(Num_Led, 0, 255, 0); // (N° de la Led,Rouge,Vert,bleu) = Vert
}
} // Fin For
strip.show(); // Affichage des segments avec la couleur
}
}
}
}
int scanButtons()
{
int buttonPressed = NO_BUTTON;
if(digitalRead(InterPin1)==LOW) // Si on appuie sur le BP pour le changement du Digit
buttonPressed = BUTTON_Change_Digit;
else if(digitalRead(pin1)==LOW) // Si on appuie sur le BP 1
buttonPressed = BUTTON_1;
else if(digitalRead(pin2)==LOW) // Si on appuie sur le BP 2
buttonPressed = BUTTON_2;
else if(digitalRead(pin3)==LOW) // Si on appuie sur le BP 3
buttonPressed = BUTTON_3;
else if(digitalRead(pin4)==LOW) // Si on appuie sur le BP 4
buttonPressed = BUTTON_4;
else if(digitalRead(pin5)==LOW) // Si on appuie sur le BP 5
buttonPressed = BUTTON_5;
else if(digitalRead(pinReset)==LOW) // Si on appuie sur le BP Reset
buttonPressed = BUTTON_RESET;
if(buttonPressed!=NO_BUTTON) // Si on appuie sur aucun BP
{
while( (digitalRead(pin1)==LOW) ||
(digitalRead(pin2)==LOW) ||
(digitalRead(pin3)==LOW) ||
(digitalRead(pin4)==LOW) ||
(digitalRead(pin5)==LOW) ||
(digitalRead(InterPin1)==LOW) ||
(digitalRead(pinReset)==LOW)
)
{
delay(DELAY_MS); // Pour éviter une redondance
strip.clear(); // Eteint toutes les Led
}
}
return buttonPressed; // Retourne à la procédure buttonPressed
} |
Partager