Ja es ist die Adafruit Library und setPixelColor hat die Parameter (x,y,R,G,B)
Es liegt aber zu 100% nicht am Arduino-Sketch, sondern am Processing-Sketch.
Und es ist ja kein wirklicher Fehler, da ich weiß, dass der Processing-Sketch die "unschönen" Werte an den Arduino sendet.
Trotzdem hier noch einmal der komplette Code:
#include "SPI.h"
#include "Adafruit_WS2801.h"
#include "string.h"
#define MAX_STRING_LEN 20
uint8_t dataPin = 2; // Yellow wire on Adafruit Pixels
uint8_t clockPin = 3; // Green wire on Adafruit Pixels
Adafruit_WS2801 strip = Adafruit_WS2801((uint16_t)7, (uint16_t)7, dataPin, clockPin);
int input;
int bar1,bar2,bar3,bar4,bar5,bar6,bar7=0;
void setup() {
Serial.begin(9600);
strip.begin();
strip.show();
}
void loop() {
if (Serial.available() >= 7) {
bar1 = Serial.read()-48;
bar2 = Serial.read()-48;
bar3 = Serial.read()-48;
bar4 = Serial.read()-48;
bar5 = Serial.read()-48;
bar6 = Serial.read()-48;
bar7 = Serial.read()-48;
}
rainbow(2);
}
void rainbow(uint8_t wait) {
int i, j;
for (j=0; j < 256; j++) { // 3 cycles of all 256 colors in the wheel
for (i=0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel( (i + j) % 255));
if (Serial.available() >= 7) {
bar1 = Serial.read()-48;
bar2 = Serial.read()-48;
bar3 = Serial.read()-48;
bar4 = Serial.read()-48;
bar5 = Serial.read()-48;
bar6 = Serial.read()-48;
bar7 = Serial.read()-48;
}
}
//clear not used leds
for (int i = bar1; i<7;i++){ strip.setPixelColor(i,0, 0, 0, 0); }
for (int i = bar2; i<7;i++){ strip.setPixelColor(i,1, 0, 0, 0); }
for (int i = bar3; i<7;i++){ strip.setPixelColor(i,2, 0, 0, 0); }
for (int i = bar4; i<7;i++){ strip.setPixelColor(i,3, 0, 0, 0); }
for (int i = bar5; i<7;i++){ strip.setPixelColor(i,4, 0, 0, 0); }
for (int i = bar6; i<7;i++){ strip.setPixelColor(i,5, 0, 0, 0); }
for (int i = bar7; i<7;i++){ strip.setPixelColor(i,6, 0, 0, 0); }
strip.show(); // write all the pixels out
delay(wait);
}
}
void rainbowCycle(uint8_t wait) {
int i, j;
for (j=0; j < 256 * 5; j++) { // 5 cycles of all 25 colors in the wheel
for (i=0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel( ((i * 256 / strip.numPixels()) + j) % 256) );
}
strip.show(); // write all the pixels out
delay(wait);
}
}
uint32_t Color(byte r, byte g, byte b)
{
uint32_t c;
c = r;
c <<= 8;
c |= g;
c <<= 8;
c |= b;
return c;
}
uint32_t Wheel(byte WheelPos)
{
if (WheelPos < 85) {
return Color(WheelPos * 3, 255 - WheelPos * 3, 0);
} else if (WheelPos < 170) {
WheelPos -= 85;
return Color(255 - WheelPos * 3, 0, WheelPos * 3);
} else {
WheelPos -= 170;
return Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
}