/*******************************************************
Dil 6 - Infra dálkový ovladač - rozšířený
Tento program testuje INFRA přijímač a dálkový ovladač KEYES
úprava © Aleš Müller, Březen 2014,
Verze 2
********************************************************/
//použité knihovny
#include "IRremote.h"
#include
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //piny pro displej
int receiver = 19; // pin 1 na IR přijímači na Arduino digital pin 19 (Arduino MEGA), pro UNO musíte upravit.
int sekundy = 0; // řádek, kde se mají vypisovat sekundy
int tlacitka = 1; // řádek, kde se mají vypisovat tlacitka
IRrecv irrecv(receiver); // vytvoříme instanci 'irrecv'
decode_results results; // vytvoříme instanci 'decode_results'
void setup()
{
Serial.begin(9600);
Serial.println("www.santy.cz");
Serial.println("Dil 6 - Infra cidlo dalkovy ovladac");
irrecv.enableIRIn(); // Start přijímače
lcd.begin(16, 2); // start knihovny pro LCD
lcd.setCursor(0,0); // sloupec 0 , řádek 0
lcd.print(" www.santy.cz "); // jednoduchý výpis na LCD
lcd.setCursor(0,1); // sloupec 0 , řádek 1
lcd.print(" Infra + 8xrele ");
delay(5000); // pauza 5 sec
lcd.clear(); // vymažeme displej
pinMode(23, OUTPUT); //relé číslo jedna, připojeno na pin 23
pinMode(25, OUTPUT); //a analogicky dále
pinMode(27, OUTPUT);
pinMode(29, OUTPUT);
pinMode(31, OUTPUT);
pinMode(33, OUTPUT);
pinMode(35, OUTPUT);
pinMode(37, OUTPUT);
}
void loop()
{
lcd.setCursor(0,sekundy); // sloupec 0 , řádek
lcd.print("Od startu - ");
lcd.print(millis()/1000);
lcd.setCursor(0,tlacitka); // sloupec 0 , řádek
lcd.print(" stisknete neco ");
if (irrecv.decode(&results)) // přijmul přijímač nějaký IR signál?
{
// Serial.println(results.value, HEX); // odkomentujte, chcete li vidět přímo přijatý signál, vhodné pro neznámé vysílače, TV apod.
translateIR();
irrecv.resume(); // a přijímáme další hodnoty
}
}
/*-----( Deklarace uživatelských funkcí )-----*/
void translateIR()
// popis pro KEYES dálkový ovladač - IR kódy
{
switch(results.value)
{
case 0xFF629D: Serial.println(" NAHORU"); break;
case 0xFF22DD: Serial.println(" LEVA"); break;
case 0xFF02FD: Serial.println(" -OK-"); prepniLCD(); break; //když tohle stisknuto voláme proceduru "prepniLCD"
case 0xFFC23D: Serial.println(" PRAVA"); break;
case 0xFFA857: Serial.println(" DOLU"); break;
case 0xFF6897: Serial.println(" 1"); prepniRele(23); break;
case 0xFF9867: Serial.println(" 2"); prepniRele(25); break;
case 0xFFB04F: Serial.println(" 3"); prepniRele(27); break;
case 0xFF30CF: Serial.println(" 4"); prepniRele(29); break;
case 0xFF18E7: Serial.println(" 5"); prepniRele(31); break;
case 0xFF7A85: Serial.println(" 6"); prepniRele(33); break;
case 0xFF10EF: Serial.println(" 7"); prepniRele(35); break;
case 0xFF38C7: Serial.println(" 8"); prepniRele(37); break;
case 0xFF5AA5: Serial.println(" 9"); VsechnaRele(true); break;
case 0xFF42BD: Serial.println(" * (HVEZDA)"); break;
case 0xFF4AB5: Serial.println(" 0"); VsechnaRele(false); break;
case 0xFF52AD: Serial.println(" # (KRIZEK)"); break;
case 0xFFFFFFFF: Serial.println(" OPAKOVANI PREDCHOZIHO ");break;
default:
Serial.println(" nezname tlacitko ");
}
delay(500); // NEDÁVEJTE MENŠÍ PAUZU !!
}
void prepniLCD () {
if(sekundy == 0){ //pokud je radek pro sekundy 0, změníme to na opačně
sekundy = 1;
tlacitka = 0;
lcd.clear(); // vymažeme displej
}else{
sekundy = 0;
tlacitka = 1;
lcd.clear(); // vymažeme displej
}
}
void prepniRele (int Cislo) { // přepni relé na pinu, který posíláme v proměnné Cislo
if(digitalRead(Cislo)){
digitalWrite(Cislo, LOW);
}else{
digitalWrite(Cislo, HIGH);
}
}
void VsechnaRele (boolean STAV) { //dle potreby vypneme anebo zapneme všechna relé
for (int i=23; i <= 37; i = i + 2){
if(STAV) digitalWrite(i, LOW);
if(!STAV) digitalWrite(i, HIGH);
delay(10);
}
}
/* ( THE END ) */