logo

Visualizzazione post con etichetta progetto arduino. Mostra tutti i post
Visualizzazione post con etichetta progetto arduino. Mostra tutti i post

domenica 9 giugno 2013

Arduino monitor temperatura con display lcd

Misureremo,  la quantità di luce attorno al nostro Arduino facendo uso di un fotoresistore e faremo lo stesso per la temperatura utilizzando un termistore.

MATERIALE UTILIZZATO:
  1. Arduino Uno
  2. Breadboard
  3. 1 Fotoresistore
  4. 1 Termistore
  5. 2 Resistori (10 Ohm)
  6. Cavetteria
  7. LCD I2C (OPZIONALE)

Per prima cosa,vediamo come collegare opportunamente i vari componenti fra loro con delle immagini:


Abbiamo utilizzato i cavi di colore rosso per identificare la tensione di 5V mentre i cavi neri per identificare la Terra (GND).
I cavi di colore giallo,invece,sono stati usati per identificare gli Output analogici provenienti dai sensori,che andranno inseriti appunto nei Pin analogici sulla nostra scheda Arduino.
Fatto ciò,passiamo al codice.
Per quanto riguarda il "void setup()",andremo a definire i due pin nei quali arrivano gli output dei sensori,come pin di INPUT e inizializzeremo il Seriale a 9600 baud:
  • void setup()
  • {
  •   Serial.begin(9600);
  •   pinMode(A0,INPUT);//pin di INPUT per il fotoresistore
  •   pinMode(A1,INPUT);//pin di INPUT per il termistore
  • }
     
Nel nostro "void loop()" invece,dobbiamo prima dutto leggere i valori che ci vengono forniti dai due sensori posti sulla Breadboard e successivamente stamparli.
Implementiamo prima una versione per chi fosse sprovvisto di LCD
  • void loop()
  • {   
  •     ValoreLuce=analogRead(A0); //ValoreLuce è una variabile di tipo INT dichiarata in precedenza(il fotoresistore fornisce valori interi da 0 a 1023)
  •     ValoreTemp=analogRead(A1);//ValoreTemp è una variabile di tipo INT dichiarata in precedenza
Fatto ciò,possiamo passare alla stampa :
  • Serial.print("Fotoresistore = ");
  • Serial.print(ValoreLuce);
  • Serial.print(" Temperatura = ");
  • Serial.println(ValoreTemp);
Possiamo infire definire un intervallo di Delay che permetterà al nostro Arduino di Trasmettere dati ogni TOT millisecondi:
delay(1000);//Esempio: Intervallo di 1 secondo
Per chi invece fosse provvisto di LCD,una possibile soluzione potrebbe essere la seguente(NB: Alcuni comandi potrebbero non funzionare in base alla libreria del proprio LCD.Si raccomanda,pertanto,di consultare il proprio file library.h per documentarsi sulle funzioni implementabili sul proprio LCD):
  • lcd.setCursor(0,0);
  • lcd.print("Sensore = ");
  • lcd.setCursor(11,0);
  • lcd.print(ValoreLuce);
Stesso meccanismo per il Termistore.
 Infine,"giocando" un pò col codice,possiamo riuscire a tirar fuori dal nostro Arduino qualcosa di molto divertente e funzionale come mostra la seguente foto.

Se avete dei problemi a far funzionare il circuito commentate o scrivete sul forum.

Arduino hello world display lcd

Per poter pilotare il display avete necessità di utilizzare la libreria LiquidCrystal.h che vi permette di comunicare in modalità 4 bit o 8 bit, questo vuol dire che per la trasmissione dati possono essere utilizzate 4 o 8 linee di controllo a queste si aggiungono le due linee di controllo: Register Select (RS) e Enable (E) e alla linea opzionale Read/Write (RW).
In classe ho utilizzato la modalità a 4 bit, la stessa del tutorial sul sito Arduino, ciò comporta l’utilizzo di 6 uscite digitali sulla scheda Arduino.

Nella tabella allegata trovate le funzioni di ogni piedino.

Ricordate che la piedinatura di questi display è comune alla maggior parte degli LCD 16 x 2 standard Hitachi HD44780, ma potreste trovare qualche variazione tipicamente accade per i pin 15 e 16 che potrebbero essere al posto dei pin 1 e 2 (non è il caso di questo display).
In ogni caso come potete vedere dalle fotografie (sopra) il display reca sul lato piste, una legenda con il riferimento piedino -> funzione quindi, non potete sbagliarvi.
Funzione dei piedini
  • Pin 1: Vss – collegato al GND
  • Pin 2: VDD – collegato a +5V
  • Pin 3: V0 – controllo del contrasto dei caratteri. In genere viene collegato ad un potenziometro o trimmer in configurazione partitore di tensione in modo che possiate applicare sul Pin 3 una tensione che varia da 0 a +5V e al variare della tensione varia il contrasto.
  • Pin 4: RS segnale di selezione registro – per selezionare il registro nel quale registrare ciò che appare sul display oppure selezionare il registro di funzionamento in cui viene memorizzata di volta in volta l’istruzione da eseguire per il funzionamento dell’LCD
  • Pin 5: segnale Read/Write – per selezionare la modalità di funzionamento: lettura/scrittura – collegato a GND
  • Pin 6: segnale Enable (E) – per abilitare la scrittura nei registri
  • Pin 7 al Pin 14: linee dati che si inviano o si ricebono dai registri del display. Un valore HIGH (H) indica scrittura (WRITE) del bit nel registro del display, un valore LOW (L) indica un valore letto (READ) da un registro.
  • Pin 15: A (Anodo) – piedino a cui collegare una tensione positiva (nel caso del display descritto +4,2V) che serve per la retroilluminazione del display.
  • Pin 16: K (Catodo) – piedino da collegare a GND per consentire la retroilluminazione.
I collegamenti realizzati sono identici a quelli che trovate sul tutorial: LiquidCrystal – “Hello World!” dove al posto del potenziometro abbiamo utilizzato un trimmer:

Codice:
/* uso del display LCD 16x2 standard Hitachi HD44780

  Circuito:
 * pin RS collegato al pin digitale 12
 * pin E (Enable) collegato al pin digitale 11
 * pin D4 collegato al pin digitale 5
 * pin D5 collegato al pin digitale 4
 * pin D6 collegato al pin digitale 3
 * pin D7 collegato al pin digitale 2
 * pin R/W collegato al GND
 * pin 1 e pin 4 collegati a GND
 * pin 2 collegato a +Vcc
 * centrale del potenziometro/trimmer da 10 KOhm collegato al pin 3 del'LCD
 * pin SX potenziometro/trimmer collegato a +Vcc
 * pin DX potenziometro/trimmer collegato a GND
 * i pin SX e DX del potenziometro/trimmer possono essere interscambiati
*/

// includere la libreria:
#include < LiquidCrystal.h >

/*
   Viene creata l'istanza dell'oggetto LiquidCrystal chiamata lcd in cui
   sono indicati i pin dell'LCD collegati alle uscite digitali di Arduino
*/
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
   //impostiamo il numero di colonne ed il numero di righe di lcd
  lcd.begin(16, 2);
  // Visualizzo il messaggio sul display
  lcd.print("Salve mondo!");
}

void loop() {
  // posiziona il cursore in colonna 0 e linea 1
  // (nota: la linea 1 e la seconda linea, poichè si conta incominciando da 0):
  lcd.setCursor(0, 1);
  // stampa il numero di secondi dall'ultimo reset
  lcd.print(millis()/1000);
}



 Nel caso in cui colleghiamo il Pin 15 a +5V e il Pin 16 a GND abbiamo la retroilluminazione:


Se avete dei problemi a far funzionare il circuito commentate o scrivete sul forum.

giovedì 1 novembre 2012

Relè ir programmabile


In ogni abitazione è presente almeno un telecomando ir utilizzato per controllare dispositivi come tv, dvd, hi-fi, ecc.. Il sistema di comunicazione utilizzato per la trasmissione dei dati è l’infrarosso anche se in quest’ultimo periodo alcune case produttrici hanno adottato sistemi comunicanti ad onde radio.

La comunicazione è affidata ad un diodo funzionante nello spettro dell’infrarosso, il quale trasmette il codice di bit in sequenza, modulato ad una frequenza compresa tra 30 e 60Khz; l’utilizzo di una portante elevata permette di abbattere le interferenze generate da varie fonti presenti nell’ambiente.

Per far si che i disturbi vengano eliminati correttamente, il ricevitore dispone di un filtro passa-banda centrato sulla frequenza della portante. La frequenza portante maggiormente utilizzata è la 38Khz.

Questo progetto destinato all’automazione domestica, infatti permette di pilotare carichi elettrici utilizzando trasmettitori già presenti all’interno dell’abitazione restando comodamente seduti sulla poltrona; il dispositivo è stato progettato per essere alloggiato nelle normali scatolette 503 cosi da poter essere inserito all’interno dell’impianto elettrico senza effettuare particolari modifiche.


Lo schema è molto semplice, le parti si dividono in due blocchi, il primo in altro riguarda la sezione di alimentazione necessaria alla fornitura dei 5V indispensabili per il funzionamento del micro e del sensore.
Il blocco centrale è in sostanza il cuore del circuito, infatti tutte le operazioni vengono eseguite dal microcontrollore PIC12F1840, esso provvede al riconoscimento del dato prelevato dal sensore IR TSOP1738(o equivalente) connesso al connettore X1, e confrontarlo con il dato precedentemente memorizzato; se l’attribuzione di uguaglianza è positiva provvede ad abilitare l’uscita(relè) nella modalità preselezionata(monostabile o bistabile).


Procedura di autoapprendimento:
L’autoapprendimento del codice deve essere eseguito nel seguente modo:

- Per prima cosa alimentare il circuito tramite il connettore X3;
- Premere e mantenere premuto il tasto S1, a questo punto il led LED1 rimarrà acceso;
- Premere un tasto sul telecomando con il quale si vuole commutare l’uscita, se la memorizzazione del codice è avvenuta in modo corretto, il led LED1 lampeggerà velocemente;
- Rilasciare il tasto S1;

Ora è possibile utilizzare il ricevitore.
P.S.
In assenza di alimentazione il micro memorizza nel’eprom il dato ricevuto, per poi caricarlo nuovamente alla successiva accensione, ciò evita di dover eseguire l’autoapprendimento ogni volta che viene tolta l’alimentazione. 













venerdì 19 ottobre 2012

Realizzare una scheda con due relè

In questo articolo vi illustro un circuito semplicissimo e molto banale: una scheda con due relè.  Un circuito dai mille usi, semplice da realizzare e alla portata di tutti. Si tratta di una scheda direi indispensabile: capita spesso che durante i nostri lavoretti di domotica con  Arduino abbiamo bisogno di qualche relè per controllare una lampada, un motore o altro e avere una scheda già pronta a portata di mano può semplificare di molto il lavoro.



Da una MCU (un picmicro, Arduino o quello che volete voi) arriva l’impulso positivo alla resistenza R2, il transistor Q1 viene mandato in saturazione e permette il flusso di corrente attraverso la bobina del relè K1 che si eccita e chiude tra X1-2 e X1-1 (contatto NO). D1 serve come sempre a scaricare a massa la corrente inversa generata dalla bobina del relè. L’accensione del relè viene segnalata mediante un led da 3mm.

La basetta è abbastanza piccola, misura circa 6×5 cm:


 

Il software utilizzato per  realizzare il circuito è EAGLE.



martedì 16 ottobre 2012

Arduino comandi vocali

Il modulo per il riconoscimento vocale da interfacciare con arduino è "EasyVR", e ne esistono vari modelli.
Il sito di supporto è www.veear.eu
Il modulo EasyVR permette la ricezione e l'interpretazione di comandi vocali da parte di arduino.


Attraverso il software EasyVR Commander e la libreria per arduino è possibile definire i comandi da ricevere ed eseguire, poi, tramite arduino.

Collegamento Arduino EasyVR.


  Il collegamento come si può ben vedere, è semplice, l'altoparlante non è spiegato, il filo nero o gnd va collegato nella parte interna del circuito e il rosso vcc in quella esterna.

Arduino RGB con potenziometro

In questo esempio vediamo come controllare sfumature e colori di un led RGB, con un potenziometro e un pulsante.


Il potenziometro regolerà l'intensità di colore, e il pulsante cambierà i colori.

Codice ARDUINO:



int sensorPin = A1; / / selezionare il pin di ingresso per il potenziometro
int buttonPin = 8; / / pulsante Digitale pin
basePin int = 9;

buttonState int = 0;
selectedColor int = 0;
currentColor int [3];


void setColor ()
{
  Serial.println ("- Imposta colore");
  for (int i = 0; i <3, + + i)
  {
    Serial.println (currentColor [i]);
    analogWrite (basePin + i, mappa (currentColor [i], 0, 255, 255, 0));
    / / AnalogWrite (basePin + i, currentColor [i]);
  }  
}

vuoto setup () {
  Serial.begin (9600);

  currentColor [0] = 0;
  currentColor [1] = 0;
  currentColor [2] = 0;

  pinMode (buttonPin, INPUT);

  pinMode (basePin, OUTPUT);
  pinMode (basePin + 1, OUTPUT);
  pinMode (basePin + 2, OUTPUT);

  setColor ();
}

void loop () 
{
  / / Legge il valore di colore dal sensore e remap al valore gamma rgb
  int actualColor = map (analogRead (sensorPin), 0,1023,1,255);


  buttonState = digitalRead (buttonPin);
  if (buttonState == HIGH)
  {    
    delay (300); / / attendere per ritornare alla sua posizione iniziale
    currentColor [selectedColor] = actualColor;
    setColor ();
    selectedColor = (selectedColor + 1)% 3;
  }


}

domenica 14 ottobre 2012

Arduino e Gmail

Cassetta della posta gmail, il cartoncino avanzato nel primo notificatore non può essere sprecato.
Realizzeremo un notificatore per gmail, quando arriverà un nuovo messaggio sul nostro account di gmail, il nostro arduino lo segnalerà.



Guarda il video

Codice PYTHON:


import serial, sys, feedparser
#Settings - Change these to match your account details
USERNAME="XXXXXXX@gmail.com"
PASSWORD="PASSWORDXXWD"
PROTO="https://"
SERVER="mail.google.com"
PATH="/gmail/feed/atom"
SERIALPORT = "/dev/tty.usbserial-FTE3RS4J" # Change this to your serial port!
# Set up serial port
try:
ser = serial.Serial(SERIALPORT, 9600)
except serial.SerialException:
print "no device connected - exiting"
sys.exit()

newmails = int(feedparser.parse(PROTO + USERNAME + ":" + PASSWORD + "@" + SERVER + PATH)["feed"]["fullcount"])
 
# Output data to serial port
if newmails > 0:
ser.write("m")
print "some mail"
else:
ser.write("n")
print "no mail"
#print data to terminal


# Close serial port
ser.close()


Codice ARDUINO:


#include <MsTimer2.h>
#include <Servo.h>
Servo myservo;
int val;
int pos;
void flash() {
static boolean output = HIGH;
digitalWrite(9, output);
output = !output;
}
void setup()
{
Serial.begin(9600);
Serial.flush();
myservo.attach(10);
}
void loop()
{
if (Serial.available())
{
val = Serial.read();
Serial.println(val, BYTE);
if (val == 110) // n = 110 in dec
{
pinMode(9,0);
pos = 0;
}
else if (val == 109) //109 = m in dec
{
pinMode(9, OUTPUT);

MsTimer2::set(150, flash); // 150ms periodo
MsTimer2::start();
pos =140;
}  
}
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15);
}

Fonte

Arduino e Facebook

Costruire un cassetta della posta che ci avvisa dell'arrivo di una notifica di facebook.
Per costruire il nostro notificatore di facebook, ci servono: cartoncino blu, giallo, marrone e bianco, erbetta sintetica, un servo motore, un led blu e ovviamente il nostro arduino.


Alcune immagini del progetto Arduino-FB

La galleria di immagini che illustra i vari passaggi per la costruzione del nostro FB Notifier


Adesso veniamo al codice, suddiviso in due parti, una parte in python e l'altra in arduino.

Codice PYTHON:


import mechanize
import cookielib
import serial
import sys
import time
import warnings
 
''' VERSIONE 2.3
A differenza della versione 2.0, in questa implementazione:
Invece che contare partendo dai 2 tag HTML presenti di default <div class="c">, e' possibile clikkare il link:
clikka su Clear Notifications (restera' solo un <div class="c">)
e iniziare a contare per i > 1
 
In questo modo evita di contare inviti ad eventi o avvisi di compleanno come fossero notifiche.
'''
 
warnings.filterwarnings("ignore") #nasconde eventuali warning
 
SERIALPORT = raw_input("Inserire la porta seriale a cui e' connesso il dispositivo: ")
# Set up serial port
try:
 ser = serial.Serial(SERIALPORT, 9600)
 ser.timeout = None #Non imposta alcun tempo di timeout
except serial.SerialException:
 print "No device connected - exiting..."
 time.sleep(4)
 sys.exit()
 
 
#In alternativa si puo' andare su facebook.com/notifications.php e appoggiarsi al feed rss (utilizzando poi la libreria python: feedparser).
# Browser
br = mechanize.Browser()
 
# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
 
# Browser options
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
 
# Follows refresh 0 but not hangs on refresh > 0
#br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
 
 
 
# User-Agent (this is cheating, ok?)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
 
 
# Open some site, let's pick a random one, the first that pops in mind:
r = br.open('http://m.facebook.com')
#html = r.read()
 
# Show the source
#print html
# or
#print br.response().read()
 
# Show the html title
print "- Connesso a: " + br.title()
 
# Select the first (index zero) form
br.select_form(nr=0)
 
try:
  attesa = input("\nOgni quanti secondi vuoi controllare la presenza di nuove notifiche? ")
  while(attesa < 5):
      attesa = input("\n- E' consigliato un valore non sotto i 5 secondi.\nInserisci nuovamente un valore: ")
except:
  print "E' necessario inserire un valore numerico, non una stringa.\nChiusura programma..."
  time.sleep(5)
  sys.exit()
 
print "\n- Inserisci i tuoi dati di accesso per Facebook:\n"
# Let's search
br.form['email']='%s' % raw_input("Inserisci Email: ")
br.form['pass']='%s' % raw_input("Inserisci Password: ")
 
br.submit()
x = br.response().read()
z = x.count("Combinazione e-mail/password errata.")
 
while z:
  print "Impossibile effettuare l'accesso, password o username errati. Riprovare:\n"
  go = False
  br.select_form(nr=0)
  br.form['email']='%s' % raw_input("Inserisci Email: ")
  br.form['pass']='%s' % raw_input("Inserisci Password: ")
  br.submit()
  x = br.response().read()
  z = x.count("Combinazione e-mail/password errata.")
else:
  #siamo perfettamente loggati. (z = 0)
  go = True
  stato = False #stato della bandierina, False = abbassata
  try:
    br.follow_link(text='Elimina notifiche', nr=0) #Pulisce le notifiche precedenti
  except:
    print "\n Nessuna Notifica! \n"
  print "\n- Contrassegnate come lette, tutte le precedenti notifiche...\n"
  ser.write("n") #riportiamo il servo alla posizione iniziale.
 
while True and go:
  try:
    #br.reload()
    #print br.response().read()
    x = br.open('http://m.facebook.com/home.php?refid=0').read()
    i = x.count('<div class="c">') #Questo campo HTML viene ripetuto piu' di 1 volta se c'e' una notifica nuova (prima pero' vengono lette tutte le notifiche quali eventi etc.).
  except:
      print "Ritardo nel ricaricare la pagina, 3 secondi di attesa applicati..\n"
      time.sleep(3)
  if i >= 1:
      notifica = True #Notifiche da leggere
  else:
      i = 0
      notifica = False #Nessuna notifica da leggere
#controllo:
  if notifica == True:
      if stato == False: #Se la bandierina e' abbassata
       ser.write("m")
       print "Nuova notifica su Facebook, sollevamento bandierina..."
       stato = True
      else:
       print "Sono presenti notifiche ancora da visionare..."
 
  elif stato == False:
       print "Zzz..." #Bandierina gia' abbassata, nessuna notifica da visionare
 
  else:
       ser.write("n")
       print "Nessuna nuova notifica, bandierina in discesa..."
       stato = False     
 
  time.sleep(attesa) #Attesa prima di controllare la presenza di nuove notifiche
 
 
#END


Codice ARDUINO:


#include <MsTimer2.h>
#include <Servo.h>
Servo myservo;
int val;
int pos;
void flash() {
static boolean output = HIGH;
digitalWrite(9, output);
output = !output;
}
void setup()
{
pinMode(9, OUTPUT);
Serial.begin(9600);
Serial.flush();
myservo.attach(10); //pin segnale servo connesso al pin digitale 10
}
void loop()
{
if (Serial.available())
{
val = Serial.read();
Serial.println(val, BYTE);
if (val == 110) // n = 110 in dec
{
pinMode(9,0);
pos = 0;
}
else if (val == 109) //109 = m in dec
{
pinMode(9, OUTPUT);
 
MsTimer2::set(150, flash); // 150ms periodo
MsTimer2::start();
pos =110; //110 gradi di rotazione perchè non essendo nel mio caso preciso il servo non arrivava a 90 gradi esatti ma si fermava poco prima
}    
}
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(23);
}


Fonte del Facebook notifier

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.