logo

venerdì 12 ottobre 2012

Arduino controllo IR 2° Parte


Adesso, arriva la parte interessante, vediamo come accendere e spegnere un led, tramite il telecomando.
Avete salvato il codice esadecimale del telecomando, spiegato nella 1°parte?
Bene.

In questa immagine si vede il circuito, il sensore IR è collegato al Pin2 e il lede che lampeggia ad ogni tasto premuto sul pin 13.

i PIN di arduino che ci serviranno sono: Pin 4 led, Pin 2 uscita sensore IR, Pin 5 led, Pin13 led.
veniamo al codice adesso

#include <IRremote.h>

int RECV_PIN = 2;//uscita IR
int RELAY_PIN = 4;//Led

IRrecv irrecv(RECV_PIN);
decode_results results;

// Dumps out the decode_results structure.
// Call this after IRrecv::decode()
// void * to work around compiler issue
//void dump(void *v) {
//  decode_results *results = (decode_results *)v
void dump(decode_results *results) {
  int count = results->rawlen;
  if (results->decode_type == UNKNOWN) {
    Serial.println("Could not decode message");//non riesce a codificare
  }

    else if (results->decode_type == NEC) {
      Serial.print("Orion: ");
    }
 
    Serial.print(results->value, HEX);//visualizza il codice esadecimale
    Serial.print(" (");
    Serial.print(results->bits, DEC);
    Serial.println(" bits)");
  }

void setup()
{
  pinMode(RELAY_PIN, OUTPUT);
  pinMode(13, OUTPUT);//Led che lampeggia ad ogni segnale ricevuto
  pinMode(5, OUTPUT);//Led
    Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

int on = 0;
unsigned long last = millis();

void loop() {
  if (irrecv.decode(&results)) {
    // If it's been at least 1/4 second since the last
    // Led IR lampeggia ad ogni tasto premuto
    if (millis() - last > 250) {
      on = !on;
   
      digitalWrite(13,  HIGH );
      delay(200);
      digitalWrite(13,  LOW );
      delay(200);
      dump(&results);
    }
    last = millis();    
    irrecv.resume(); // Receive the next value
  }
  if (results.value==0x1){Serial.println("Amstrad 1");//tasto 1 blink led Pin5
  digitalWrite(5, HIGH);
  delay(100);
  digitalWrite(5, LOW);
  delay(100);
};
  if (results.value==0x2){Serial.println("Amstrad 2");//tasto 2 Led on/of
  digitalWrite(RELAY_PIN, on ? HIGH : LOW);

};

}


Il led sul Pin13 lampeggia ad ogni tasto premuto, segno che il sensore funziona ma bisogna specificare il codice ad arduino affinchè esegua il comando desiderato.

if (results.value==0x1): 0x1 è il codice esadecimale del tasto 1 del mio telecomando, sostituitelo con il vostro codice.

f (results.value==0x2): 0x2 è il codice esadecimale del tasto 2 del mio telecomando, sostituitelo con il vostro codice.

Sbizzarritevi e divertitevi con questo esempio, e al prossimo Tutorial.

Nessun commento:

Posta un commento