Operácie

Projekt: Infračervené ovládanie: Rozdiel medzi revíziami

Zo stránky SensorWiki

StudentDVPS (diskusia | príspevky)
StudentDVPS (diskusia | príspevky)
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">

  1. include <IRremote.h> // kniznica pre IR ovladace - tuto treba pridat pretoze standardne nie je sucastou
  2. 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>