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.

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

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

96 commenti

Vai al modulo dei commenti

    • michele il 1 Giugno 2012 alle 16:38
    • Rispondi

    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. Ciao,
      hai incluso la classe OSC?

      Mauro

        • cristian il 4 Agosto 2013 alle 01:47
        • Rispondi

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

        1. 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

    • rele il 4 Giugno 2012 alle 18:15
    • Rispondi

    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. Quale shield vuoi collegarci?
      Secondo i pin che la shield prevede per connettersi ad arduino puoi modificare lo sketch.

      Mauro

    • Michele il 5 Giugno 2012 alle 09:28
    • Rispondi

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

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

      Mauro

    • michele il 6 Giugno 2012 alle 08:35
    • Rispondi

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

    1. 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

    • michele il 6 Giugno 2012 alle 11:14
    • Rispondi

    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. 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

    • mauro il 9 Giugno 2012 alle 23:33
    • Rispondi

    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. 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

    • roberto il 3 Ottobre 2012 alle 18:15
    • Rispondi

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

    1. 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

    • roberto il 17 Ottobre 2012 alle 12:24
    • Rispondi

    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. 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

    • roberto il 18 Ottobre 2012 alle 22:15
    • Rispondi

    cercato e trovato
    grazie Marco

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

      Mauro

    • roberto il 19 Ottobre 2012 alle 11:39
    • Rispondi

    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 🙂

    • roberto il 19 Ottobre 2012 alle 11:52
    • Rispondi

    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. BENISSIMO !!!
      Sono contento perché sperimentando hai raggiunto il tuo obiettivo.

      Mauro

    • Mario il 8 Novembre 2012 alle 16:50
    • Rispondi

    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. 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

    • MICHELE il 6 Dicembre 2012 alle 20:26
    • Rispondi

    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. 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

    • Matteo il 21 Gennaio 2013 alle 20:54
    • Rispondi

    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. 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

    • Loris il 30 Gennaio 2013 alle 16:01
    • Rispondi

    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. 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

    • paolo il 4 Giugno 2013 alle 23:22
    • Rispondi

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

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

      Mauro

    • marco il 10 Giugno 2013 alle 19:39
    • Rispondi

    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. Ciao Marco,
      ti consiglio di leggere uno degli articoli dedicati ai pulsanti ed i led ed integrare gli sketch.

      Mauro

        • marco il 11 Giugno 2013 alle 20:57
        • Rispondi

        ho provato ma sulla voce void loop mi da errore

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

          Mauro

    • marco il 13 Giugno 2013 alle 20:01
    • Rispondi

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

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

      Mauro

    • Marco il 14 Giugno 2013 alle 18:43
    • Rispondi

    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. 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

  1. 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. 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

        • Frank il 25 Ottobre 2013 alle 15:37
        • Rispondi

        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. 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

            • Frank il 25 Ottobre 2013 alle 18:06

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

            grazie comunque

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

            Mauro

    • Matteo il 28 Novembre 2013 alle 21:59
    • Rispondi

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

    ‘OSCClass’ does not name a type

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

      Mauro

        • Matteo il 29 Novembre 2013 alle 09:55
        • Rispondi

        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. Ciao Matteo,
          non ho mai provato il modulo bluetooth, so che funzionano in modalità seriale.

          Mauro

    • Jean il 11 Dicembre 2013 alle 18:11
    • Rispondi

    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?

    • Luca il 18 Aprile 2014 alle 14:41
    • Rispondi

    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. 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.

    • Marco il 30 Aprile 2014 alle 11:32
    • Rispondi

    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. Ciao Marco,
      il relè parte eccitato o il contatto parte chiuso?

    • Marco il 30 Aprile 2014 alle 16:16
    • Rispondi

    Ecitato

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

    • Walter S. il 3 Giugno 2014 alle 22:43
    • Rispondi

    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. 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.

    • Walter S. il 4 Giugno 2014 alle 13:18
    • Rispondi

    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. 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.

    • Walter S. il 4 Giugno 2014 alle 17:58
    • Rispondi

    porta UDP giusto? grazie ancora.

    • Luca L. il 12 Gennaio 2015 alle 18:54
    • Rispondi

    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. Ciao Luca la getIntValue è una funzione dichiarata in fondo allo sketch, controlla di averla copiata.

    • Francesco D.G. il 31 Gennaio 2015 alle 23:32
    • Rispondi

    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. 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.

    • Marco il 7 Febbraio 2015 alle 17:53
    • Rispondi

    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. Ciao Marco,
      controlla che la libreria OSCClass sia compatibile con l’IDE che stai utilizzando, se non ricordo male è compatibile con l’ide 0022

    • Luca il 21 Febbraio 2015 alle 20:10
    • Rispondi

    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. 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.

    • germano il 22 Febbraio 2015 alle 03:12
    • Rispondi

    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. 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.

    • giovanni il 1 Maggio 2015 alle 20:35
    • Rispondi

    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. 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.

    • Antonio il 15 Maggio 2015 alle 12:15
    • Rispondi

    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. 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.

        • Antonio il 15 Maggio 2015 alle 13:49
        • Rispondi

        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.

          • Antonio il 15 Maggio 2015 alle 14:51
          • Rispondi

          servizi Dns dinamici a pagamento*, avevo dimenticato di dire

          1. 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.

        • Antonio il 15 Maggio 2015 alle 20:05
        • Rispondi

        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

          • Antonio il 15 Maggio 2015 alle 23:53
          • Rispondi

          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. Ciao Antonio,
            il ping potrebbe essere impedito per ragioni di sicurezza oppure potresti avere una errata configurazione del router.

        1. 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.

    • Massimiliano il 16 Giugno 2015 alle 00:07
    • Rispondi

    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. 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?

    • Calogero il 5 Febbraio 2016 alle 15:45
    • Rispondi

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

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

    • Giovanni il 27 Febbraio 2016 alle 20:48
    • Rispondi

    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. Ciao Giovanni,
      puoi usare il monitor seriale, trovi come usarlo nel mio corso base arduino gratuito on-line

    • Pablo il 5 Dicembre 2018 alle 10:26
    • Rispondi

    Ciao Mauro,
    complimenti per tutti i tutorial ed i tuoi progetti!
    Mi piacerebbe molto portare avanti questo tipo di progetto sfruttando la connessione dei due dispositivi ( Cellulare e Arduino ) tramite bluetooth al posto della WiFi.
    Se si quale potrebbero essere le modifiche da apportare allo sketch o se hai un esempio da farmi vedere.
    Grazie

    1. Ciao Pablo,
      direi che se cambi tecnologia di trasmissione dovrai cambiare tutto il progetto, si tratta di un progetto completamente differente in quanto l’OSC è un protocollo network e quindi, ad oggi che io sappia, non è possibile veicolarlo su Bluetooth.

    • Pablo il 5 Dicembre 2018 alle 11:36
    • Rispondi

    Grazie intanto per la risposta.
    Direi che non ho molto le idee chiare…ho appena iniziato con i progetti più semplici ed adesso iniziano ad uscire le mie lacune!
    Allora tornando al progetto posso usare OSC,creare una WiFi locale standalone tramite la scheda fischino mega?
    Per far comunicare il tutto devo interfaccia con PureData o ci sono più modi?
    Ho visto che alcuni usano Processing.

    1. Ciao Pablo,
      penso sia giusto prima stabilire cosa vuoi ottenere, poi come pensi sia fattibile e poi iniziare a parlare di tecnologie e protocolli.

    • Pablo il 9 Dicembre 2018 alle 22:48
    • Rispondi

    Ciao Mauro,
    grazie intanto per le risposte e la pazienza…
    Andiamo per gradi…Ho acquistato un Fishino mega e vorrei creare una WiFi standalone per poi collegarmi con il cellulare…passo successivo tramite touchOSC inviare i comandi per gestire le uscite come 0/1 oppure in PWM.
    Il problema che ho provato più volte senza riuscirci, e non mi è chiaro che librerie includere e che sketch per per creare la WiFI standalone. Nei vari esempi che ho trovato si collegano sempre ad una rete esistente e vanno ad inviare o a ricevere messaggi in una pagina HTTP.
    Grazie

    1. Ciao Pablo,
      io ho scritto degli esempi per WeMos che creano delle reti adHoc che potresti provare su Fishino Mega adattando pin e comandi.
      In alternativa prova a scrivere al produttore, futura elettronica, chiedendo loro se hanno un esempio adatto al tuo scopo.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.