My SKY(HD) e telecomando virtuale

Buonasera ragazzi del forum, apro un nuovo thread perchè vorrei chiarire il caos che ho in testa a proposito del piccolo progettino che sto affrontando: vi spiego dal principio. Il cane :smiling_imp: ha letteralmente divorato il telecomando del decoder di my SKY... si è salvato solo il led trasmettirore. Ho pensato quindi di creare un telecomando con la mia Arduino Mega 2560. Non voglio creare un telecomando fisico con vari interruttori, ma qualcosa di digitale. Premetto che sono molto acerbo nella programmazione, per questo chiedo il vostro aiuto.

In giro per internet si trovano i codici RAW del telecomando di SKY HD, ma su questo forum si trovano i codici del mio decoder: l'admin Guglielmo ha consigliato di procedere con il software AnalysIR e un TSOP34836 (RX) e un utente ha estratto i codici RAW per MySKY(HD) e li invia in due parti alla tv (spezzando l'array in due a causa di una variabile che sfora la dimensione massima consentita)con un normale led IR (TX).

Mi piacerebbe creare l'immagine digitale del mio telecomando (per il momento mi basterebbe capire!) e alla pressione di un certo tasto, Arduino+IR, che si trova in prossimità della tv, dovrebbe mandare il comando giusto alla tv.

Vorrei porvi qualche domanda per chiarire i vari dubbi:

  1. Non mi è ben chiara la struttura dello switch case che dovrei utilizzare. Vorrei che il programma reagisse alla pressione di un particolare tasto... questa struttura fa al caso mio? va inserita nel loop?
    esempio: caso 1, ho premuto ad es. POWER case 1: manda la sequenza di valori raw corrispondenti al POWER poi esce e si rimette in attesa di un nuovo comando.
switch (var) {
    case 1:
      //do something when var equals 1
      break;
    case 2:
      //do something when var equals 2
      break;
    default:
      // if nothing else matches, do the default
      // default is optional
      break;
  }

2)Il programma che ho messo insieme infatti, è per il momento solo in grado di mandare un comando solo in loop, ma io vorrei eseguirlo una volta sola. Come si fa questa cosa?

  1. Ho qualche piccola conoscenza di Apache e Raspberry e prima di finire su di un tablet, il tutto potrebbe trovarsi su mio pc. Spero di non stare dicendo troppe cavolate... Magari è sufficiente usare processing per creare l'immagine voluta. Questo tipo di cose si fa con Processing?
    Come farebbe il tasto premuto sull'immagine a comunicare con l'Arduino?

Scusate le assurdità... vi scrivo proprio per capire meglio!

Davide

IRSkyRemote.ino (13 KB)

Ciao, ho guadato un po i tuoi post alla ricerca di una presentazione "che non ho trovato", ma da i tuoi post mi sembri abbastanza esperto, non a livello base, per cui le tue domande mi fanno venire dubbi :slight_smile:

Per realizzare un telecomando virtuale, devi conoscere i codici tasti del tuo "sistema"

  1. Hai un interfaccia grafica su un dispositivo che comunica con arduino, seriale o altro

  2. Dalla interfaccia grafica ad ogni pressione di un tasto invii ad arduino un carattere

  3. Su arduino "se ci sono dati sulla seriale" leggi il carattere e lo salvi in una variabile
    e abiliti una variabile booleana trasmetti=true

  4. Con una struttura switch(variabile), valuti il carattere trasmesso, e ad ogni
    carattere invii da arduino il rispettivo codice, e poni la variabile booleana a false, in modo da
    trasmettere un unica volta.

bool trasmetti=false;
char comando;

void loop(){

    if(Serial.available()){

          comando=Serial.read();
          trasmetti=true;

    }

    if(trasmetti){

         switch(comando){

             case 'a':
                   // Trasmetto codice
                   break;
            case 'b':
                   // Trasmetto codice
                   break; 
            case 'c':
                   // Trasmetto codice
                   break;
         }
         
         trasmetti=false; // Trasmette un unica volta, ad ogni ricezione comando

   }


}

Mi rendo conto che stanotte ho pubblicato un post scritto senza accendere il cervello.

Vorrei creare qualcosa su pc/tablet (connesso alla rete domestica), che comunichi con arduino+wifi shield: alla ricezione di un certo comando, l'arduino manda con l'IR LED un certo segnale alla tv/decoder e cambia canale, alza il volume e così via...

Vorrei un consiglio su cosa sarebbe meglio fare: fare tutto con raspberry+wifi/eth shield, oppure usare solo raspberry, anche se non so se con i gpio della raspa posso usare led switch e via dicendo; infine utilizzare entrambe le schede collegandole tra di loro.

Vorrei che la pagina visualizzasse inizialmente anche solo dei pulsanti, e saprei creare una piccola gui con vari pulsanti a mo' di telecomando ma mi viene da pensare avrebbe più senso usare html+javascript.

Mi aiutate a capire quale possa essere la configurazione più adatta?

Davide

Per quello che devi fare tu puoi pensare di partire con Arduino + Ethernet shield, ti guardi gli esempi della shield eth presenti nell'ide e vedrai che puoi metterti in attesa delle connessioni, quando un client si connette (PC, tablet, smartphone, ecc.) invii la pagina con i pulsanti alla ricezione di una richiesta (sempre via web) che riporta il tasto premuto Arduino lo invierà al decoder via IR.
Con pagine semplici di prova non dovresti avr problemi, dopodiché o passi a leggere la pagina sulla sd della eth shield (sempre tenendo in considerazione della memoria disponibile su arduino) o cambi il tutto e passi al raspberry.
Considera che puoi partire con Arduino+shield (se già le hai) e in seguito passare ad una configurazione Raspberry+Arduino connessi via Seriale, nel qual caso di consiglierei di collegare il raspberry ad una seriale differente dal quella utilizzata per inviare i messaggi via USB così ti preservi la capacità di debuggare, tanto la mega ne ha tre disponibili.
Buon studio :slight_smile:

NXTfreeDOmF:
un utente ha estratto i codici RAW per MySKY(HD) e li invia in due parti alla tv (spezzando l'array in due a causa di una variabile che sfora la dimensione massima consentita)con un normale led IR (TX).

Credo di essere io quell'utente... :wink: Quindi provo a capire per aiutarti un poco.

Mi piacerebbe creare l'immagine digitale del mio telecomando (per il momento mi basterebbe capire!) e alla pressione di un certo tasto, Arduino+IR, che si trova in prossimità della tv, dovrebbe mandare il comando giusto alla tv.

Ignoro tutto il seguito, perché a mio avviso potrebbe essere più semplice di quello che vorresti fare, almeno con la soluzione che ho in mente leggendo i tuoi "requisiti" :slight_smile: (scusa, deformazione professionale...) Però mi devi confermare se una soluzione del genere per te vada bene.

Io ho realizzato, ed uso quotidianemente, un ripetitore di telecomando digitale via WiFi usando due WeMos D1 (ma va bene anche Arduino con una Ethernet o WiFi shield visto che comunicano via UDP).
Una, in cucina, il "client", ha il ricevitore IR ed interpreta il tasto premuto sul telecomando in base ad una tabella locale di associazione dei codici IR: una volta "capito" il tasto, manda all'altro WeMos, il "server", il relativo codice tasto. Attenzione, non la codifica del segnale IR, ma proprio un byte che indica quale tasto è stato riconosciuto.
Il "server" quindi quando riceve questa informazione, in base ad una sua tabella locale, trasforma il codice tasto nella sequenza del segnale IR da mandare al decoder MySkyHD (in realtà, come detto, due sequenze perché grazie al mio AnalysIR ho scoperto che il protocollo del MySkyHD ha in mezzo una pausa di durata superiore a 65535 micros, quindi non codificabile con la libreria IR standard), e lo trasmette con il suo Led IR.

Tutto ok, dirai, ma che c'entra col tuo problema? Ecco, posso dirti che io dalla cucina NON uso un altro telecomando Sky, ma un qualsiasi altro telecomando, anche con codifiche totalmente diverse (es. Sony nel mio caso) del quale ho "rimappato" le funzioni del MySkyHD. In sostanza il client "sa" che quando riceve quella particolare sequenza IR significa ad esempio il comando "pause", quindi manda via UDP al server il codice corrispondente al "Pause", e poi sarà il server a decodificarlo nella reale sequenza IR. Ovviamente il telecomando scelto dovrà avere tasti "simili" (in genere i telecomandi dei DVD vanno bene, se hanno anche tastierino numerico ed i 4 tasti colorati), e la mappatura la deciderai tu.

Ora, nel tuo caso non hai neanche bisogno di due Arduino, te ne basta uno solo con doppia funzione, ossia che abbia un sensore IR, un trasmettitore, e le due tabelle di codifica (una per il telecomando "reale" del quale riconoscere i tasti premuti, l'altra per mandare al MySkyHD la corrispondente sequenza IR). In tal caso devi solo avere cura di

Addirittura poiché il "server" agisce in presenza di un certo pacchetto UDP, questo lo potresti creare con qualsiasi cosa, anche con un programmino semplice su Android.

Quindi fammi sapere cosa ne pensi di questi "spunti"... :wink:

Non so se tu voglia avere il gusto di realizzare da te il progetto, ma dato che l'ho realizzato per le WeMos io non posso darti un codice per Arduino (ma a breve ho intenzione di postare almeno su Instructable il progetto intero...;)) ma al limite te lo passo e cerchi di adattarlo tu.