IR Sensor ovladani RGB barev jedním tlačítkem HEX

Odpovědět
Marthinius
Příspěvky: 3
Registrován: 14 kvě 2019, 13:50
Reputation: 0

IR Sensor ovladani RGB barev jedním tlačítkem HEX

Příspěvek od Marthinius » 14 kvě 2019, 14:05

Zdravím,

Snažím se zprovoznit ovádání RGB LED (PWM) přes IR přijímač pomocí dálkového ovladače. Vše funguje pomocí funkce switch case. Problém je, že tuto metodu jsem zprovoznil jen na různé druhy tlačítek na dálkové ovladači. Každé tlačítko má jiný HEX code.

Jak vypadá code pro ovládání různých barev (bílá (RGB-HIGH), fialová ...) pomocí jednoho tlačítka na dálkovém ovladači. Mám to v HEX 0x0F....

Tedy pro upřesnění při zmáčknutí jednoho tlačítka se vyšle signál k IR příjmači, který navolí barvu A, při dalším stisknutí stejného tlačítka navoli barvu B, pak barvu C atd...Tedy takové zacyklení....Jakmile dojde k poslední barvě, opět začne od barvy A....

PS: Zkouším to už 2 den, samozřejmě na netu toho je spoustu, ale vždy jedno tlačítko jedna barva... :|

Uživatelský avatar
SkullKeep
Příspěvky: 290
Registrován: 23 srp 2017, 18:51
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: IR Sensor ovladani RGB barev jedním tlačítkem HEX

Příspěvek od SkullKeep » 14 kvě 2019, 14:45

Jestli se nepletu tak dálkové ovládání vysíla víc než jeden kód po stisknutí talčítka. Možná toto video Using IR Remote Controls with the Arduino pomůže s problémem. Nejjednodužší řešení je posílat kódy co posílá ovladač vypisovat na seriový port a tam zjistit kde je chyba.
:twisted: :?: :arrow: :geek: P. Q. M.

Marthinius
Příspěvky: 3
Registrován: 14 kvě 2019, 13:50
Reputation: 0

Re: IR Sensor ovladani RGB barev jedním tlačítkem HEX

Příspěvek od Marthinius » 14 kvě 2019, 15:03

SkullKeep píše:
14 kvě 2019, 14:45
Jestli se nepletu tak dálkové ovládání vysíla víc než jeden kód po stisknutí talčítka. Možná toto video Using IR Remote Controls with the Arduino pomůže s problémem. Nejjednodužší řešení je posílat kódy co posílá ovladač vypisovat na seriový port a tam zjistit kde je chyba.
Měl jsem IR přijímač (vadný), co odesílal různá hex/dec data po zmáčknutí stejného tlačítka. Po výměně IR přijímače, problém zmizel. Po zmáčknutí tlačítka je kód stejný. Samozřejmě narazil jsem na pář případů na zahraničních fórech, kde skutečně přijali několik 32 bit HEX kódu na dané tlačítko. V mém případě to tak není.

Asi jsem to špatně napsal: Vše funguje, jen nevím, jak vypadá napsaný code pro danou funkci, kdy mám tlačítko na ovladač hex: 0xE0E0629B a ovládám s tím různé barvy. Jde mi o ten "code". Kdyby byl někdo ochoten mi napsat úryvek, jak to má vypadat...

Níže uvádím příklad pro různá tlačítka na dálkovém ovladači. Jak to upravit pro jedno tlačítko na různé barvy (zacyklení: counter++,) ?

Kód: Vybrat vše

#include <IRremote.h>
 
int RECV_PIN = 11;
int REDLED = 3;
int GREENLED = 5;
int BLUELED = 6;
 
IRrecv irrecv(RECV_PIN);
 
decode_results results;
 
void setup()
{
pinMode(REDLED,OUTPUT);
pinMode(GREENLED,OUTPUT);
pinMode(BLUELED,OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}
 
void loop()
{
if (irrecv.decode(&results))
{
Serial.println(results.value, HEX);
translateIR();
for (int z=0; z<2; z++) // ignore 2nd and 3rd signal repeat
{
irrecv.resume(); // receive the next value
}
}
}
 
void translateIR() // takes action based on IR code received
// describing Sony IR codes on LCD module
{
switch(results.value)
{
case 0xFF30CF: // TLAČÍTKO A
digitalWrite(REDLED,LOW);
break;
case 0xFF18E7: // TLAČÍTKO B
digitalWrite(GREENLED,LOW);
break;
case 0xFF7A85: //TLAČÍTKO C
digitalWrite(BLUELED,LOW);
break;
case 0xFFA25D: //TLAČÍTKO D
digitalWrite(REDLED,HIGH);
digitalWrite(GREENLED,HIGH);
digitalWrite(BLUELED,HIGH);
break;
default:
Serial.println("OTHER");
}
delay(500);
}

Uživatelský avatar
SkullKeep
Příspěvky: 290
Registrován: 23 srp 2017, 18:51
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: IR Sensor ovladani RGB barev jedním tlačítkem HEX

Příspěvek od SkullKeep » 14 kvě 2019, 15:54

No já mám asi blbý IR přijímač a proto jsem si upravil příjem v programu takhle:

Kód: Vybrat vše

#include <IRremote.h>

// Define sensor pin
#define RECV_PIN  7 //úspora místa paměti

// Define IR Receiver and Results Objects
IRrecv irrecv(RECV_PIN);
decode_results results;
String resca;
String def[4];
void setup() {
  // Serial Monitor @ 9600 baud
  Serial.begin(57600);
  // Enable the IR Receiver
  irrecv.enableIRIn();
}
void loop() {
  if (irrecv.decode(&results)) {
    resca = (results.value);
    def[4] = resca.substring(3, 7); //ořezání hodnoty
    if (def[4] != "4967") {//zábrana výpisu násobných hodnot
      Serial.println(def[4]);//výpis ořezané hodnoty
    }
    Serial.println(resca); //původní hodnota
    irrecv.resume();
  }
}
:twisted: :?: :arrow: :geek: P. Q. M.

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: IR Sensor ovladani RGB barev jedním tlačítkem HEX

Příspěvek od jankop » 14 kvě 2019, 18:12

No snad jsem pochopil o co ti jde, takhle by to mohlo fungovat:

Kód: Vybrat vše

#include <IRremote.h>
#define RECV_PIN  11
#define REDLED    3
#define GREENLED  5
#define BLUELED   6
int8_t counter = 0;
IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  pinMode(REDLED, OUTPUT);
  pinMode(GREENLED, OUTPUT);
  pinMode(BLUELED, OUTPUT);
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

void loop()
{
  if (irrecv.decode(&results))
  {
    Serial.println(results.value, HEX);
    translateIR();
    for (int z = 0; z < 2; z++) // ignore 2nd and 3rd signal repeat
    {
      irrecv.resume(); // receive the next value
    }
  }
}
void translateIR() // takes action based on IR code received
// describing Sony IR codes on LCD module
{
  if (results.value = 0xE0E0629B) {
    counter++;
    if (counter == 1) {
      digitalWrite(REDLED, LOW);
      digitalWrite(GREENLED, HIGH);
      digitalWrite(BLUELED, HIGH);
    }
    if (counter == 2) {
      digitalWrite(REDLED, HIGH);
      digitalWrite(GREENLED, LOW);
      digitalWrite(BLUELED, HIGH);
    }
    if (counter == 3) {
      digitalWrite(REDLED, HIGH);
      digitalWrite(GREENLED, HIGH);
      digitalWrite(BLUELED, LOW);
      counter = 0;
    }
  }
  //delay(500);
}
Pochopitelně digitalWrite() můžeš nahradit funkcí analogWrite() a počet podmínek rozšířit podle potřeby a mixovat libovolné barvy.

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: IR Sensor ovladani RGB barev jedním tlačítkem HEX

Příspěvek od jankop » 15 kvě 2019, 06:58

Vloudila se mi tam jedna zákeřná chyba. Řádek

Kód: Vybrat vše

if (results.value = 0xE0E0629B) 
má být pochopitelně

Kód: Vybrat vše

if (results.value == 0xE0E0629B) 

Marthinius
Příspěvky: 3
Registrován: 14 kvě 2019, 13:50
Reputation: 0

Re: IR Sensor ovladani RGB barev jedním tlačítkem HEX

Příspěvek od Marthinius » 15 kvě 2019, 09:14

jankop píše:
15 kvě 2019, 06:58
Zkoušel jsem to stejně, ale někde jsem dělal chybu....Vaše úprava funguje grandiózně. Opravdu Díky za pomoc ;)

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 14 hostů