Hi,
ich habe eine eigene Android App programmiert, um meine Neopixel zu steuern. Ich habe ein HC-05 Bluetooth Modul verbaut, um die Daten, die ich von der App sende, empfangen kann.
Was funktioniert?
Die Verbindung steht, Daten können gesendet werden.
Was nicht funktioniert?
RGB Farbdaten werden nicht korrekt angezeigt, obwohl ich per Serial Monitor gesehen hab, dass die jeweiligen Werte empfangen wurden.
Java Code der App:
void SendRGB() {
if (btSocket != null) {
//sendSignal("" + (65536 * red.getProgress() + 256 * green.getProgress() + blue.getProgress()));
String redValue = String.format("%03d", red.getProgress());
String greenValue = String.format("%03d", green.getProgress());
String blueValue = String.format("%03d", blue.getProgress());
String signal = redValue + greenValue + blueValue;
sendSignal("s" + signal);
}
}
Dieser Code nimmt 3 Werte von dem jeweiligen Rot-, Grün- und Blaureglern in meiner App. Dessen Werte befinden sich zwischen 0 und 255. Was dann letztendlich gesendet wird sieht so aus:
Beispiel:
Rot: 100
Grün: 1
Blau: 40
signal = 100001040
sendSignal = s100001040
Arduino Code: (Im Code sind Kommentare für euch gemacht)
#include <Adafruit_NeoPixel.h>
#include <SoftwareSerial.h>
int LED_COUNT = 5;//60;
int redValue = 0;
int greenValue = 0;
int blueValue = 0;
bool power = true;
Adafruit_NeoPixel strip(LED_COUNT, 6, NEO_GRB + NEO_KHZ800);
void setup() {
//Serial.begin(38400);
Serial.begin(9600);
//strip.fill(strip.Color(255, 255, 255), 0, LED_COUNT);
strip.begin();
}
void loop(){
char received[10];
if (Serial.available() > 0) {
int i = 0;
while (Serial.available() > 0) {
received[i] = Serial.read();
Serial.write(received[i]); //<-------- Hier dran erkenne ich, dass alles richtig empfangen wird.
i++;
}
if (received[0] == 's') { //<-------- Es leuchtet etwas, wenn ich den Knopf zum senden in meiner App drücke funktioniert diese Abfrage
redValue = (received[1] << 16) + (received[2] << 8) + received[3]; //<------- Hier werden die ersten 3 Zahlen (Im Beispiel 1 0 0) genommen und in eine ganze Zahl umgeformt, also 100
greenValue = (received[4] << 16) + (received[5] << 8) + received[6]; //<-------- Hier werden die nächsten 3 Zahlen (Im Beispiel 0 0 4) genommen und in eine ganze Zahl umgeformt, also
blueValue = (received[7] << 16) + (received[8] << 8) + received[9]; //<------- U.s.w.
strip.setPixelColor(0, strip.Color(redValue, greenValue, blueValue));
}
strip.show();
}
}
Meiner Meinung nach vollkommen nachvollziehbar, jedoch funktioniert es nicht. Ich habe es auch schon mit einem direkten 32bit Color Integer versucht. Das hat aber leider auch nicht funktioniert...
Ich bedanke mich schonmal für euere Vorschläge.
Mit freundlichen Grüßen
Colin
