dissabte, 4 de maig del 2013

Actuant segons el sensor IR!

Hola nois!
Aquí us ensenyaré com fer coses amb el comandament IR!
En aquest cas, quan premem les tecles de l'1 al 4 encendrem leds i amb el botó de power els tancarem tots!
Recordeu que dintre de cada cas hi podeu escriure el que volgueu!
Un augment o disminució del temps de delay, moure un servo a diferents llocs, fer moure els motors endavant o endarrere...
Intenteu usar la imaginació de tot el que sabeu!

La connexió serà la següent, i la posició dels pins està escrita en el codi:


Com veureu aquí hi ha el codi:

/*
* Codi per a llegir el valor del IR i poder fer alguna cosa
* per casos de cada tecla.
* Hi ha  leds conectats, apretant la tecla 1 a 5 els encenem a voluntat.
* Després, apretant power s'apaguen.
* Dins de cada case es podria posar "motors endavant, gir, etc" 
* per a controlar el robot per IR
* A més de esriure per serial el nom de cada botó, llegeix qualsevol valor de mando
* Així que es pot adaptar per a llegir gairebé qualsevol!
*/

#include <IRremote.h> 
/*decàrregade la llibreria: https://github.com/shirriff/Arduino-IRremote/archive/master.zip
* S'ha de canviar el nom de la carpeta descomprimida a IRremote
* S'ha de col·locar la carpeta a arduino-1.x/libraries/IRremote
* Hauria de quedar així: arduino-1.x/libraries/IRremote/IRremote.cpp
*/


int RECV_PIN = 8; ¨    //pin on tenim el OUTPUT del sensor IR

int Led1 = 4;                 // LED1 connectat al pin digital 4
int Led2 = 5;                 // LED2 connectat al pin digital 5
int Led3 = 6;                 // LED3 connectat al pin digital 6
int Led4 = 7;                 // LED4 connectat al pin digital 7

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn();       // Comencem el programa IR
  pinMode(Led1, OUTPUT);      
  pinMode(Led2, OUTPUT);      
  pinMode(Led3, OUTPUT);      
  pinMode(Led4, OUTPUT);      
}

void loop() {
  if (irrecv.decode(&results)) {        //si reb algun dada IR

    long int decCode = results.value;
    Serial.println(decCode);           //Escriu el que ha llegit
    switch (results.value) {              //Executa el cas del número rebut
    case 16753245:
      Serial.println("Power Button"); //apagarem els 4 leds
      digitalWrite(Led1, LOW);   
      digitalWrite(Led2, LOW);   
      digitalWrite(Led3, LOW);   
      digitalWrite(Led4, LOW);   
      break;
    case 16736925:
      Serial.println("Mode Button");
      break;
    case 16769565:
      Serial.println("Mute Button");
      break;
    case 16720605:
      Serial.println("Playpause Button");
      break;
    case 16712445:
      Serial.println("Left Button");
      break;
    case 16761405:
      Serial.println("Right Button");
      break;
    case 16769055:
      Serial.println("EQ Button");
      break;
    case 16754775:
      Serial.println("- Button");
      break;
    case 16748655:
      Serial.println("+ Button");
      break;
    case 16738455:
      Serial.println("0 Button");
      break;
    case 16750695:
      Serial.println("shuffle Button");
      break;
    case 16756815:
      Serial.println("U/SD Button");
      break;
    case 16724175:
      Serial.println("1 Button");
      digitalWrite(Led1, HIGH);   // Encenem el LED1
      break;
    case 16718055:
      Serial.println("2 Button");
      digitalWrite(Led2, HIGH);   // Encenem el LED2
      break;
    case 16743045:
      Serial.println("3 Button");
      digitalWrite(Led3, HIGH);   // Encenem el LED3
      break;
    case 16716015:
      Serial.println("4 Button");
      digitalWrite(Led4, HIGH);   // Encenem el LED4
      break;
    case 16726215:
      Serial.println("5 Button");
      break;
    case 16734885:
      Serial.println("6 Button");
      break;
    case 16728765:
      Serial.println("7 Button");
      break;
    case 16730805:
      Serial.println("8 Button");
      break;
    case 16732845:
      Serial.println("9 Button");
      break;
    default
      Serial.println("Waiting ...");
    }

    irrecv.resume();                        // Esperem a rebre el següent valor
  }
}

El resultat de prémer les tecles 1, 2 , 3, 4 i Power és el següent:

Com podem veure, de vegades apareix el -1 Waitng... això és per que no li he deixat temps a esperar-se, he premut les tecles molt ràpid.
  
El procediment és el següent:
amb irrecv.enableIRIn() comencem el programa que comença a llegir sense parar el sensor IR.
Quan arribem a irrecv.decode() el programa treu un valor, però amb "&result" no donarà cap valor fins que torni a rebre alguna cosa.
Guardem el valor a una dada i la imprimim per serial.
Llavors com em rebut un valor, l'utilitzem per a canviar de "cas", i dintre de cada un farem el que volgem.

Per exemple, si tenim aquest programa:

switch (X) {
     case 1:
           Programa1;
     brake;

    case 2:
          Programa2;
    brake;

    default:
          Programadefault;
}

cada vegada que passi per switch, si el valor de la dada X és 1, carregarà el programa 1, si X==2, carregarà el programa2, i si no és cap d'aquests valors, el programadefault.

Cap comentari:

Publica un comentari a l'entrada