29-06-2020, 21:25
Witam, zainspirowany filmikiem na yt postanowiłem wykonać podświetlenie monitora oraz biurka ledami adresowalnymi.
Podświetlenie monitora 103 diody ws2818b
Podświetlenie blatu biurka 69 diod ws2818b
Diody z monitora podpięte są pod PIN 6 a z blatu pod pin 8.
Mój problem polega na tym że nie wiem jak odpowiednio zaprogramować arduino aby jednocześnie monitor działał jako "ambilight"
a blat biurka podświetlał się w trybie "rainbow cycle"
Gdy wgram wgram tylko jedna opcję to działa prawidłowo, lecz chcę aby działało to jednocześnie.
Kod
Podświetlenie monitora 103 diody ws2818b
Podświetlenie blatu biurka 69 diod ws2818b
Diody z monitora podpięte są pod PIN 6 a z blatu pod pin 8.
Mój problem polega na tym że nie wiem jak odpowiednio zaprogramować arduino aby jednocześnie monitor działał jako "ambilight"
a blat biurka podświetlał się w trybie "rainbow cycle"
Gdy wgram wgram tylko jedna opcję to działa prawidłowo, lecz chcę aby działało to jednocześnie.
Kod
Kod:
#include "FastLED.h"
#define NUM_LEDS_monitor 103
#define DATA_PIN_monitor 6
#define NUM_LEDS_pasek 69
#define DATA_PIN_pasek 8
#define serialRate 115200
uint8_t prefix[] = {'A', 'd', 'a'}, hi, lo, chk, i;
CRGB leds_monitor[NUM_LEDS_monitor];
CRGB leds_pasek[NUM_LEDS_pasek];
void setup() {
FastLED.addLeds<NEOPIXEL, DATA_PIN_monitor>(leds_monitor, NUM_LEDS_monitor);
FastLED.addLeds<NEOPIXEL, DATA_PIN_pasek>(leds_pasek, NUM_LEDS_pasek);
// Initial RGB flash
LEDS.showColor(CRGB(255, 0, 0));
delay(500);
LEDS.showColor(CRGB(0, 255, 0));
delay(500);
LEDS.showColor(CRGB(0, 0, 255));
delay(500);
LEDS.showColor(CRGB(0, 0, 0));
Serial.begin(serialRate);
Serial.print("Ada\n");
}
void loop() {
rainbowCycle(20);
for(i = 0; i < sizeof prefix; ++i) {
waitLoop: while (!Serial.available()) ;;
if(prefix[i] == Serial.read()) continue;
i = 0;
goto waitLoop;
}
while (!Serial.available()) ;;
hi=Serial.read();
while (!Serial.available()) ;;
lo=Serial.read();
while (!Serial.available()) ;;
chk=Serial.read();
if (chk != (hi ^ lo ^ 0x55)) {
i=0;
goto waitLoop;
}
memset(leds_monitor, 0, NUM_LEDS_monitor * sizeof(struct CRGB));
for (uint8_t i = 0; i < NUM_LEDS_monitor; i++) {
byte r, g, b;
while(!Serial.available());
r = Serial.read();
while(!Serial.available());
g = Serial.read();
while(!Serial.available());
b = Serial.read();
leds_monitor[i].r = r;
leds_monitor[i].g = g;
leds_monitor[i].b = b;
}
FastLED.show();
}
void rainbowCycle(int SpeedDelay) {
byte *c;
uint16_t i, j;
for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
for(i=0; i< NUM_LEDS_pasek; i++) {
c=Wheel(((i * 256 / NUM_LEDS_pasek) + j) & 255);
setPixel(i, *c, *(c+1), *(c+2));
}
showStrip();
delay(SpeedDelay);
}
}
byte * Wheel(byte WheelPos) {
static byte c[3];
if(WheelPos < 85) {
c[0]=WheelPos * 3;
c[1]=255 - WheelPos * 3;
c[2]=0;
} else if(WheelPos < 170) {
WheelPos -= 85;
c[0]=255 - WheelPos * 3;
c[1]=0;
c[2]=WheelPos * 3;
} else {
WheelPos -= 170;
c[0]=0;
c[1]=WheelPos * 3;
c[2]=255 - WheelPos * 3;
}
return c;
}
void setPixel(int Pixel, byte red, byte green, byte blue) {
leds_pasek[Pixel].r = red;
leds_pasek[Pixel].g = green;
leds_pasek[Pixel].b = blue;
}
void showStrip() {
FastLED.show();
}