116 lines
3.6 KiB
C
116 lines
3.6 KiB
C
/*-------------------------------------------------------------------
|
|
Project: InsoL@b
|
|
Author : user@B0 mail@nowhere.void
|
|
File : led_RGB.h 2026-04-23
|
|
This work is copyrighted under CERN Open Hardware Licence Version 2.
|
|
----------------------------------------------------------------------
|
|
Aqua #00FFFF 0% 100% 100% 180° 100% 50% 100% 100% 11 (high cyan); cyan
|
|
Teal #008080 0% 50% 50% 180° 100% 25% 100% 50% 03 (low cyan)
|
|
Blue #0000FF 0% 0% 100% 240° 100% 50% 100% 100% 09 (high blue)
|
|
Navy #000080 0% 0% 50% 240° 100% 25% 100% 50% 01 (low blue)
|
|
Fuchsia #FF00FF 100% 0% 100% 300° 100% 50% 100% 100% 13 (high magenta); magenta
|
|
Purple #800080 50% 0% 50% 300° 100% 25% 100% 50% 05 (low magenta)
|
|
---------------------------------------------------------------------*/
|
|
#ifndef _INSOLAB_LEDRGB_H_
|
|
#define _INSOLAB_LEDRGB_H_
|
|
#include <SPI.h>
|
|
#include <Adafruit_NeoPixel.h>
|
|
#define PIN 16 // RGB LED (WS2812) clone of Waveshare rp2040-zero.
|
|
#define NUMPIXELS 1
|
|
Adafruit_NeoPixel pixels(
|
|
NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
|
|
enum {NONE, RED, YELLOW, ORANGE, GREEN, BLUE, PINK, FUCHS, BLANK};
|
|
int ledColor = NONE;
|
|
int ledMax=2;
|
|
|
|
void ledInit() {
|
|
pixels.begin();
|
|
pixels.setPixelColor(0, pixels.Color(0, 0, 0));
|
|
pixels.show();
|
|
delay(100);
|
|
}
|
|
void ledRGB(int rgb) {
|
|
switch (rgb) {
|
|
case RED: pixels.setPixelColor(0, pixels.Color(ledMax, 0, 0));
|
|
break;
|
|
case YELLOW: pixels.setPixelColor(0, pixels.Color(ledMax, ledMax, 0));
|
|
break;
|
|
case ORANGE: pixels.setPixelColor(0, pixels.Color(ledMax, 1, 0));
|
|
break;
|
|
case GREEN: pixels.setPixelColor(0, pixels.Color(0, ledMax, 0));
|
|
break;
|
|
case BLUE: pixels.setPixelColor(0, pixels.Color(0, ledMax, ledMax)); // AQUA
|
|
break;
|
|
case PINK: pixels.setPixelColor(0, pixels.Color(1,0,3)); // (1,0,2));
|
|
break; // pink color (255, 192, 203) deep pink (255, 20, 147)
|
|
case FUCHS: pixels.setPixelColor(0, pixels.Color(ledMax,0,ledMax)); // FUCHSIA
|
|
break;
|
|
case BLANK: pixels.setPixelColor(0, pixels.Color(1, 1, 1));
|
|
break;
|
|
case NONE: pixels.setPixelColor(0, pixels.Color(0, 0, 0));
|
|
break;
|
|
}
|
|
pixels.show(); delay(100);
|
|
}
|
|
void ledScale(int rgb, int first, int aim, int inc, int period) {
|
|
int i = first;
|
|
do {
|
|
i = i + inc;
|
|
switch (rgb) {
|
|
case RED:
|
|
pixels.setPixelColor(0, pixels.Color(i, 0, 0));
|
|
break;
|
|
case GREEN:
|
|
pixels.setPixelColor(0, pixels.Color(0, i, 0));
|
|
break;
|
|
case BLUE:
|
|
pixels.setPixelColor(0, pixels.Color(0, 0, i));
|
|
break;
|
|
case BLANK:
|
|
pixels.setPixelColor(0, pixels.Color(i, i, i));
|
|
break;
|
|
}
|
|
pixels.show(); delay(period);
|
|
} while (i != aim );
|
|
}
|
|
|
|
|
|
uint16_t hue = 0; uint8_t sat = 0, val = 0;
|
|
int32_t couleur = 0;
|
|
|
|
void ledTest() {
|
|
int period=12;
|
|
switch (ledColor) {
|
|
case NONE:
|
|
for (val = 10; val < 50; val += 10) {
|
|
for (sat = 10; sat < 50; sat += 10) {
|
|
couleur = pixels.ColorHSV(765, sat, val);
|
|
pixels.setPixelColor(0, couleur);
|
|
pixels.show();
|
|
delay(6);
|
|
}
|
|
}
|
|
break;
|
|
case RED:
|
|
ledScale(RED, 1, 200, 1, period);
|
|
ledScale(RED, 200, 1, -1, period);
|
|
break;
|
|
case GREEN:
|
|
ledScale(GREEN, 1, 200, 1, period);
|
|
ledScale(GREEN, 200, 1, -1, period);
|
|
break;
|
|
case BLUE:
|
|
ledScale(BLUE, 1, 200, 1, period);
|
|
ledScale(BLUE, 200, 1, -1, period);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
ledColor++;
|
|
if (ledColor == 4) {
|
|
ledColor = NONE;
|
|
}
|
|
delay(1000);
|
|
}
|
|
#endif
|