Youtube Channel
scrivimi: fraranux@gmail.com
chiamami: 345 04.22.\pi

venerdì 6 febbraio 2015

"Hai visto gli infrarossi?" Quando Arduino incontra un telecomando gli IR si fanno notare...

Battue a parte...
sto progettando un dispositivo che comanderà un videoplayer in base alle informazioni ricevute da più emettitori infrarossi, un telecomando al contrario insomma.
Quindi ecco che comincio a capire come funzioni un telecomando "normale".
Le librerie IR per Arduino IRremote le trovate QUI, ovviamente dovete impazzire per caricarle, un giorno scriverò due righe in merito...
Per quanto riguarda lo schema elettrico ho adoperato come ricevitore IR uno di quegli extender per i tv (il più del lavoro è stato individuare i pin giusti...), va bene qualunque ricevitore Infrarossi a tre pin, se volete saperne di più cliccate QUI.
Poi ho collegato i tre Led alle prime tre uscite non PWM, ho messo una resistenza a casaccio come al solito ed il gioco è fatto. Ho caricato lo sketch, che trovate in fondo, ho aperto il monitor seriale ed ho letto i valori dei primi tre tasti di un telecomando Samsung per poterli riportare correttamente nel programmino. A quasto punto, avendo associato ad ogni pulsante l'accensione di un led, non restava che fare il test, lo trovate in questo filmato, non male come inizio!


#include <IRremote.h>

int RECV_PIN = 3; // il pin del ricevitore
int led1 = 2;
int led2 = 4;
int led3 = 7;
int itsONled[] = {0,0,0,0};
/* the initial state of LEDs is OFF (zero)
the first zero must remain zero but you can
change the others to 1's if you want a certain
led to light when the board is powered */
#define code1  55848 // codice primo pulsante
#define code2  26210 // codice secondo pulsante
#define code3  2500 // codice terzo pulsante

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn();
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
}

void loop() {
  if (irrecv.decode(&results)) {
    unsigned int value = results.value;
    switch(value) {
       case code1:
         if(itsONled[1] == 1) {        // if first led is on then
            digitalWrite(led1, LOW);   // turn it off when button is pressed
            itsONled[1] = 0;           // and set its state as off
         } else {                      // else if first led is off
             digitalWrite(led1, HIGH); // turn it on when the button is pressed
             itsONled[1] = 1;          // and set its state as on
         }
          break;
       case code2:
         if(itsONled[2] == 1) {
            digitalWrite(led2, LOW);
            itsONled[2] = 0;
         } else {
             digitalWrite(led2, HIGH);
             itsONled[2] = 1;
         }
          break;
       case code3:
         if(itsONled[3] == 1) {
            digitalWrite(led3, LOW);
            itsONled[3] = 0;
         } else {
             digitalWrite(led3, HIGH);
             itsONled[3] = 1;
         }
          break;        
    }
    Serial.println(value);
    irrecv.resume(); // Receive the next value
  }
}

martedì 3 febbraio 2015

Wave Shield Adafruit & Arduino Mega: a possible love!

Cara Lady Ada, amore segreto della mia vita, stavolta ho vinto io! ;)


Mi sembrava fosse davvero impossibile che la Waveshield di Adafruit non fosse in nessun modo compatibile con Arduino Mega 2560, Ho cercato qui e la su internet ed ho trovato delle immagini che ritraevano i due dispositivi felicemente accoppiati. Dopo aver spulciato un altro po' il mondo dell' Internet scopro che forse ci vogliono delle altre librerie, prendo le Wave HC originali, le modifico un po', le carico e niente, non funziona,
Mi prodigo in un'attività di " Rubber Ducking" (come a lui piace chiamarla ) con Dario, risulta che la soluzione non si trova nel software, altrimenti lui lo saprebbe, giuro.
Niente la soluzione è hardware, c'è un problema con le porte SPI, sul Mega sono diverse!!

Allora via i piedi dalla shield e faccio un nuovo "connettore" che collegherà il
pin della shield con quello del Mega

          10      .................       53
          11      .................       50
          12      .................       51
          13      .................       52

Di seguito riporto la tabella SPI da Arduino Reference


Arduino BoardMOSIMISOSCKSS (slave)SS (master)
Uno or Duemilanove11 or ICSP-412 or ICSP-113 or ICSP-310-
Mega1280 or Mega256051 or ICSP-450 or ICSP-152 or ICSP-353-
LeonardoICSP-4ICSP-1ICSP-3--
DueICSP-4ICSP-1ICSP-3-4, 10, 52

Qui sotto pubblico qualche foto del lavoro degno del MerdLab, con lo spostamento dei collegamenti dei pin ed il relativo connettore adattatore.