Operácie

Dekodér infračerveného ovládača: Rozdiel medzi revíziami

Z SensorWiki

(Vytvorená stránka „Záverečný projekt predmetu MIPS / LS2023 - '''Meno Priezvisko''' == Zadanie == Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejši…“)
 
 
(21 medziľahlých úprav od 2 ďalších používateľov nie je zobrazených)
Riadok 1: Riadok 1:
Záverečný projekt predmetu MIPS / LS2023 - '''Meno Priezvisko'''
+
Záverečný projekt predmetu MIPS / LS2023 - '''Ivan Jagoš'''
  
  
 
== Zadanie ==
 
== Zadanie ==
  
Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejšie
 
  
[[Obrázok:ard.jpg|400px|thumb|center|Vývojová doska ACROB.]]
+
[https://techfun.sk/produkt/bezdrotovy-infracerveny-ovladac-hx1838-s-prijimacom/ Infračervené ovládanie] - k danému ovládaču identifikovat kódy jednotlivých tlačidiel a demonštrovat správnu funkciu. V tomto zadaní bolo povolené využitie knižnice [https://github.com/Arduino-IRremote/Arduino-IRremote <Infrared.h> ]
 +
 
 +
Riadenie [https://techfun.sk/produkt/bezdrotovy-infracerveny-ovladac-hx1838-s-prijimacom/ Bezdrôtový infračervený ovládač s prijímačom]
 +
 
 +
[[Obrázok:Arduino uno.jpg|400px|thumb|center|Vývojová doska Arduino UNO.]]
  
 
'''Literatúra:'''  
 
'''Literatúra:'''  
Riadok 17: Riadok 20:
 
== Analýza  a opis riešenia ==
 
== Analýza  a opis riešenia ==
  
Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...
+
Najprv som zapojil zariadenie podľa schemi zapojenia.
  
[[Súbor:ledRGB.jpg|400px|thumb|center|RGB LED.]]
+
[[Súbor:Kulpin.png|400px|thumb|center|Schéma zapojenia .]]
  
Nezabudnite doplniť schému zapojenia!
 
  
[[Súbor:schd.png|400px|thumb|center|Schéma zapojenia LCD displeja.]]
 
  
  
Riadok 32: Riadok 33:
  
 
<tabs>
 
<tabs>
<tab name="AVR C-code"><source lang="c++" style="background: LightYellow;">
+
<tab name="Program na identifikaciju kodov tlacidiel"><source lang="c++" style="background: LightYellow;">
#include <avr/io.h>
+
#include <IRremote.h>
 +
 
 +
// definovanie pinu prijimaca
 +
int const IRpin = 2;
 +
IRrecv irrecv(IRpin);
 +
// ulozenie signalu
 +
decode_results results;
 +
 
 +
void setup()
 +
{
 +
  // zapnutie komunikacie
 +
  Serial.begin(9600);
 +
 
 +
  irrecv.enableIRIn();
 +
}
  
int main(void)
+
void loop()  
 
{
 
{
   unsigned int measuredValue;
+
   // pokial dostanem signal tak jeho hodnotu vypisujem v dec sustave
 +
  if (irrecv.decode(&results))
 +
    {
 +
      Serial.println(results.value, DEC);  
 +
     
 +
      irrecv.resume();
 +
     
 +
      delay(1000);
 +
    }
 +
}
  
  while (1)
+
</source></tab>
  {
+
<tab name="Kod na manipuláciu ledky"><source lang="c++" style="background: LightYellow;">
    /*  relax  */ 
+
#include <IRremote.h>
  }
+
 
 +
int ledPin = 3;
 +
bool ledState = false;
 +
bool buttonPressed = false;
  
  return(0);
+
void interruptFunction()
 +
{
 +
  buttonPressed = true;
 
}
 
}
  
</source></tab>
+
void setup()
<tab name="filename.h"><source lang="c++" style="background: LightYellow;">
+
{
#include <avr/io.h>
+
  pinMode(ledPin, OUTPUT);
 +
  digitalWrite(ledPin, LOW);
 +
 
 +
  attachInterrupt(digitalPinToInterrupt(2), interruptFunction, FALLING);
 +
}
  
void adc_init(void);                                   // A/D converter initialization
+
void loop()
 +
{
 +
  if (buttonPressed)
 +
  {
 +
    if (ledState)
 +
    {
 +
      digitalWrite(ledPin, LOW);
 +
      ledState = false;
 +
    }
 +
    else
 +
    {
 +
      digitalWrite(ledPin, HIGH);
 +
      ledState = true;
 +
    }
 +
   
 +
    // Reset buttonPressed flag
 +
    buttonPressed = false;
 +
  }
 +
}
  
unsigned int adc_read(char a_pin);
 
 
</source></tab>
 
</source></tab>
 
</tabs>
 
</tabs>
  
Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x ''zdrojaky.zip'':
+
Manipulovanie ledky:
 +
Importovali sme knižnicu IRremote, ktorá nám umožnila komunikovať s infrasenzorom a čítať signály.
 +
Definujeme pin pre infrasenzor a vytvoríme objekt pre prijímanie signálov.
 +
V metóde setup() inicializujeme sériovú komunikáciu a povolíme prijímanie signálov z infrasenzora.
 +
V metóde loop() kontrolujeme, či sme obdržali signál zo senzora. Ak sme obdržali signál, znamená to, že sme stlačili tlačidlo.
 +
Zapneme LED diódu tým, že nastavíme výstupný pin na HIGH. Dióda zostane zapnutá, kým tlačidlo držíme stlačené.
 +
Keď pustíme tlačidlo, metóda loop() sa opäť vykoná a zistí, že sme uvoľnili tlačidlo. Vypneme LED diódu tým, že nastavíme výstupný pin na LOW.
 +
Program sa opakuje od metóde loop(), čakajúc na ďalší stlačený signál.
  
 
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]
 
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]
Riadok 64: Riadok 121:
 
=== Overenie ===
 
=== Overenie ===
  
Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia.
 
Na konci uvádzame fotku záverečnej obrazovky pred resetom. Vypísaný je tu priemerný čas a najlepší čas.
 
  
[[Súbor:fotka.jpg|400px|thumb|center|Aplikácia.]]
+
[[Súbor:Kolobeska2.png|400px|thumb|center|Aplikácia.]]
  
 
'''Video:'''
 
'''Video:'''
<center><youtube>_l02MBu41n0</youtube></center>
+
https://youtube.com/shorts/3axsi2gZVc8
  
 
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.  
 
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.  
  
 
[[Category:AVR]] [[Category:MIPS]]
 
[[Category:AVR]] [[Category:MIPS]]

Aktuálna revízia z 11:13, 7. jún 2023

Záverečný projekt predmetu MIPS / LS2023 - Ivan Jagoš


Zadanie

Infračervené ovládanie - k danému ovládaču identifikovat kódy jednotlivých tlačidiel a demonštrovat správnu funkciu. V tomto zadaní bolo povolené využitie knižnice <Infrared.h>

Riadenie Bezdrôtový infračervený ovládač s prijímačom
Vývojová doska Arduino UNO.

Literatúra:


Analýza a opis riešenia

Najprv som zapojil zariadenie podľa schemi zapojenia.

Schéma zapojenia .



Algoritmus a program

Algoritmus programu je....


#include <IRremote.h>

// definovanie pinu prijimaca
int const IRpin = 2;
IRrecv irrecv(IRpin);
// ulozenie signalu
decode_results results;

void setup()
{
  // zapnutie komunikacie
  Serial.begin(9600);
  
  irrecv.enableIRIn(); 
}

void loop() 
{
  // pokial dostanem signal tak jeho hodnotu vypisujem v dec sustave
  if (irrecv.decode(&results)) 
    {
      Serial.println(results.value, DEC); 
      
      irrecv.resume(); 
      
      delay(1000);
    }
}
#include <IRremote.h>

int ledPin = 3;
bool ledState = false;
bool buttonPressed = false;

void interruptFunction()
{
  buttonPressed = true;
}

void setup()
{
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
  
  attachInterrupt(digitalPinToInterrupt(2), interruptFunction, FALLING);
}

void loop()
{
  if (buttonPressed)
  {
    if (ledState)
    {
      digitalWrite(ledPin, LOW);
      ledState = false;
    }
    else
    {
      digitalWrite(ledPin, HIGH);
      ledState = true;
    }
    
    // Reset buttonPressed flag
    buttonPressed = false;
  }
}

Manipulovanie ledky: Importovali sme knižnicu IRremote, ktorá nám umožnila komunikovať s infrasenzorom a čítať signály. Definujeme pin pre infrasenzor a vytvoríme objekt pre prijímanie signálov. V metóde setup() inicializujeme sériovú komunikáciu a povolíme prijímanie signálov z infrasenzora. V metóde loop() kontrolujeme, či sme obdržali signál zo senzora. Ak sme obdržali signál, znamená to, že sme stlačili tlačidlo. Zapneme LED diódu tým, že nastavíme výstupný pin na HIGH. Dióda zostane zapnutá, kým tlačidlo držíme stlačené. Keď pustíme tlačidlo, metóda loop() sa opäť vykoná a zistí, že sme uvoľnili tlačidlo. Vypneme LED diódu tým, že nastavíme výstupný pin na LOW. Program sa opakuje od metóde loop(), čakajúc na ďalší stlačený signál.

Zdrojový kód: zdrojaky.zip


Overenie

Aplikácia.

Video: https://youtube.com/shorts/3axsi2gZVc8

Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.