joi, 3 februarie 2011

Arduino controlat cu o telecomanda

Arduino este o placuta open source, asta insemnand ca poate fi folosit la aproape orice. Astazi am vrut sa vad cum functioneaza combinatia dintre:

  • Arduino
  • display cu 7 segmente
  • receptor IR TSOP48
  • telecomanda
Am facut un montaj cu Arduino si TSOP48 am deschis "Serial Monitor" din programul arduino, apoi am apasat pe diferite butoane de la telecomanda pentru a afla codul numeric pentru fiecare buton; pentru asta am folosit urmatorul COD:


#include

int RECV_PIN = 12;
  IRrecv irrecv(RECV_PIN);

  decode_results results;


void setup() {            
  
  Serial.begin(9600);
  irrecv.enableIRIn();

}

void loop() {
   if (irrecv.decode(&results))
   {
    Serial.println(results.value, DEC);
    irrecv.resume(); // Receive the next value
   }
}

dupa ce am aflat ce  cod numeric are fiecare buton, am folosit un display cu 7 segmente pe care sa imi apara ce buton am apasat pe telecomanda.
(nu am folosit toate butoanele in urmatorul montaj ci butoanele de la 0 la 9, care afiseaza pe display numerele de la 0 la 9 si inca 3 butoane, unul care afiseaza punctul pe display, altul care stinge punctul si inca un buton care stinge tot display-ul)

Pentru asta am folosit urmatorul COD:


#include

int RECV_PIN = 12;
  IRrecv irrecv(RECV_PIN);

  decode_results results;

void setup() {            
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);

  Serial.begin(9600);
  irrecv.enableIRIn();

}

void loop() {
   if (irrecv.decode(&results))
   {
    Serial.println(results.value, DEC);
    irrecv.resume(); // Receive the next value
   }

if(results.value==16724175)  //scrie 1
{
 digitalWrite(2, 0);
 digitalWrite(3, 1);
 digitalWrite(4, 1);
 digitalWrite(5, 0);
 digitalWrite(6, 0);
 digitalWrite(7, 0);
 digitalWrite(8, 0);
}

 if(results.value==16718055)  //scrie 2
{
 digitalWrite(2, 1);
 digitalWrite(3, 1);
 digitalWrite(4, 0);
 digitalWrite(5, 1);
 digitalWrite(6, 1);
 digitalWrite(7, 0);
 digitalWrite(8, 1);
}

 if(results.value==16743045)   //scrie 3
{
 digitalWrite(2, 1);
 digitalWrite(3, 1);
 digitalWrite(4, 1);
 digitalWrite(5, 1);
 digitalWrite(6, 0);
 digitalWrite(7, 0);
 digitalWrite(8, 1);
}

 if(results.value==16716015)   // scrie 4
{
 digitalWrite(2, 0);
 digitalWrite(3, 1);
 digitalWrite(4, 1);
 digitalWrite(5, 0);
 digitalWrite(6, 0);
 digitalWrite(7, 1);
 digitalWrite(8, 1);
}

 if(results.value==16726215)   // scrie 5
{
 digitalWrite(2, 1);
 digitalWrite(3, 0);
 digitalWrite(4, 1);
 digitalWrite(5, 1);
 digitalWrite(6, 0);
 digitalWrite(7, 1);
 digitalWrite(8, 1);
}

 if(results.value==16734885)  //scrie 6
{
 digitalWrite(2, 1);
 digitalWrite(3, 0);
 digitalWrite(4, 1);
 digitalWrite(5, 1);
 digitalWrite(6, 1);
 digitalWrite(7, 1);
 digitalWrite(8, 1);
}

 if(results.value==16728765) // scrie 7
{
 digitalWrite(2, 1);
 digitalWrite(3, 1);
 digitalWrite(4, 1);
 digitalWrite(5, 0);
 digitalWrite(6, 0);
 digitalWrite(7, 0);
 digitalWrite(8, 0);
}

 if(results.value==16730805)  // scrie 8
{
 digitalWrite(2, 1);
 digitalWrite(3, 1);
 digitalWrite(4, 1);
 digitalWrite(5, 1);
 digitalWrite(6, 1);
 digitalWrite(7, 1);
 digitalWrite(8, 1);
}

 if(results.value==16732845)  // scrie 9
{
 digitalWrite(2, 1);
 digitalWrite(3, 1);
 digitalWrite(4, 1);
 digitalWrite(5, 1);
 digitalWrite(6, 0);
 digitalWrite(7, 1);
 digitalWrite(8, 1);
}

 if(results.value==16738455)   // scrie 0
{
 digitalWrite(2, 1);
 digitalWrite(3, 1);
 digitalWrite(4, 1);
 digitalWrite(5, 1);
 digitalWrite(6, 1);
 digitalWrite(7, 1);
 digitalWrite(8, 0);
}

if(results.value==16756815)   // sterge display
{
 digitalWrite(2, 0);
 digitalWrite(3, 0);
 digitalWrite(4, 0);
 digitalWrite(5, 0);
 digitalWrite(6, 0);
 digitalWrite(7, 0);
 digitalWrite(8, 0);
 digitalWrite(9, 0);
}

if(results.value==16750695)   // scrie punct
{
 digitalWrite(9, 1);
}

if(results.value==16748655)   // sterge punct
{
 digitalWrite(9, 0);
}

}



Dupa cum vedeti, in acest montaj sunt combinate 2 COD-uri(programe) cel de la display-ul cu 7 segmente si cel de la receporul infrarosu.

3 comentarii:

  1. Nu merge nici unul din codurile pe care l-ai postat! Imi da eroare in arduino.
    Mi-ar place sa imi zici ce gresesc.
    Sebastian

    RăspundețiȘtergere
  2. In primul rand, cand am pus codul pe blog nu la pus complet la prima linie de exemplu era : # include IRremote.h ( parca asa) si e posibil sa mai fie anumite greseli prin cod, in loc de paranteza rotunda sa puna % si tot asa, dar daca citesti atent stii ce sa corectezi.
    In al doilea rand, daca nici corectat nu functioneaza, atunci ai Arduino uno pentru care iti trebuie o alta librarie, loop-ul e acelasi, poate mici modificari doar.
    Iar in al treilea rand, daca tot nu functioneaza, atunci nu ai schimbat codurile cu cele de la telecomanda ta.

    RăspundețiȘtergere