5
// Arduino: telecomando a infrarossi per accendere o spegnere un led 17 led telecomandato In questo esercizio viene utilizzata una copia del programma descritto nel precedente esercizio 16. L’unica differenza e’ che Arduino utilizza i segnali provenienti dal telecomando per pilotare (accendere o spegnere) un led. Piu’ in dettaglio, utilizzando il telecomando rappresentato in figura, accende il led quando viene premuto il tasto 1 e lo spegne quando viene premuto il tasto 2. Nota: Questo esercizio e questa nota sono parte di una serie che vede protagonisti arduino ed alcuni dei componenti ad esso collegabili. Per la maggior parte degli esercizi e’ anche disponibile un filmato su youtube. Esercizi facenti parte della raccolta Filmati presenti su youtube Informazioni su arduino e sui componenti collegabili Breve manuale di programmazione Materiali 1 telecomando ad infrarosssi 1 modulo ricevitore di infrarossi 1 led 1 resistenza da 220 ohm 5 cavetti Schema

e17 Led Telecomandato

Embed Size (px)

DESCRIPTION

e17 Led Telecomandato

Citation preview

  • // Arduino: telecomando a infrarossi per accendere o spegnere un led

    17 led telecomandato

    In questo esercizio viene utilizzata una copia del programma descritto nel precedente esercizio 16. Lunica differenza e che Arduino utilizza i segnali provenienti dal telecomando per pilotare (accendere o spegnere) un led. Piu in dettaglio, utilizzando il telecomando rappresentato in figura, accende il led quando viene premuto il tasto 1 e lo spegne quando viene premuto il tasto 2.

    Nota: Questo esercizio e questa nota sono parte di una serie che vede protagonisti arduino ed

    alcuni dei componenti ad esso collegabili. Per la maggior parte degli esercizi e anche disponibile un filmato su youtube.

    Esercizi facenti parte della raccolta

    Filmati presenti su youtube

    Informazioni su arduino e sui componenti collegabili

    Breve manuale di programmazione

    Materiali 1 telecomando ad infrarosssi 1 modulo ricevitore di infrarossi 1 led 1 resistenza da 220 ohm 5 cavetti

    Schema

  • // Arduino: telecomando a infrarossi per accendere o spegnere un led

    Programma /* Per comprendere al meglio questo esercizio e' necessario comprendere prima le modalita' di funzionamento di un telecomando o, meglio il protocollo di comunicazione dei segnali. Tutto cio' e' spiegato, anche se non in maniera esaustiva, nelle note che accompagnano lesercizio numero 16. Questo programma e' derivato da un programma, non professionale, esistente sul web ed il sistema telecomando/arduino/led non sempre risponde con prontezza agli impulsi. E possibile che tale difetto dipenda dal fatto che il momento di pressione di un tasto non sempre coincide con il momento in cui il programma verifica l'arrivo di un blocco di sincronismo Per ottenere una risposta e' quindi a volte necessario premere piu' volte ed in rapida successione un tasto, in modo da favorire la sincronizzazione tra telecomando ed apparato ricevente Unultima nota riguarda il telecomando illustrato nelle note descrittive. Si tratta di un prodotto di infima qualita che spesso costringe a premere piu volte un tasto per ottenere un risultato. Conviene in sua vece utilizzare un qualunque telecomando di casa, del quale e stata prima rilevata la correlazione tra pulsanti e segnale inviato (utilizzando, a questo scopo, il precedente esercizio 16). Per accendere il led bisogna premere il pulsante che invia il segnale decimale 16 mentre per spegnerlo bisoga premere il pulsante che invia il segnale decimale 17 */ int IR_IN = 2; // inserisce 2 nella variabile IR_IN utilizzata per // indicare la porta alla quale e' collegato il ricevitore del segnale infrarosso

    int Pulse_Width = 0; // zona in di memorizzazione del tempo trascorso dal precedente impulso int ir_code = 0x00; // zona di memorizzazione del codice inviato dal telecomando char adrL_code = 0x00; // byte in cui viene memorizzato il comando char adrH_code = 0x00; // byte in cui viene memorizzato il comando invertito (Anti-code) int lucentezza = 0; // definizione della variabile lucentezza, con valore iniziale 0 void timer1_init(void) // routine di inizializzazione delle zone di memorizzazione del tempo. // il trascorrere del tempo e' automaticamente gestito dal sistema che registra in TCNT1 un // valore corrispondente al tempo trascorso dall'ultimo azzeramento { TCCR1A = 0X00; TCCR1B = 0X05; // modulatore del tempo; con il valore 5, TCNT1 si incrementa di 15625 unita di // tempo ad ogni secondo TCCR1C = 0X00; TCNT1 = 0X00; // timer, con TTCCR1B = 5 incrementa di 15625 unita' ad ogni secondo // fino ad un massimo di circa 65000, poi si azzera e ricominicia TIMSK1 = 0X00; } char logic_value() /*routine di ricezione del comando. Restituisce il valore 0 (0,56 microsecondi dal precedente impulso, corrispondente al valore 0) oppure 1 (1,7 micorsecondi dal precedente impulso, corrispondente al valore 1) oppure -1 nessun tasto premuto o segnale non riconosciuto */ { TCNT1 = 0X00; while(!(digitalRead(IR_IN))); // inizio attesa dell'impulso

  • // Arduino: telecomando a infrarossi per accendere o spegnere un led

    Pulse_Width=TCNT1; TCNT1=0; if(Pulse_Width>=7&&Pulse_Width=7&&Pulse_Width=25&&Pulse_Width

  • // Arduino: telecomando a infrarossi per accendere o spegnere un led

    } } // Se la durata non e' superiore a 100 microsecondi significa che il telecomando e' in uso // e quindi si predispone a ricevere una sequenza di impulsi TCNT1=0X00; while(!(digitalRead(IR_IN))); // se non c'e' impulso verifica il tempo trascorso dal // precedente impulso Pulse_Width=TCNT1; TCNT1=0; if(Pulse_Width>=140&&Pulse_Width=34&&Pulse_Width=7&&Pulse_Width

  • // Arduino: telecomando a infrarossi per accendere o spegnere un led

    lucentezza = 5; } lucentezza = lucentezza -5; analogWrite (9, lucentezza); } if (adrL_code == 10) // il valore decimale 10 corrisponde al valore esadecimale A // ed al tasto "freccia alta" del telecomando { if (lucentezza == 255) { lucentezza = 250; } lucentezza = lucentezza +5; analogWrite (9, lucentezza); } } void setup() { pinMode (9, OUTPUT); // definisce come porta di uscita la porta 9, alla quale e' collegato il led pinMode(IR_IN,INPUT); // definisce come porta di ingresso la porta IR_IN (la porta 2), // alla quale e' collegato il ricevitore infrarossi,

    } void loop() { timer1_init(); //inizializza le zone di gestione del tempo { remote_decode(); // lancia la routine di ricezione e decodifica dei segnali remote_deal(); // lancia la routine di esecuzione delle funzioni richieste dal telecomando

    } }