Projekt: Infračervené ovládanie: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace |
|||
Riadok 21: | Riadok 21: | ||
[[Súbor:ParallaxIR_receiver.jpg|center]] | [[Súbor:ParallaxIR_receiver.jpg|center]] | ||
<source lang="c"> | |||
#include <IRremote.h> // kniznica pre IR ovladace - tuto treba pridat pretoze standardne nie je sucastou | |||
#include <LiquidCrystal.h> // include the library pre display | |||
// initialize the library with the numbers of the interface pins | |||
// LiquidCrystal(RS, RW, EN, D4, D5, D6, D7) // konkretne piny displaya | |||
LiquidCrystal lcd( 3, 2, 1, 4, 5, 6, 7); // piny na ktore sa pripaja display | |||
long int Button_1 = 1634762879; // kody konkretnych tlacitok v desiatkovej sustave ovladaca ORANGE | |||
long int Button_2 = 1634746559; // musi to byt typ long lebo int bol kratky | |||
long int Button_3 = 1634779199; | |||
long int Button_4 = 1634738399; | |||
long int Button_5 = 1634771039; | |||
long int Button_6 = 1634754719; | |||
long int Button_7 = 1634787359; | |||
long int Button_8 = 1634734319; | |||
long int Button_9 = 1634766959; | |||
long int Button_0 = 1634730239; | |||
long int Button_OK = 1634773079; | |||
long int Button_EXIT = 1634764919; | |||
long int Button_OFF = 1634748599; | |||
int count = 0; // premena pocitadka, teda kolko krat bolo jedno tlacitko stlacene (hodnoty 0 a 1) | |||
// takze kontrola ci uz je display zapnyty = 0 a ked vypnuty je 1 | |||
int LED = 13; // pin na ktorom je zlta ledka | |||
int RECV_PIN = 8; // pin na ktorom je zapojeny infra prijimac | |||
IRrecv irrecv(RECV_PIN); // toto je trieda v kotrej je aj funkcia na primanie signalu, nastavi primanie na ten pin teda na 8 | |||
decode_results results; // meno premenej do ktorej sa bude ukladat vysledok dekodovania | |||
long int incomming; // premnna do ktorej sa uklada hodnota PWM signalu z dialkoveho v desiatkovej sustave | |||
void setup() // tu zacina finkcia kotra zbehne iba raz ked sa zapne arduino | |||
{ | |||
//Serial.begin(9600); // musi byt zakomentovane aby fungoval display, AK je odkomentovany tak NEFUNGUJE display | |||
irrecv.enableIRIn(); // Start the receiver = inicializuje prijimanie signalu | |||
Serial.println("ZADAJ VOLBU :"); // vypis na seriovu linku | |||
pinMode(LED,OUTPUT); // to je jasne | |||
// set up the LCD's number of columns and rows: | |||
lcd.begin(8, 2); // inicializuje komunikaciu s LCD na 8 strplcov a 2 riadky | |||
lcd.clear(); // vymaze | |||
delay(500); // po vymazani pocka 0.5s | |||
// Print a message to the LCD. | |||
lcd.print("Cakam..."); // potom inicializ. vypise cakam ... | |||
} | |||
void loop() // hlavna slucka resp hlavny program | |||
{ | |||
if (irrecv.decode(&results)) | |||
{ | |||
Serial.println(results.value); | |||
incomming = (results.value); | |||
delay(500); | |||
irrecv.resume(); // Receive the next value | |||
} | |||
switch (incomming) { // porovnavanie hodnoty z incommingu na zaklade ktorej sa urcuje ktora akcia sa ma vykonat | |||
case 1634762879: //kod signalu v decimalnej hodnote pre button 1 (teda ak bol stlaceny) | |||
Serial.println("Stlacil si 1"); // kontrolny vypis na seriovu linku ked este nefungoval display, teraz nefunguje pretoze na zaciatku je riadok Serial.begin(9600); zakomentovany | |||
lcd.clear(); // vymazanie | |||
lcd.setCursor(0, 0); //nastavenie kurzora na poziciu 0, 0 | |||
lcd.print("Button 1"); // vypis na display Button 1 | |||
lcd.setCursor(0, 1); //nastavenie kurzora na poziciu 0, 1 | |||
lcd.print(Button_1,HEX); // vypis hodnoty kodu sihanlu ktory posiela ovladat ale v HEXa tvare pretoze display ma malo miesta na to aby zobrazil pozadoavne cislo v decimalnom ci dokonca v binarnom tvare | |||
break; | |||
case 1634746559: // ostatne sa uz opakuje len sa deju ine funkcie | |||
Serial.println("Stlacil si 2"); | |||
lcd.clear(); | |||
lcd.setCursor(0, 0); | |||
lcd.print("Button 2"); | |||
lcd.setCursor(0, 1); | |||
lcd.print(Button_2,HEX); | |||
break; | |||
case 1634779199: | |||
Serial.println("Stlacil si 3"); | |||
lcd.clear(); | |||
lcd.setCursor(0, 0); | |||
lcd.print("Button 3"); | |||
lcd.setCursor(0, 1); | |||
lcd.print(Button_3,HEX); | |||
break; | |||
case 1634738399: | |||
Serial.println("Stlacil si 4"); | |||
lcd.clear(); | |||
lcd.setCursor(0, 0); | |||
lcd.print("Button 4"); | |||
lcd.setCursor(0, 1); | |||
lcd.print(Button_4,HEX); | |||
break; | |||
case 1634771039: | |||
Serial.println("Stlacil si 5"); | |||
lcd.clear(); | |||
lcd.setCursor(0, 0); | |||
lcd.print("Button 5"); | |||
lcd.setCursor(0, 1); | |||
lcd.print(Button_5,HEX); | |||
break; | |||
case 1634754719: | |||
Serial.println("Stlacil si 6"); | |||
lcd.clear(); | |||
lcd.setCursor(0, 0); | |||
lcd.print("Button 6"); | |||
lcd.setCursor(0, 1); | |||
lcd.print(Button_6,HEX); | |||
break; | |||
case 1634787359: | |||
Serial.println("Stlacil si 7"); | |||
lcd.clear(); | |||
lcd.setCursor(0, 0); | |||
lcd.print("Button 7"); | |||
lcd.setCursor(0, 1); | |||
lcd.print(Button_7,HEX); | |||
break; | |||
case 1634734319: | |||
Serial.println("Stlacil si 8"); | |||
lcd.clear(); | |||
lcd.setCursor(0, 0); | |||
lcd.print("Button 8"); | |||
lcd.setCursor(0, 1); | |||
lcd.print(Button_8,HEX); | |||
break; | |||
case 1634766959: | |||
Serial.println("Stlacil si 9"); | |||
lcd.clear(); | |||
lcd.setCursor(0, 0); | |||
lcd.print("Button 9"); | |||
lcd.setCursor(0, 1); | |||
lcd.print(Button_9,HEX); | |||
break; | |||
case 1634730239: | |||
Serial.println("Stlacil si 0"); | |||
lcd.clear(); | |||
lcd.setCursor(0, 0); | |||
lcd.print("Button 0"); | |||
lcd.setCursor(0, 1); | |||
lcd.print(Button_0,HEX); | |||
break; | |||
case 1634773079: | |||
Serial.println("Stlacil si OK"); | |||
digitalWrite(LED,HIGH); | |||
lcd.clear(); | |||
lcd.setCursor(0, 0); | |||
lcd.print("LED ON"); // tu je akcia na viac, ktora zapne zltu ledku | |||
lcd.setCursor(0, 1); | |||
lcd.print(Button_OK,HEX); | |||
break; | |||
case 1634764919: | |||
Serial.println("Stlacil si EXIT"); | |||
digitalWrite(LED,LOW); | |||
lcd.clear(); | |||
lcd.setCursor(0, 0); | |||
lcd.print("LED OFF"); // tu je akcia na viac, ktora vypne zltu ledku | |||
lcd.setCursor(0, 1); | |||
lcd.print(Button_EXIT,HEX); | |||
break; | |||
case 1634748599: | |||
switch(count){ // tu je akcia ktora zapina alebo vypina display, teda meni sa hodnota count bud na 0 alebo na 1 (POWER tlacitko) | |||
case 0: | |||
lcd.noDisplay(); | |||
count++; // count je teraz 1 | |||
break; | |||
case 1: | |||
lcd.display(); | |||
count--; // count sa zmeni z 1 na 0 | |||
break; | |||
} | |||
break; | |||
case 0: | |||
//do nothing | |||
break; // ak je stlacene ine tlacitko ktore sa nenachadza hore v zozname tak akcia nie je ziadna akurat display vypise UNKNOWN a vypise aj hodnotu kodu v HEXa | |||
default: | |||
lcd.clear(); | |||
lcd.setCursor(0, 0); | |||
lcd.print("UNKNOWN"); | |||
lcd.setCursor(0, 1); | |||
lcd.print(incomming,HEX); | |||
Serial.println("Stlacil si EXIT"); | |||
break; | |||
} | |||
incomming = 0; // na konci slucky sa stara hodnota siganlu ovladaca vynuluje | |||
} | |||
<source> |
Verzia z 20:00, 31. január 2013
Sem príde správa z riešenia projektu.
Hodiny na orientačný beh
DVPS - infračervený príjmač
- Vypracovali:
- Bc. Martin Lacko
- Bc. Andrej Pecho
- Študijný odbor: Aplikovaná mechatronika
- Ročník: 2. Ing.
- Úloha:
- Naprogramujte prijímač infračerveného (IR) diaľkového (DO) ovládania. Vypracujte dokumentáciu (schéma zapojenia, zapojenie konektorov, popis funkcie obvodov, pripojenie k procesoru,...). Demonštrujte pochopenie funkcie jednoduchým programom: Po stlačení klávesy na DO zobrazíte jej hodnotu na displeji. Na niektoré tlačidlá pripojte aj inú funkciu - ovládanie LED, bzučiak, príp. ovládanie mobilného robota.
<source lang="c">
- include <IRremote.h> // kniznica pre IR ovladace - tuto treba pridat pretoze standardne nie je sucastou
- include <LiquidCrystal.h> // include the library pre display
// initialize the library with the numbers of the interface pins // LiquidCrystal(RS, RW, EN, D4, D5, D6, D7) // konkretne piny displaya LiquidCrystal lcd( 3, 2, 1, 4, 5, 6, 7); // piny na ktore sa pripaja display
long int Button_1 = 1634762879; // kody konkretnych tlacitok v desiatkovej sustave ovladaca ORANGE long int Button_2 = 1634746559; // musi to byt typ long lebo int bol kratky long int Button_3 = 1634779199; long int Button_4 = 1634738399; long int Button_5 = 1634771039; long int Button_6 = 1634754719; long int Button_7 = 1634787359; long int Button_8 = 1634734319; long int Button_9 = 1634766959; long int Button_0 = 1634730239; long int Button_OK = 1634773079; long int Button_EXIT = 1634764919; long int Button_OFF = 1634748599;
int count = 0; // premena pocitadka, teda kolko krat bolo jedno tlacitko stlacene (hodnoty 0 a 1)
// takze kontrola ci uz je display zapnyty = 0 a ked vypnuty je 1
int LED = 13; // pin na ktorom je zlta ledka int RECV_PIN = 8; // pin na ktorom je zapojeny infra prijimac IRrecv irrecv(RECV_PIN); // toto je trieda v kotrej je aj funkcia na primanie signalu, nastavi primanie na ten pin teda na 8 decode_results results; // meno premenej do ktorej sa bude ukladat vysledok dekodovania long int incomming; // premnna do ktorej sa uklada hodnota PWM signalu z dialkoveho v desiatkovej sustave
void setup() // tu zacina finkcia kotra zbehne iba raz ked sa zapne arduino {
//Serial.begin(9600); // musi byt zakomentovane aby fungoval display, AK je odkomentovany tak NEFUNGUJE display irrecv.enableIRIn(); // Start the receiver = inicializuje prijimanie signalu Serial.println("ZADAJ VOLBU :"); // vypis na seriovu linku pinMode(LED,OUTPUT); // to je jasne // set up the LCD's number of columns and rows: lcd.begin(8, 2); // inicializuje komunikaciu s LCD na 8 strplcov a 2 riadky lcd.clear(); // vymaze delay(500); // po vymazani pocka 0.5s // Print a message to the LCD. lcd.print("Cakam..."); // potom inicializ. vypise cakam ...
}
void loop() // hlavna slucka resp hlavny program {
if (irrecv.decode(&results)) { Serial.println(results.value); incomming = (results.value); delay(500); irrecv.resume(); // Receive the next value }
switch (incomming) { // porovnavanie hodnoty z incommingu na zaklade ktorej sa urcuje ktora akcia sa ma vykonat
case 1634762879: //kod signalu v decimalnej hodnote pre button 1 (teda ak bol stlaceny) Serial.println("Stlacil si 1"); // kontrolny vypis na seriovu linku ked este nefungoval display, teraz nefunguje pretoze na zaciatku je riadok Serial.begin(9600); zakomentovany lcd.clear(); // vymazanie lcd.setCursor(0, 0); //nastavenie kurzora na poziciu 0, 0 lcd.print("Button 1"); // vypis na display Button 1 lcd.setCursor(0, 1); //nastavenie kurzora na poziciu 0, 1 lcd.print(Button_1,HEX); // vypis hodnoty kodu sihanlu ktory posiela ovladat ale v HEXa tvare pretoze display ma malo miesta na to aby zobrazil pozadoavne cislo v decimalnom ci dokonca v binarnom tvare break; case 1634746559: // ostatne sa uz opakuje len sa deju ine funkcie Serial.println("Stlacil si 2"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Button 2"); lcd.setCursor(0, 1); lcd.print(Button_2,HEX); break; case 1634779199: Serial.println("Stlacil si 3"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Button 3"); lcd.setCursor(0, 1); lcd.print(Button_3,HEX); break; case 1634738399: Serial.println("Stlacil si 4"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Button 4"); lcd.setCursor(0, 1); lcd.print(Button_4,HEX); break; case 1634771039: Serial.println("Stlacil si 5"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Button 5"); lcd.setCursor(0, 1); lcd.print(Button_5,HEX); break; case 1634754719: Serial.println("Stlacil si 6"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Button 6"); lcd.setCursor(0, 1); lcd.print(Button_6,HEX); break; case 1634787359: Serial.println("Stlacil si 7"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Button 7"); lcd.setCursor(0, 1); lcd.print(Button_7,HEX); break; case 1634734319: Serial.println("Stlacil si 8"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Button 8"); lcd.setCursor(0, 1); lcd.print(Button_8,HEX); break; case 1634766959: Serial.println("Stlacil si 9"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Button 9"); lcd.setCursor(0, 1); lcd.print(Button_9,HEX); break; case 1634730239: Serial.println("Stlacil si 0"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Button 0"); lcd.setCursor(0, 1); lcd.print(Button_0,HEX); break; case 1634773079: Serial.println("Stlacil si OK"); digitalWrite(LED,HIGH); lcd.clear(); lcd.setCursor(0, 0); lcd.print("LED ON"); // tu je akcia na viac, ktora zapne zltu ledku lcd.setCursor(0, 1); lcd.print(Button_OK,HEX); break; case 1634764919: Serial.println("Stlacil si EXIT"); digitalWrite(LED,LOW); lcd.clear(); lcd.setCursor(0, 0); lcd.print("LED OFF"); // tu je akcia na viac, ktora vypne zltu ledku lcd.setCursor(0, 1); lcd.print(Button_EXIT,HEX); break; case 1634748599: switch(count){ // tu je akcia ktora zapina alebo vypina display, teda meni sa hodnota count bud na 0 alebo na 1 (POWER tlacitko) case 0: lcd.noDisplay(); count++; // count je teraz 1 break; case 1: lcd.display(); count--; // count sa zmeni z 1 na 0 break; } break; case 0: //do nothing break; // ak je stlacene ine tlacitko ktore sa nenachadza hore v zozname tak akcia nie je ziadna akurat display vypise UNKNOWN a vypise aj hodnotu kodu v HEXa default: lcd.clear(); lcd.setCursor(0, 0); lcd.print("UNKNOWN"); lcd.setCursor(0, 1); lcd.print(incomming,HEX); Serial.println("Stlacil si EXIT"); break; } incomming = 0; // na konci slucky sa stara hodnota siganlu ovladaca vynuluje
}
<source>