Hallo,
ich versuche einen LED-Streifen (WS2812B) mit Hilfe des Bluetooth Modul HC-05 zu steuern.
Die Kommunikation zwischen Handy-App und Seriellen Monitor funktioniert, allerdings kann ich den LED-Streifen nur einmal am Anfang ein- oder ausschalten. Vorher darf keine andere Nachricht verschickt worden sein. Wenn ich den LED-Streifen dann als nächstes wieder ausschalten möchte, funktioniert das nicht und ich bekomme die Rüchmeldung "LED turned on" drei mal auf mein Handy zurück.
ich habe gelesen, dass die Kommunikation per Bluetooth relativ langsam ist und das Programm in der Zeit weiterläuft. Könnte das das Problem sein?
#include <Arduino.h>
#include <SoftwareSerial.h>
#include <FastLED.h>
#define DATA_PIN 2
#define NUM_LEDS 9
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
#define VOLTS 5
#define MAX_MA 50
CRGB leds[NUM_LEDS];
const byte rxPin = 10;
const byte txPin = 11;
SoftwareSerial BTSerial(rxPin, txPin);
String messageBuffer = "";
String message = "";
bool messageErhalten = false;
bool LichtGeschaltet = false;
void setup()
{
FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);
//define pin modes for tx, rx:
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
BTSerial.begin(9600);
Serial.begin(38400); //38400 für hc-05
}
void loop()
{
erhalteMessage();
schalteLicht();
}
void erhalteMessage()
{
if (BTSerial.available() > 0)
{
char data = (char) BTSerial.read();
messageBuffer += data;
if (data == ';')
{
message = messageBuffer;
messageBuffer = "";
Serial.println(message); //send to serial monitor
}
messageErhalten = true;
}
else
{
messageErhalten = false;
}
delay(1000);
}
void schalteLicht()
{
if (messageErhalten == true)
{
if (message == "on;")
{
leds[0] = CRGB::AntiqueWhite;
leds[1] = CRGB::AntiqueWhite;
leds[2] = CRGB::AntiqueWhite;
leds[3] = CRGB::AntiqueWhite;
leds[4] = CRGB::AntiqueWhite;
leds[5] = CRGB::AntiqueWhite;
leds[6] = CRGB::AntiqueWhite;
leds[7] = CRGB::AntiqueWhite;
leds[8] = CRGB::AntiqueWhite;
FastLED.show();
BTSerial.println("LED turned on");
}
if (message == "off;")
{
leds[0] = CRGB::Black;
leds[1] = CRGB::Black;
leds[2] = CRGB::Black;
leds[3] = CRGB::Black;
leds[4] = CRGB::Black;
leds[5] = CRGB::Black;
leds[6] = CRGB::Black;
leds[7] = CRGB::Black;
leds[8] = CRGB::Black;
leds[9] = CRGB::Black;
FastLED.show();
BTSerial.println("LED turned off");
}
}
}