Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Adafruit_NeoPixel.h> // naimportování knihoven
- #include <SoftwareSerial.h> // softwareserial knihovna
- #ifdef __AVR__
- #include <avr/power.h>
- #endif
- #define PIN 6 // Pin na WS pasek ledek
- #define LEDKA 13 // Ledka ON OFF
- #define LEDCNT 8 // Pocet ledek na pasku
- #define RX 2 // Pin spojený s RX u Bluetooth modulu
- #define TX 3 // Pin spojený s TX
- #define SVETLOST 60 // Svetlost pasku 0 - 255
- //#define DEBUG 1 // Zakomentovano - vypnuty serial debug
- Adafruit_NeoPixel strip = Adafruit_NeoPixel(LEDCNT, PIN , NEO_GRB + NEO_KHZ800); // init pasku
- SoftwareSerial BT(RX,TX); // port softwareserial na pinech (2RX 3TX)
- String RGB = "0.0.0)"; // řetězec příjímající data z Bluetooth
- String RGB_Previous = "255.255.255)"; //řetězec předposledních dat z BT
- String ON = "ON"; // zapni
- String OFF = "OFF"; //vypni
- boolean RGB_Completed = false;// ověření přijímaných dat
- void setup() {
- pinMode(LEDKA, OUTPUT);
- #if defined (__AVR_ATtiny85__)
- if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
- #endif
- strip.begin(); // start pásku
- strip.setBrightness(SVETLOST);
- BT.begin(9600); // start portu pro BT na 9600
- RGB.reserve(30);
- #ifdef DEBUG
- Serial.begin(9600); // start sériového portu na 9600
- #endif
- Light_RGB_LED();
- }
- void loop() {
- while(BT.available())
- { //pokud je BT přijal data
- char ReadChar = (char)BT.read(); // uloží se do ReadChar
- if(ReadChar == ')')
- { // když řetězec obsahuje ")"
- RGB_Completed = true; // byl přenos dat uspěšný
- }
- else
- { // pokud ne načte se zpět poslední hodnota
- RGB += ReadChar;
- }
- }
- if(RGB_Completed) //vypíše hodnotu RGB
- {
- #ifdef DEBUG
- Serial.print("RGB:");
- Serial.print(RGB);
- Serial.print(" PreRGB:");
- Serial.println(RGB_Previous);
- #endif
- if(RGB==ON)
- { // zapni
- digitalWrite(LEDKA,HIGH); // Rozsvit LED13
- RGB = RGB_Previous; // Nahod predchozi stav
- Light_RGB_LED(); // Preneseme na pasek
- }
- else
- if(RGB==OFF)
- { // vypni
- digitalWrite(LEDKA,LOW); // Zhasni LED13
- RGB = "0.0.0)"; // Vynulujeme
- Light_RGB_LED(); // Preneseme na pasek
- }
- else
- {
- Light_RGB_LED(); // Preneseme na pasek
- RGB_Previous = RGB; // Ulozime predchozi stav
- }
- RGB = ""; // reset proměnné pro příjem dat
- RGB_Completed = false;
- }
- }
- //konec loopu
- void Light_RGB_LED(){ // dekódování přijatých dat
- if(RGB.length()>4 && RGB.length()<11) // omezení čtení v rozsahu min a max délky správně načtených dat
- {
- //RGB_Previous=RGB;
- int SP1 = RGB.indexOf('.'); //uložení délky indexu pro hodnotu
- int SP2 = RGB.indexOf('.', SP1+1); //(SP1).(SP2).(SP3)
- int SP3 = RGB.indexOf('.', SP2+1); // když je RGB 255. 45 . 3 tak SP1=3 SP2=2 a SP3=1
- String R = RGB.substring(0, SP1); // převedení na jednotlivé hodnoty RGB
- String G = RGB.substring(SP1+1, SP2);
- String B = RGB.substring(SP2+1, SP3);
- #ifdef DEBUG
- Serial.print("R="); // vypíše samostatné hodnoty v RGB
- Serial.println( constrain(R.toInt(),0,255));
- Serial.print("G=");
- Serial.println(constrain(G.toInt(),0,255));
- Serial.print("B=");
- Serial.println( constrain(B.toInt(),0,255));
- #endif
- for(int i=0;i<8;i++) // for cyklus pro poslání dat do pásku
- { // máme 16 diod takže i=16
- strip.setPixelColor(i,R.toInt(),G.toInt(),B.toInt());
- }
- strip.show();// inicializace pásku po které začne svítit
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement