123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244 |
- /*
- Bibliothèque pour l'annimation de leds sur une bande de leds.
- */
-
- #include <Adafruit_NeoPixel.h>
- #define PIN_LED D1
-
-
- // NeoPixel brightness, 0 (min) to 255 (max)
- #define BRIGHTNESS 255 // Set BRIGHTNESS to about 1/5 (max = 255)
-
-
-
- // Le nombre de pixels déclaré ici n'est pas important @FIXME
- // Le nombre de pixels utilisé est celui qui est stocké en EEPROM, à savoir LED_COUNT
- Adafruit_NeoPixel strip = Adafruit_NeoPixel(500, PIN_LED, NEO_GRB + NEO_KHZ800);
-
-
- struct Couleur {
- int R = 0;
- int V = 0;
- int B = 0;
- };
-
- // Fill strip pixels one after another with a color. Strip is NOT cleared
- // first; anything there will be covered pixel by pixel. Pass in color
- // (as a single 'packed' 32-bit value, which you can get by calling
- // strip.Color(red, green, blue) as shown in the loop() function above),
- // and a delay time (in milliseconds) between pixels.
- void LED_colorWipe(uint32_t color, int wait) {
- for (int i = 0; i < LED_COUNT; i++) { // For each pixel in strip...
- strip.setPixelColor(i, color); // Set pixel's color (in RAM)
- strip.show(); // Update strip to match
- delay(wait); // Pause for a moment
- }
- }
-
-
-
- // --------------------------------------------------------------------------------
- // Allume la led dont le numéro est passé en paramètre
- // et éteind la led précédente.
- void LED_AllumeLedNum( int led, int R, int V, int B) {
- strip.setPixelColor(led, strip.Color(R, V, B)); // Blanc
- strip.show();
- }
-
-
-
-
- // --------------------------------------------------------------------------------
- // Vérifie que la chaine est est bien un integer entre 0 et 255
- // Si c'est le cas on renvoie True, False sinon
- //
- boolean LED_isADigit(char* s) {
- char chaine[] = "rrr";
-
- int i = 0;
- for (i = 0; s[i]; i++) {
- chaine[i] = s[i]; // On construit la copie de la chaine passée en parametre
- }
- chaine[i] = s[i]; // Pour ne pas oublier le \0 de la fin
-
- char* couleur = NULL;
- couleur = strtok(chaine, ","); // On travail sur la copie
- while (couleur != NULL) {
- // Convertion de la chaine en integer
- // Si l'integer n'est pas compris en 0 et 255 ...
- if (atoi( couleur ) < 0 or atoi( couleur ) > 255 ) {
- // ... on a pas une couleur, on sort du test
- return false;
- }
- couleur = strtok(NULL, ",");
- }
- return true;
- }
-
-
- // --------------------------------------------------------------------------------
- // Vérifie que la chaine est est bien une couleur du style R,V,B
- // Si c'est le cas on renvoie True, False sinon
- //
- boolean LED_isAColor(char* s) {
- char chaine[] = "rrr,bbb,vvv";
-
- // On compte les virgules dans la chaine
- int i, count = 0;
- for (i = 0; s[i]; i++) {
- if (s[i] == ',') {
- count++;
- }
- chaine[i] = s[i]; // On construit la copie de la chaine passée en parametre
- }
- chaine[i] = s[i]; // Pour na pas oublier le \0 de la fin
-
- // on a bien 2 virgules
- if (count == 2 ) {
- char* couleur = NULL;
-
- couleur = strtok(chaine, ","); // On travail sur la copie
- while (couleur != NULL) {
- // Convertion de la chaine en integer
- // Si l'integer n'est pas compris en 0 et 255 ...
- if (atoi( couleur ) < 0 or atoi( couleur ) > 255 ) {
- // ... on a pas une couleur, on sort du test
- return false;
- }
- couleur = strtok(NULL, ",");
- }
- } else {
- return false;
- }
- return true;
- }
-
- // --------------------------------------------------------------------------------
- // Convertie la chaine RVB en une couleur.
- // @return Color
- Couleur LED_ExtractRVB(char* s) {
- // Définition d'une couleur
- Couleur c;
-
- char* couleur = strtok(s, ",");
- int count = 0;
- while (couleur != NULL) {
- if (count == 0) {
- c.R = atoi(couleur);
- } else if (count == 1) {
- c.V = atoi(couleur);
- } else if (count == 2) {
- c.B = atoi(couleur);
- }
- count ++;
- couleur = strtok(NULL, ",");
- }
-
- return c;
- }
-
-
-
- // Input a value 0 to 255 to get a color value.
- // The colours are a transition r - g - b - back to r.
- uint32_t Wheel(byte WheelPos) {
- WheelPos = 255 - WheelPos;
- if (WheelPos < 85) {
- return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
- }
- if (WheelPos < 170) {
- WheelPos -= 85;
- return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
- }
- WheelPos -= 170;
- return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
- }
- void rainbow(uint8_t wait) {
- uint16_t i, j;
- for (j = 0; j < 256; j++) {
- for (i = 0; i < LED_COUNT; i++) {
- strip.setPixelColor(i, Wheel((i + j) & 255));
- }
- strip.show();
- delay(wait);
- }
- }
- // Slightly different, this makes the rainbow equally distributed throughout
- void rainbowCycle(uint8_t wait) {
- uint16_t i, j;
- for (j = 0; j < 256 * 1; j++) { // 5 cycles of all colors on wheel
- for (i = 0; i < LED_COUNT; i++) {
- strip.setPixelColor(i, Wheel(((i * 256 / LED_COUNT) + j) & 255));
- }
- strip.show();
- delay(wait);
- }
- }
- //Theatre-style crawling lights.
- void theaterChase(uint32_t c, uint8_t wait) {
- for (int j = 0; j < 10; j++) { //do 10 cycles of chasing
- for (int q = 0; q < 3; q++) {
- for (uint16_t i = 0; i < LED_COUNT; i = i + 3) {
- strip.setPixelColor(i + q, c); //turn every third pixel on
- }
- strip.show();
- delay(wait);
- for (uint16_t i = 0; i < LED_COUNT; i = i + 3) {
- strip.setPixelColor(i + q, 0); //turn every third pixel off
- }
- }
- }
- }
- //Theatre-style crawling lights with rainbow effect
- void theaterChaseRainbow(uint8_t wait) {
- DEBUG("LED_COUNT:"+String(LED_COUNT));
- for (int j = 0; j < 256; j++) { // cycle all 256 colors in the wheel
- for (int q = 0; q < 3; q++) {
- for (uint16_t i = 0; i < LED_COUNT; i = i + 3) {
- strip.setPixelColor(i + q, Wheel( (i + j) % 255)); //turn every third pixel on
- }
- strip.show();
- delay(wait);
- for (uint16_t i = 0; i < LED_COUNT; i = i + 3) {
- strip.setPixelColor(i + q, 0); //turn every third pixel off
- }
- }
- }
- }
-
-
-
- // --------------------------------------------------------------------------------
- // Fait une animation sur les leds en fonction du numéro passé en paramètre.
- // [1..9]
- //
- void LED_Animation(int num) {
- g_BOO_AnimationSeconde = false;
- DEBUG(num);
- switch ( num ) {
- case 0:
- LED_colorWipe(strip.Color(255, 255, 255), 20); // Blanc
- break;
- case 1:
- LED_colorWipe(strip.Color(0, 0, 255), 20); // Bleu
- break;
- case 2:
- theaterChase(strip.Color(0, 0, 255), 50);
- break;
- case 3:
- theaterChaseRainbow(50);
- break;
- case 4:
- rainbow(50);
- break;
- case 5:
- rainbowCycle(10);
- break;
- case 6:
- g_BOO_AnimationSeconde = true;
- break;
- default:
- DEBUG("Animation inconnue ->" + String(num) );
- break;
- }
- }
|