/********************************
* Programmation d'un shifter *
* Avec 8 LED Neopixel *
********************************/
// Appel des bibliothèques
#include <Adafruit_NeoPixel.h>
// Attribution d'un nom explicite aux proches
#define pinNeopixel 2 // Broche Digital In du néopixel
#define pinPotar A0 // Broche du potentiomètre simulant le régime moteur
// Constantes
#define nbLed 16 // Nombre de LEDs du néopixel
// Déclaration Néopixel
Adafruit_NeoPixel pixels(nbLed, pinNeopixel, NEO_GRB + NEO_KHZ800);
// Variables
int couleurLed[nbLed][3];
// Fonctions spécifiques
// Animation du ruban NeoPixel à l'initialisation
void animation(int R = 0, int V = 0, int B = 255) {
int delayAnim = 75;
pixels.clear();
for (int i = 0 ; i < nbLed ; i++) {
pixels.setPixelColor(i, pixels.Color(R, V, B));
//pixels.setPixelColor(i, pixels.Color(couleurLed[i][0],couleurLed[i][1],couleurLed[i][2]));
pixels.show();
delay(delayAnim);
}
delay(delayAnim*3);
for (int i = nbLed-1; i >= 0 ; i--) {
pixels.setPixelColor(i, pixels.Color(0, 0, 0));
pixels.show();
delay(delayAnim);
}
delay(delayAnim*3);
}
// Initialisation des couleurs de LEDs par défaut
void initCouleurLed() {
for (int i = 0 ; i < nbLed ; i++) {
couleurLed[i][0] = map(i,0,nbLed-1,0,255); // Rouge
couleurLed[i][1] = map(i,0,nbLed-1,255,0); // Vert
couleurLed[i][2] = 0; // Bleu
}
}
// Affichage du shifter
void afficheLed(int pc = 100) {
pixels.clear();
if (pc <= 80) {
for (int i = 0; i< map(pc,0,80,1,nbLed+1); i++) {
pixels.setPixelColor(i, pixels.Color(couleurLed[i][0],couleurLed[i][1],couleurLed[i][2]));
}
}
else if (pc <= 90) {
for (int i = 0 ; i< nbLed ; i++) {
pixels.setPixelColor(i, pixels.Color(255, 0, 0));
}
}
else {
if (millis()%150 < 75) {
for (int i = 0 ; i< nbLed ; i++) {
pixels.setPixelColor(i, pixels.Color(255, 0, 0));
}
}
}
pixels.show();
}
void setup()
{
Serial.begin(115200);
pinMode(pinPotar, INPUT);
pinMode(pinNeopixel, OUTPUT);
pixels.begin();
initCouleurLed();
animation();
}
void loop(){
int RPMpc = analogRead(pinPotar) * 100.0 / 1023;
Serial.println(RPMpc);
afficheLed(RPMpc);
}