Close

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ů

#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);
  }
}