Odpověď na: adresovatelný led pásek, změna efektů
Úvodní stránka › Fórum › Vaše projekty › Arduino › adresovatelný led pásek, změna efektů › Odpověď na: adresovatelný led pásek, změna efektů
16.2.2017 v 20:13
#10509
Hint
Účastník
Tak po menší úpravě vašeho návrhu už zřejmě funguje jak má, přepíná po sériové lince i přes IR. Pokud to tedy chápu správně, místo použití příkazu switch mám použít vypsaní všech možností podmínkou if
a zárověň mě napadlo zda jde ještě nějak zapsat podmínka, když nepřijme data která má v podmínkach, neudělá nic a bude pokračovat v předchozím efektu. Uvědomil jsem si totiž že při ovladaní TV bude IR ovlivňovat i arduino přijímač a vypínat efekty.
#include <Adafruit_NeoPixel.h>
#include"IRremote2.h"
#define pinIN 4
#define PIN 6
// Parametr 1 = počet pixelů (LED diod) na pásek
// Parametr 2 = číslo PINu Arduina
// Parametr 3 = pixel type flags, add together as needed:
// NEO_KHZ800 800 KHz kmitočet pro pásky s WS2812 LED diodami)
// NEO_GRB Pixely jsou zasílány ve formátu GRB
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(36, 6, NEO_GRB + NEO_KHZ800);
IRrecv dalkoveOvl(pinIN);
decode_results vysledek;
char pozice;
void setup() {
pixels.begin();
Serial.begin(9600);
pixels.show();
delay(250);
dalkoveOvl.enableIRIn();
}
void loop()
{
if (dalkoveOvl.decode(&vysledek))
{
detekceKlaves();
dalkoveOvl.resume();
}
if (Serial.available() > 0)
{
pozice = Serial.read();
if(pozice == '1') blika();
if(pozice == '2') blika1();
}
}
void detekceKlaves()
{
if(vysledek.value == 0xFFA25D)
{
Serial.println("Stisknuto CH-");
blika();
// pauza pro přehlednější výpis
delay(500);
}
if(vysledek.value == 0xFFE21D)
{
Serial.println("Stisknuto CH-");
blika1();
// pauza pro přehlednější výpis
delay(500);
}
}
void blika()
{
dalkoveOvl.resume();
while(!(Serial.available() || dalkoveOvl.decode(&vysledek)))
{
pixels.setPixelColor(6, pixels.Color(255,255,255));
pixels.show();
delay(1000);
pixels.setPixelColor(6, pixels.Color(0,0,0));
pixels.show();
delay(200);
pixels.setPixelColor(6, pixels.Color(255,255,255));
pixels.show();
delay(1000);
pixels.setPixelColor(6, pixels.Color(0,0,0));
pixels.show();
delay(200);
}
}
void blika1()
{
dalkoveOvl.resume();
while(!(Serial.available() || dalkoveOvl.decode(&vysledek)))
{
pixels.setPixelColor(16, pixels.Color(255,255,255));
pixels.show();
delay(1000);
pixels.setPixelColor(16, pixels.Color(0,0,0));
pixels.show();
delay(200);
pixels.setPixelColor(16, pixels.Color(255,255,255));
pixels.show();
delay(1000);
pixels.setPixelColor(16, pixels.Color(0,0,0));
pixels.show();
delay(200);
}
}