// Pro Mini 3.3V
// Blutooth pin 3 - RX, pin 4 - TX
// LED Strip 16 leds - pin 6 - DATA
// Lipo 3.7V
#include <Adafruit_NeoPixel.h>
#include <SoftwareSerial.h>
#define SERIAL_PORT_SPEED 115200
#define BT_PORT_SPEED 9600
#define PINLED 6
#define NumLED 16
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NumLED, PINLED, NEO_GRB + NEO_KHZ800);
int Mode = 0;
int ParameterR = 0;
int ParameterG = 0;
int ParameterB = 170;
int ParameterSpeed = 60;
int ParameterBrightness = 130;
String MsgBT = "";
String strTemp;
char c;
SoftwareSerial BT(3, 4);// RX | TX
void setup() {
strip.begin();
strip.setBrightness(ParameterBrightness);
strip.show(); // Initialize all pixels to 'off'
BT.begin(BT_PORT_SPEED);
Serial.begin(SERIAL_PORT_SPEED);
MsgBT.reserve(150);
}
void loop() {
if (BT.available())
{
MsgBT = BT.readString();
Serial.print("bytes read: ");
Serial.println(MsgBT.length());
Serial.println(MsgBT);
if (MsgBT == "999") { // Turn Off
TurnOff();
Mode = 1;
} else
{
strTemp = (MsgBT.substring(0, MsgBT.indexOf(",")));
ParameterR = strTemp.toInt();
MsgBT = MsgBT.substring(MsgBT.indexOf(",") + 1);
strTemp = (MsgBT.substring(0, MsgBT.indexOf(",")));
ParameterG = strTemp.toInt();
MsgBT = MsgBT.substring(MsgBT.indexOf(",") + 1);
strTemp = (MsgBT.substring(0, MsgBT.indexOf(",")));
ParameterB = strTemp.toInt();
MsgBT = MsgBT.substring(MsgBT.indexOf(",") + 1);
strTemp = (MsgBT.substring(0, MsgBT.indexOf(",")));
ParameterSpeed = strTemp.toInt();
MsgBT = MsgBT.substring(MsgBT.indexOf(",") + 1);
strTemp = (MsgBT.substring(0, MsgBT.indexOf("#")));
ParameterBrightness = strTemp.toInt();
Serial.print(ParameterR);
Serial.print(",");
Serial.print(ParameterG);
Serial.print(",");
Serial.print(ParameterB);
Serial.print(",");
Serial.print(ParameterSpeed);
Serial.print(",");
Serial.print(ParameterBrightness);
Serial.println();
Mode = 0;
MsgBT = "";
}
}
switch (Mode) {
case 0:
strip.setBrightness(ParameterBrightness);
strip.show();
if (ParameterSpeed == 400) {
for (uint16_t i = 0; i < strip.numPixels(); i++)
strip.setPixelColor(i, strip.Color(ParameterR, ParameterG, ParameterB));
strip.show();
Mode = 1;
}
else {
colorWipe(strip.Color(ParameterR, ParameterG, ParameterB), ParameterSpeed);
if (BT.available()) break;
colorWipe(strip.Color(0, 0, 0), ParameterSpeed);
}
break;
case 1:
Serial.println("Mode 1");
break;
}
}
// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
for (uint16_t i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, c);
strip.show();
if (BT.available()) return;
delay(wait);
}
}
void TurnOff() {
for (uint16_t i = 0; i < strip.numPixels(); i++)
strip.setPixelColor(i, strip.Color(0, 0, 0));
strip.show();
}
Comments
Please log in or sign up to comment.