«

»

Mag 11

Stampa Articolo

Arduino, OSC, iPhone e sei led – lo sketch

Come promesso ho realizzato lo sketch che caricato su Arduino ti permette di realizzare il tuo controllo via iPhone dei 6 led o 6 carichi collegati alle uscite 2,3,4,5,6 e 7.

Arduino, TouchOSC e slide digitali PWM

Solo i pin 3,5 e 6 sono di tipo PWM e quindi potranno pilotare il dimmer dei led.

Passa subito allo sketck:

#include "Ethernet.h"
#include "OSCClass.h"
#include "SPI.h"

int pinLedA=2;
int pinLedB=3;
int pinLedC=4;
int pinLedD=5;
int pinLedE=6;
int pinLedF=7;

OSCMessage recMes;

OSCClass osc(&recMes);

byte serverMac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte serverIp[]  = { 192, 168, 2, 130 };
int  serverPort  = 10000;

char *topAddress="butt";
char *subAddress[15]={ "ledA" , "ledB" , "ledC", "ledD" , "ledE" , "ledF", "ledAB" , "ledBC" , "ledAC", "ledDE" , "ledEF" , "ledDF", "fadeB" , "fadeD" , "fadeE" };

void setup() {
     Ethernet.begin(serverMac ,serverIp);
     osc.begin(serverPort);

     pinMode(pinLedA, OUTPUT);
     pinMode(pinLedB, OUTPUT);
     pinMode(pinLedC, OUTPUT);
     pinMode(pinLedD, OUTPUT);
     pinMode(pinLedE, OUTPUT);
     pinMode(pinLedF, OUTPUT);

     digitalWrite(pinLedA, LOW);  //LED OFF
     digitalWrite(pinLedB, LOW);  //LED OFF
     digitalWrite(pinLedC, LOW);  //LED OFF
     digitalWrite(pinLedD, LOW);  //LED OFF
     digitalWrite(pinLedE, LOW);  //LED OFF
     digitalWrite(pinLedF, LOW);  //LED OFF

     osc.flush();
}

void loop() {
    if ( osc.available() ) {
          if( !strcmp( recMes.getAddress(0) , topAddress ) ){
                if( !strcmp( recMes.getAddress(1) , subAddress[0] ) )  { digitalWrite(pinLedA, getIntValue(&recMes)); }
                if( !strcmp( recMes.getAddress(1) , subAddress[1] ) )  { digitalWrite(pinLedB, getIntValue(&recMes)); }
                if( !strcmp( recMes.getAddress(1) , subAddress[2] ) )  { digitalWrite(pinLedC, getIntValue(&recMes)); }
                if( !strcmp( recMes.getAddress(1) , subAddress[3] ) )  { digitalWrite(pinLedD, getIntValue(&recMes)); }
                if( !strcmp( recMes.getAddress(1) , subAddress[4] ) )  { digitalWrite(pinLedE, getIntValue(&recMes)); }
                if( !strcmp( recMes.getAddress(1) , subAddress[5] ) )  { digitalWrite(pinLedF, getIntValue(&recMes)); }

                if( !strcmp( recMes.getAddress(1) , subAddress[6] ) )  { digitalWrite(pinLedA, getIntValue(&recMes)); digitalWrite(pinLedB, getIntValue(&recMes)); }
                if( !strcmp( recMes.getAddress(1) , subAddress[7] ) )  { digitalWrite(pinLedB, getIntValue(&recMes)); digitalWrite(pinLedC, getIntValue(&recMes)); }
                if( !strcmp( recMes.getAddress(1) , subAddress[8] ) )  { digitalWrite(pinLedA, getIntValue(&recMes)); digitalWrite(pinLedC, getIntValue(&recMes)); }
                if( !strcmp( recMes.getAddress(1) , subAddress[9] ) )  { digitalWrite(pinLedD, getIntValue(&recMes)); digitalWrite(pinLedE, getIntValue(&recMes)); }
                if( !strcmp( recMes.getAddress(1) , subAddress[10] ) ) { digitalWrite(pinLedE, getIntValue(&recMes)); digitalWrite(pinLedF, getIntValue(&recMes)); }
                if( !strcmp( recMes.getAddress(1) , subAddress[11] ) ) { digitalWrite(pinLedD, getIntValue(&recMes)); digitalWrite(pinLedF, getIntValue(&recMes)); }

                if( !strcmp( recMes.getAddress(1) , subAddress[12] ) )  { analogWrite(pinLedB, getIntValue(&recMes)); }
                if( !strcmp( recMes.getAddress(1) , subAddress[13] ) )  { analogWrite(pinLedD, getIntValue(&recMes)); }
                if( !strcmp( recMes.getAddress(1) , subAddress[14] ) )  { analogWrite(pinLedE, getIntValue(&recMes)); }

        }
    }
}

// *********  utility  ***********************************

int getIntValue(OSCMessage *mes){
    switch( mes->getTypeTag(0) ){
        case 'i': { return mes->getArgInt(0); }
        break;

        case 'f':  { return int(mes->getArgFloat(0)); }
        break;
      }
}

Nelle prime righe includi le classi che utilizzerai per la comunicazione Ethernet e la gestione del protocollo OSC, l’utilizzo delle classi in Arduino ti permette di concentrarti sopratutto sulle funzionalità non preoccupandoti degli aspetti complessi come ad esempio di un protocollo.

le linee 05-10: definisci i pin a cui colleghi i led, ricorda che i pin 10,11,12 e 13 sono dedicati alla comunicazione con la Ethernet Shield;

linea 12: imposta la costante recMes in cui sono memorizzati tutti i messaggio di tipo OSC inviati dallo smartphone;

linea 14: inizalizza un oggetto osc come istanza della classe omonima;

linee 16-18: sono oramai linee note, imposta i parametri per la shield ethernet;

linea 20: imposta una variabile di tipo char il cui valore è la radice del messagio OSC, come avrai letto nei precedenti articoli le etichette OSC sono composte da percorsi simili ad un path o url internet, sono composti da livelli il cui primo è “/” ( root o radice ), i messaggio che hai impostato nell’interfaccia OSC sono del tipo /butt/ledA in cui butt è l’indirizzo più alto del messagio e ledA il sotto-indirizzo;

linea 21: imposta i sotto-indirizzi che ti aspetti: ledA,ledB,ledC …

linea 24: inizializza la classe Ethernet con Mac e IP definiti alle linee 16-18;

linea 25: crea un server di ripo OSC che risopnde sulla porta definita alla linea 18;

linee 27-32: definisci la modalità di OUTPUT per i 6 pin a cui sono connessi i led;

linee 34-39: imposta a LOW il valore di ciscun pin in modo che all’accensione tutti i led siano spenti;

linea 41: pulisci il buffer dei messaggi dell’istanza osc usando il metodo flush della classe OSC;

linea 45: verifica che ad ogni loop() di arduino esista un messaggio di tipo osc, questo tipo di comando è molto simile a quello utilizato nella comunicazione seriale di arduino;

linea 46: leggi il valore contenuto a livello puù alto di recMes utilizzando il metodo getAddress(0) dove 0 è il primo livello, confronta questo valore con il valore definito in topAddress alla linea 20 e se corrisponde vuol dire che il messagio è quello atteso, potresti definire più tipi di messaggi e gestirli in modo differente lato sketch, ho preferito usare sempre lo stesso indirizzo primario per rendere lo sketch più semplice;

linee 47-52: sono tutte simili ad eccezione del test eseguito, prendi in esame la linea 47 confronta il valore al livello 1 del recMes con il valore dell’array subAddress alla posizione 0, questo indica che la condizione è verificata quando l’indirizzo o etichetta proveniente dal tuo smartphone è /butt/ledA, in questo caso assegna il valore ricevuto: 0 o 1 in funzione della pressione o meno del bottone; l’assegnazione del valore la fai con il comando digitalWrite di Arduino ed il vaore lo recuperi con la funzione getIntValue dichiarata alle linee 71-79;

linee 54-59: identiche alle precedenti a meno del fatto che gestiscono i pulsanti in verde ( vedi articolo sull’interfaccia OSC ) i quali sono combinazioni di led, per cui ogni comando accende insieme 2 led, le combinazioni sono un esempio e puoi variarle come vuoi ottenendo combinazioni ben più complesse.

linee 61-63: ti servono per gestire i messaggi di tipo fade o slide, quelli applicati ai pin 3,5 e 6 per pilotare in dissolvenza i led, in linea di principio non sono differenti dalle precedenti a meno del valore di confronto nella condizione di IF e del comando utilizzato per accendere i led in dissolvenza analogWrite al posto del digitalWrite;

linee 71-79: definisci una funzione di servizio o utility accessoria allo sketch, in pratica i valori provenienti dai messaggi OSC possono essere di tipo integer ( intero ) o float ( con la virgola ) nel primo caso vanno recuperati con il metodo getArgInt() nel secondo con il metodo getArgFloat(). Tuttavia nello sketch sono attesi e gestiti slo valori di tipo intero, per cui questa funzione verifica il tipo di valore ricevuto, lo recupera con il metodo corretto ed in caso di float lo trasforma in intero restituendo sempre un valore intero allo sketch.

Ed ecco un video del progetto in funzione:

Buon divertimento.

Permalink link a questo articolo: http://www.mauroalfieri.it/elettronica/arduino-osc-iphone-e-sei-led-lo-sketch.html

90 comments

Vai al modulo dei commenti

  1. michele

    ciao ho provato a verificare il codice e mi da un errore
    ‘oscmessage’ was not declared in this scope, dato che sono ignorante in materia mi puoi dire come fare ??? grazie

    1. Mauro Alfieri

      Ciao,
      hai incluso la classe OSC?

      Mauro

      1. cristian

        ciao io non riesco a caricare la classe OSC.mi da sempre un errore

        1. Mauro Alfieri

          Ciao Cristian,
          quale errore?
          Solitamente gli errori arduino ti indicano cosa non va, hai provato a leggere e cercare di capire che errore sia e se puoi risolverlo?

          Mauro

  2. rele

    ciao scusami se ti disturbo ancora ma nello sketch che hai creato come posso modificarlo per metterci una shield con 4 relè grazie ancora per i tuoi consigli ciao

    1. Mauro Alfieri

      Quale shield vuoi collegarci?
      Secondo i pin che la shield prevede per connettersi ad arduino puoi modificare lo sketch.

      Mauro

  3. Michele

    vorrei collegarci una shield con 4 relè e comandarli da remoto con osc grazie

    1. Mauro Alfieri

      Ciao Michele,
      mi sai indicare la shield che hai scelto o almeno i pin a cui hai collegato i relè?

      Mauro

  4. michele

    è un modulo con 4 relè i pin su cui voglio collegarli sono 9,8,7,6 ciao

    1. Mauro Alfieri

      Ciao Michele,
      il pin 9 è un PWM, opinione personale, è sprecato per pilotare un relè puoi usarlo per tante altre cose interessanti, ti consiglio di utilizzare uno dei pin non PWM: 2,4,12 o 13 al suo posto.
      A parte questo lo sketch prevede che tu possa già collegare un carico ai pin 2,3,4,5,6,7 prova a mettere dei led sul pin 2,4,6,7 e controlla che con la prima schermata OSC tu riesca ad accenderli, se ci riesci il problema potrebbe essere legato alla parte elettrica che eccita i relè.

      Fammi sapere che risultato ottieni da questo test.

      Mauro

  5. michele

    ho provato ma nulla di fatto i led non si accendono io collego il led sul gnd e pin 2 provo a inviare il comando da iphone ma non funziona non si accende nulla si accendono solo rx e tx ma presumo che quello sia la comunicazione tra arduino e iphone

    1. Mauro Alfieri

      Ciao Michele,
      l’iPhone deve essere collegato alla rete via wireless, ed arduino alla stessa rete via Ethernet.
      Prova averificare dai miei video e testi se hai correttamente impostato i path associati ai pulsanti sull’interfaccia OSC Editor.

      Mauro

  6. mauro

    Ciao Mauro , molto bello questo progetto usando l’interfaccia per iphone / ipad , volevo chiederti se sai il sistema per inviare i dati al contrario , cioè da arduino ad ipad , tipo per fare accendere i led che sono nell’interfaccia o qualche label. Ho già fatto un po di prove ma non ci sono ancora riuscito.

    Aspetto buone notizie da parte tua.

    1. Mauro Alfieri

      Ciao,
      non ho ancora sperimentato la comunicazione inversa.
      E’ un obiettivo che mi sono posto e spero presto di poterlo soddisfare, gli argomenti su cui scrivere sono tanti come gli appassionati del Blog che chiedono consigli e a cui cerco di dare risposta.

      Posso consigliarti di consultare il blog di tanto in tanto e verificare se ci sono nuovi articoli sull’argomento.
      Sto valutando l’idea di mandare ogni 15 giorni od ogni mese una newsletter con gli ultimi articoli, è ancora un’idea perchè non voglio infastidire nessuno.

      Ti consiglio di leggere anche la nuova pagina “Sostienimi” e valutare uno dei modi di sostenere il blog in modo che io possa continuare a sperimentare e pubblicare.

      Mauro

  7. roberto

    Ciao
    Come posso rendere questo sketch funzionante su una Wifi Shield
    grazie infinite

    1. Mauro Alfieri

      Ciao Roberto,
      alla WiFi shield ci sto lavorando anche io in questi giorni.
      Penso tu potrai trovare una serie di tutorial tra qualche settimana.
      Se vuoi essere sempre aggiornato puoi iscriverti alla newsletter o visitare il blog nei prossimi giorni.

      Mauro

  8. roberto

    Ciao Mauro,
    ho importato lo sketck su arduino senza problemi, ma non capisco su l’iphohe come avere l’interfaccia per comandare lo sketck, perdonami ma sono alle prime armi, devo realizarla io vero?
    Ciao e buona giornata

    1. Mauro Alfieri

      Tra i Post correlati e se cerchi nel Blog ci sono altri articoli sull’argomento OSC in cui puoi trovare le istruzioni che cerchi.

      Mauro

  9. roberto

    cercato e trovato
    grazie Marco

    1. Mauro Alfieri

      Ciao Roberto,
      sono contento che tu abbia trovato quello che ti occorre.

      Mauro

  10. roberto

    Purtroppo non riesco a farlo funzionare
    Ho preparato come da tuo tutorial il programmino OSC per iphone con TouchOSCho trasferito il tutto sull’Iphone con le porte uscita 8000 e ingresso 9000
    copia e incolla del tuo sketck in arduino, modifico ip e mac e trasferisco ad arduino senza problemi.
    Ho collegato un led all’uscita 2 per provare attivo i pulsanti sull’iphone…ma non si accende nulla….sono disperato come mai non mi funziona?
    AIUTO….SONO DISPERATO 🙂

  11. roberto

    FATTO!!! funziona che è una meraviglia.
    Il problema era che dovevo cambiare la porta ip da quella utilizzata dal pc per trasferire il software all’iphone a quella di arduino.
    Ora sarebbe stupendo attivarlo da remoto fuori rete wifi entrando dall’esterno al router
    Grazie Mille Mauro sono felicissimo 🙂

    1. Mauro Alfieri

      BENISSIMO !!!
      Sono contento perché sperimentando hai raggiunto il tuo obiettivo.

      Mauro

  12. Mario

    Ciao Mauro.
    Come posso far funzionare il tutto utilizzando l’iphone su internet?
    Ho configurato dyndns sul mio router. Puoi darmi qualche consiglio?

    Volevo chiederti se questo codice funziona anche su Arduino Ethernet.

    Ciao e grazie.
    Mario

    1. Mauro Alfieri

      Ciao Mario,
      se hai configurato già un dyndns devi rimappare la porta 10000 in modo che ogni connessione sul tuo dyndns e porta 10000 arrivi su Arduino.
      Quando ti colleghi con l’iPhone al tuo indirizzo dyndns e porta 10000 questo si connette al tuo Arduino Ethernet.

      Ho in progetto di scrivere un articolo su come farlo, presto sarà on-line.
      Mauro

  13. MICHELE

    Ciao Mauro,
    ho appena iniziato e ho comprato un ARDUINO UNO ed Ethernet Shield e volevo cominciare semplicemente a comprendere tutti i codici semplicemente accendendo il led 13 con smartphone Android.
    Ho preso i tuoi codici dell’accensione a 6 led e ho tolto gli altri 5, però mi da alcuni errori che non riesco a togliere… qualche parentesi da aprire o chiudere che non capisco!!!
    Grazie e continua così!!!!!

    #include “Ethernet.h”
    #include “OSCClass.h”
    #include “SPI.h”

    int pinLedA=13;

    OSCMessage recMes;

    OSCClass osc(&recMes);

    byte serverMac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    byte serverIp[] = { 192, 168, 2, 130 };
    int serverPort = 10000;

    char *topAddress=”butt”;
    char *subAddress[15]= {“ledA”

    void setup() {
    Ethernet.begin(serverMac ,serverIp);
    osc.begin(serverPort);

    pinMode(pinLedA, OUTPUT);

    digitalWrite(pinLedA, LOW); //LED OFF

    osc.flush();
    }

    void loop() {
    if ( osc.available() ) {
    if( !strcmp( recMes.getAddress(0) , topAddress ) ){
    if( !strcmp( recMes.getAddress(1) , subAddress[0] ) ) { digitalWrite(pinLedA, getIntValue(&recMes));
    }
    if( !strcmp( recMes.getAddress(1) , subAddress[6] ) ) { digitalWrite(pinLedA, getIntValue(&recMes));
    }
    }

    int getIntValue(OSCMessage *mes){
    switch( mes->getTypeTag(0) ){
    case ‘i’: { return mes->getArgInt(0); }
    break;

    case ‘f’: { return int(mes->getArgFloat(0)); }
    break;
    }
    }

    ERRORI:

    20: error: expected ‘,’ or ‘;’ before ‘void’
    ino: In function ‘void loop()’:
    40: error: a function-definition is not allowed here before ‘{‘ token
    48: error: expected ‘}’ at the end of input

    1. Mauro Alfieri

      Ciao Michele,
      per essere all’inizio hai scelto un progetto impegnativo.
      Ti consiglio di leggere le prime lezioni del “corso arduino” gratuito on-line e affrontare progetti più complessi man mano che acquisisci le basi e le conoscenze necessarie.

      In merito al tuo problema hai tolto un po’ troppo, il primo errore è un errore di sintassi come ti suggerisce alla linea 20: error: expected ‘,’ or ‘;’ before ‘void’ ossia ti manca un ; alla linea precedente

      Guardando la linea precedente alla linea 20 manca più di un solo ;
      char *subAddress[15]= {“ledA”

      Sistemato questo errore verifica se anche gli altri ti si ripresentano.
      Mauro

  14. Matteo

    Ciao Mauro,
    Nella linea 16 devo inserire il mac address della Ethernet Shield (scritto dietro essa), nella linea 17 devo inserire ip associato sempre alla Ethernet Shield, il mio problema e che non so quale sia e non so come dargli un ip. Grazie mille

    1. Mauro Alfieri

      Ciao Matteo,
      l’IP dipende dalla tua rete, probabilmente possiedi un router o altro apparato di rete a casa o dove sai provando il tuo progetto, devi assegnare ad Arduino un IP simile a quello che ha il tuo Pc o Smartphone, mi raccomando non lo stesso usato da un altro apparecchio altrimenti crei un conflitto IP e non funziona nessuno dei due.

      Mauro

  15. Loris

    Ciao Mauro,
    Ho provato a realizzare l’interfaccia come da tutorial, ho assegnato gli stessi nomi ed ho impostato tutti i parametri come indicato, ho corretto lo sketch con il mac e l’ip corretto, ho verificato lo sketch con risultato positivo, sembra tutto corretto ma una volta caricato su Arduino non succede niente. Ho notato che modulando l’interfaccia TouchOSC sull’iphone si accendono i led tx ed rx aulla ethernet sheld. Non sono riuscito a capire dove stà il problema, se hai qualche idea che mi può aiutare ti sarei molto grato.
    Grazie in anticipo

    1. Mauro Alfieri

      Ciao Loris,
      dall’App TouchOSC riconosci l’IP impostato su Arduino?
      Così come mi racconti sembra un problema di comunicazione tra iPhone e Arduino, l’accensione dei led Rx e Tx è dovuta alla comunicazione seriale attiva nello sketch.

      Mauro

  16. paolo

    Mi piacerebbe trovare le librerie OSC….
    Cè solo una insalata di file sul web…
    quali siano quelli giusti e funzionanti, è solo un mistero

    1. Mauro Alfieri

      Ciao Paolo,
      nell’articolo dovrei aver incluso il link a quelle da me utilizzate.

      Mauro

  17. marco

    Salve io ho copiato il tuo sketch e tutto mi funziona,ma volevo modificarlo.Io vorrei che trammite un contatto dare un imput ad arduino e farmi accendere un led su osc come lo posso modificare?? grazie

    1. Mauro Alfieri

      Ciao Marco,
      ti consiglio di leggere uno degli articoli dedicati ai pulsanti ed i led ed integrare gli sketch.

      Mauro

      1. marco

        ho provato ma sulla voce void loop mi da errore

        1. Mauro Alfieri

          Ciao Marco,
          é evidente che hai commesso qualche semplice errore di sintassi.
          Controlla il messaggio di errore e individua cosa correggere.

          Mauro

  18. marco

    Fatto mancava una parentesi 🙂 , ora posso vedere quando questo pulsante è premuto trammite un led su osc??

    1. Mauro Alfieri

      Ciao Marco,
      non ho capito se vuoi vedere quando il pulsante é premuto o se vuoi accendere il led tramite pulsante.

      Mauro

  19. Marco

    Io ho fatto il tuo sketch e poi ho aggiunto un normalissimo pulsante che comanda un led ,che funziona solo quando il pulsante resta premuto. Ora vorrei poter vedere su osc trammite il disegno del Led quando questo Led è acceso o spento… Spero di essermi spiegato e spero tu mi possa aiutare.. Grazie Marco

    1. Mauro Alfieri

      Ciao Marco,
      so che OSC é un protocollo bidirezionale, per cui puoi ricevere informazioni da Arduino sul led.
      Non ho mai provato come si usi, se sperimenti questa opportunità e ti va di condividere con altri appassionati il tuo successo mi fa piacere.

      Mauro

  20. Frank

    Salve

    Sono rimasto piacevolmente colpito dal tuo progetto di test per OSC Touch , ho provato il tutto e funziona con ethernet , haime devo usare una connessione wifi , ho provato varie soluzioni ma non riesco a fare convivere wifi con osc , mi sembra dai messaggi che OSC voglia per forza ethernet anche se io non la uso.
    Mi potresti dare conferma o indicazioni.

    grazie mille

    1. Mauro Alfieri

      Ciao Frank,
      Grazie per i complimenti.
      Non ho mai provato con la WiFi Shield il medesimo progetto.
      So per certo che non tutte le WiFi Shield lavorano allo stesso modo, alcune shield utilizzano librerie simili a quelle della Ethernet e penso possano funzionare.

      Mauro

      1. Frank

        Ciao Mauro

        io per fare le prove usao la seguente Arduino WiFi shield con antenna integrata

        sono già risucito a collegare arduino in wifi alle rete protetta mi prende l’indirizzo IP , ma poi se provo a inglobare il progetto osc si incavola dandomi errori su delle librerie.

        hai idee

        Grazie

        1. Mauro Alfieri

          Ciao Frank,
          potresti procedere verificando le incompatibilità tra le librerie o scegliendo delle librerie che non vadano in conflitto.
          Spesso mi trovo anche io in questa situazione e una delle strade che, spesso, mi da migliori risultati è la ricerca di librerie compatibili con il progetto.

          Mauro

          1. Frank

            Ciao sono d’accordo però purtropppo non so dove cercare le librerie , sono un novizio con arduino .

            grazie comunque

          2. Mauro Alfieri

            Ciao Frank,
            io uso Google, in alternativa puoi provare su gitHub

            Mauro

  21. Matteo

    ho messo la libreria OSC
    Continua a dare errore in questa riga
    OSCClass osc(&recMes);

    ‘OSCClass’ does not name a type

    1. Mauro Alfieri

      Ciao Matteo,
      potrebbe non essere la versione corretta o essere cambiato il nome della classe controlla nella documentazione della documentazione della classe.

      Mauro

      1. Matteo

        Ciao Mauro,
        poi ho risolto trovando in rete la libreria OSCClass.
        Adesso volevo chiederti un’altra cosa. Posso far dialogare OSC, Arduino e un modulo bluetooh senza utilizzare la scheda di rete lan?

        1. Mauro Alfieri

          Ciao Matteo,
          non ho mai provato il modulo bluetooth, so che funzionano in modalità seriale.

          Mauro

  22. Jean

    I am trying to modified it for wifi shield but dont work can someone help me?
    how did you do that?
    I am trying same thing and dont work can you send me your code or help me modified it?

  23. Luca

    Ciao complimenti per la spiegazione, davvero ben fatta. Avrei bisogno di un paio di info se sai come fare. Vorrei usare arduino ethernet board collegata al mio router e tramite la porta I2C un arduino due. Posso con touchOCS impostare dei comandi che vadano ad agire sui più della scheda slave?

    L’altra domanda e se c’è la possibilità di controllare lo stato di un pin, tipo mettere un riquadro che si accende o spegne a seconda dello stato di un pin…

    1. Mauro Alfieri

      Ciao Luca,
      dovresti verificare le ethernet shield sia compatibile con l’arduino due e che le librerie necessarie possano essere compilate per questa scheda.
      In merito al TouchOSC se funziona lo strato hw e le librerie non dovresti aver alcun problema.
      Lo stato di un pin dovrai impostartelo in una variabile di stato e valutarla quando vuoi sapere se il suo livello è HIGH o LOW.

  24. Marco

    Salve ho fatto questo skech e tutto funziona,si un pin ho collegato un relè apposito ma parte in on come potrei fare x farlo partire in off? Grazie marco

    1. Mauro Alfieri

      Ciao Marco,
      il relè parte eccitato o il contatto parte chiuso?

  25. Marco

    Ecitato

    1. Mauro Alfieri

      Ciao Marco,
      ti basta invertire i segnali nello sketch, quando il pin è impostato a LOW convertilo a HIGH e viceversa.

  26. Walter S.

    Ciao Mauro, ormai voglio imparare tutti i tuoi progetti perché sono fatti e spiegati benissimo e sono un’ottima base per le idee che mi stuzzicano la mente.
    Una domanda:come mai port outgoing 9000, port incoming 8000 e tu imposti 10000? Con Router fastweb sto impazzendo a settare le porte. Grazie! E complimenti ancora

    1. Mauro Alfieri

      Ciao Walter,
      ti invito a leggere attentamente la descrizione dello sketch se vuoi imparare e diventare autonomo sui progetti.
      Noterai che alla line 18 ho settato serverPort a 10000.

      8000 e 9000 sono le porte di default ma io preferisco personalizzare, anche se minimamente, i miei sketch per acquisire padronanza.
      In ogni caso 8000,9000,10000 sono solo numeri di porte l’importante è impostarle in modo corretto tra server e client.

  27. Walter S.

    scusa Mauro ma non ho capito: server port 10.000 dello sketch sarebbe quindi l’outgoing?….. e incoming dove viene settato? o queste porte devono solo essere aperte nel router?
    scusa la confusione che ho in mente…..

    1. Mauro Alfieri

      Ciao Walter,
      lo sketch imposta la porta 10000 come porta in ascolto su arduino.
      Lato router dovrai consentire l’accesso alla porta 10000 dall’esterno della tua rete.

  28. Walter S.

    porta UDP giusto? grazie ancora.

  29. Luca L.

    dalla linea 47 alla 63,dopo aver incluso le classi,durante il caricamento,mi da l’errore “sketch….:47:error: ‘getIntValue’ was not declared in this scope”.. come mai? cosa posso fare per correggere l’errore?

    1. Mauro Alfieri

      Ciao Luca la getIntValue è una funzione dichiarata in fondo allo sketch, controlla di averla copiata.

  30. Francesco D.G.

    Ciao Mauro complimenti per l’articolo, hai avuto modo di testarlo con un IPAD? il risultato non è uguale anche se TOUCHOSC è identico e viene programmato allo stesso e identico modo. sai dirmi la causa o se per caso occorrono altre librerie per Ipad?
    grazie!

    1. Mauro Alfieri

      Ciao Francesco,
      su Ipad non ho potuto testarlo non possedendolo.
      Tuttavia mi attenderei un comportamento identico perché l’app è la medesima.
      Prova a scrivere all’autore dell’App se hanno introdotto delle differenze di protocollo tra le due versioni per smartphone e tablet.

  31. Marco

    Ciao Mauro, compilando il tuo sketch mi da questo errore:

    This report would have more information with
    “Show verbose output during compilation”
    enabled in File > Preferences.
    Arduino: 1.0.6 (Windows NT (unknown)), Board: “Arduino Uno”
    C:\Users\Marco\Documents\Arduino\libraries\OSCClass\OSCClass.cpp: In member function ‘void OSCClass::beginMulti(uint16_t, uint8_t*)’:
    C:\Users\Marco\Documents\Arduino\libraries\OSCClass\OSCClass.cpp:614: error: ‘multicastsocket’ was not declared in this scope

    Come potrei risolvere?

    Ho installato anche la libreria ARDOSC ma non riesco a configurare il codice!

    1. Mauro Alfieri

      Ciao Marco,
      controlla che la libreria OSCClass sia compatibile con l’IDE che stai utilizzando, se non ricordo male è compatibile con l’ide 0022

  32. Luca

    Ciao, ho caricato lo sketch e aggiornato la libreria OSC, scaricato l’app osc ed ora non capisco come devo configurare l’app.
    nelle connessioni, OSC MIDI Bridge e Core Midi che parametri vanno messi?
    Nei layout non ho trovato un’interfaccia come quella del tuo video.
    Anche nelle opzioni, devo attivare qualcosa?
    é normale che se effettuo un ping dell’ip della shield dall’interno della rete non mi risponda?
    Scusa le mille domande ma non basteranno!
    Grazie
    Luca

    1. Mauro Alfieri

      Ciao Luca,
      un problema alla volta:
      1. se l’interfaccia di configurazione è differente potresti non aver scaricato la mia stessa App oppure la hanno modificata e dovrai chiedere supporto al produttore o cercare di capire quale configurazione attuare
      2. se l’arduino non risponde al ping c’è qualche problema con la configurazione della tua rete, verifica che l’IP sul tuo router sia stato assegnato e che corrisponda ad una rete valida ed ad arduino.

  33. germano

    Caro Mauro, complimenti per il blog e gli articoli pubblicati da voi, i miei dubbi e la following’m cercando di implementare il codice in modo da poter ottenere un feedback sul mio Android, ma quando aggiungo la biblioteca ArdOSC.h con l’IDE non compila OSCClass.ha , lo stesso errore si verifica quando si tenta di aggiungere al programma la OSCServer e OSCClient, l’errore perché non sto assegnato biblioteca. Mi potete aiutare, perché già provato a cambiare la libreria di codice cpp.
    Grazie.

    1. Mauro Alfieri

      Ciao Germano,
      sei certo di aver installato correttamente la libreria, che questa sia completa e che sia compatibile con la versione dell’IDE che stai utilizzando.
      Se non ricordo male la libreria OSC è compatibile con l’IDE 0022 e non so se sia stata adattata alle successive.

  34. giovanni

    Salve Mauro sono un debuttante con arduino e vorrei realizzare il tuo progetto
    ma ho un problema con la connessione tra iphone e scheda ethernet secondo me il problema c e l ho con l indirizzò MAC, ti posso chiedere un aiuto
    Grazie

    1. Mauro Alfieri

      Ciao Giovanni,
      se sei alle prime armi con Arduino e non possiedi conoscenze di networking, routing ecc io inizierei i con un progetto più semplice e cercherei in internet dei corsi per apprendere concetti base sulle reti.
      In questo modo acquisirai delle importanti conoscenze e realizzerai progetti anche più importanti di questo.

  35. Antonio

    Ciao Mauro, da un pò di tempo sto cercando di creare un progetto per accendere dei led tramite pagina internet. Fino ad ora sono riuscito a fare funzionare il tutto ma solo in locale, quindi sono limitato dalla portata della mia rete wifi. La mia intenzione è quella di poter comandare i led anche quando sono fuori casa. Attualmente ho creato una pagina altervista.org con il seguente codice html

    [[ codice rimosso in automatico ]]

    Pensi sia possibile realizzare la mia idea?
    Ne approfitto per ringraziarti per quello che hai fatto e continui a fare per la comunity!

    1. Mauro Alfieri

      Ciao Antonio,
      innanzitutto chiedo anche a te di rispettare l’unica regola del blog e di non inserire codice nei commenti che viene automaticamente rimosso.
      In merito al tuo progetto penso sia più semplice, oltre che sicuro, far in modo che la pagina non sia su un server pubblico ma consentire la connessione al tuo arduino da un dispositivo esterno alla tua rete tramite router.
      Su come rendere accessibile un servizio web attraverso un router ho scritto qualche articolo e troverai di certo tanta documentazione nel web.

      1. Antonio

        Hai ragione Mauro scusami. Ho trovato qualcosina ma richiedono registrazioni a siti che offrono servizi di Dns dinamici, oppure l’installazione di programmi su computer, con la conseguenza che quest’ultimo deve rimanere acceso.

        1. Antonio

          servizi Dns dinamici a pagamento*, avevo dimenticato di dire

          1. Mauro Alfieri

            Ciao Antonio,
            esistono servizi DNS Dinamici gratuiti, alcuni di questi sono supportati dai router comuni così puoi configurarli in modo che sia il router a provvedere all’aggiornamento.
            Verifica il tuo router quali servizi supporta o chiedi al tuo provider come fare.

      2. Antonio

        Avendo il dlink dsl-2640b mi sono registrato gratuitamente a dlinkddns.com, adesso ho un host. Dalle impostazioni del router DNS Setup -> DDNS Configuration ho abilitato il DNS Dinamico, inserendo come Host Name lo stesso inserito su DlinkDdns, identicamente per username e password. Ho riavviato il router e registrato su dlinkddns.com il nuovo ip. Pensavo che dopo queste configurazioni, mi bastasse inserire “nomemiohost.dlinkddns.com” su un telefono connesso in rete 3g per far si che si caricasse qualcosa relativo al router, invece mi ritorna l’errore “pagina web non disponibile”. Non capisco se è normale che avvenga questo o se commetto un errore. Se hai fatto un articolo che spiega come fare, potresti darmi una parola chiave per poterlo trovare. Grazie

        1. Antonio

          Effettuando il Ping sul host creato (utilizzando una macchina connessa in rete dati cellulare), viene rilevato correttamente l’indirizzo IP del router di casa, ma tutti i pacchetti vengono persi
          “10 packets transmitted, 0 packets received, 100.0% packet loss”

          1. Mauro Alfieri

            Ciao Antonio,
            il ping potrebbe essere impedito per ragioni di sicurezza oppure potresti avere una errata configurazione del router.

        2. Mauro Alfieri

          Ciao Antonio,
          si è normale perché nulla nel router indica dove ridirigere le chiamate per la porta 80 o altra porta scelta da te per il controllo OSC.
          Ti consiglio di leggere il manuale del router, dovrebbe chiamarsi, port forwarding, o di consultare qualche guida online sul networking per comprendere come funzionano le reti e come eseguire questa configurazione.

  36. Massimiliano

    mi da questo errore
    This report would have more information with
    “Show verbose output during compilation”
    enabled in File > Preferences.
    Arduino: 1.0.6 (Windows 7), Board: “Arduino Mega 2560 or Mega ADK”
    osc.ino:2:22: error: OSCClass.h: No such file or directory
    osc:7: error: ‘OSCMessage’ does not name a type
    osc:8: error: ‘OSCClass’ does not name a type
    osc.ino: In function ‘void setup()’:
    osc:20: error: ‘osc’ was not declared in this scope
    osc.ino: In function ‘void loop()’:
    osc:29: error: ‘osc’ was not declared in this scope
    osc:30: error: ‘recMes’ was not declared in this scope
    osc:32: error: ‘getIntValue’ was not declared in this scope

    ho provato a cercare la libreria ma nn l’ho trovata grazie

    1. Mauro Alfieri

      Ciao Massimiliano,
      hai interpretato bene l’errore, manca la libreria.
      Hai cercato con google se esiste tale libreria compatibile con le ultime versioni dell’IDE?

  37. Calogero

    Ciao Mauro mi potresti dire per cortesia qual’e L’app che hai installato per questo progetto?

    1. Mauro Alfieri

      Ciao Calogero,
      Touch OSC ed ho scritto anche degli articoli su come usarla.

  38. Giovanni

    Ciao Mauro scusa,vorrei chiederti se c’è un modo per controllare se la ethernet shield riceve correttamente i comandi inviati dall’ app.Perchè io non riesco a far funzionare il tuo sketch,vedo i led Rx e LINK che lampeggiano ma arduino non fa nessuna azione
    Grazie

    1. Mauro Alfieri

      Ciao Giovanni,
      puoi usare il monitor seriale, trovi come usarlo nel mio corso base arduino gratuito on-line

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>