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.
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;
Ed ecco un video del progetto in funzione:
Buon divertimento.
96 commenti
Vai al modulo dei commenti
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
Autore
Ciao,
hai incluso la classe OSC?
Mauro
ciao io non riesco a caricare la classe OSC.mi da sempre un errore
Autore
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
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
Autore
Quale shield vuoi collegarci?
Secondo i pin che la shield prevede per connettersi ad arduino puoi modificare lo sketch.
Mauro
vorrei collegarci una shield con 4 relè e comandarli da remoto con osc grazie
Autore
Ciao Michele,
mi sai indicare la shield che hai scelto o almeno i pin a cui hai collegato i relè?
Mauro
è un modulo con 4 relè i pin su cui voglio collegarli sono 9,8,7,6 ciao
Autore
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
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
Autore
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
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.
Autore
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
Ciao
Come posso rendere questo sketch funzionante su una Wifi Shield
grazie infinite
Autore
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
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
Autore
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
cercato e trovato
grazie Marco
Autore
Ciao Roberto,
sono contento che tu abbia trovato quello che ti occorre.
Mauro
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 🙂
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 🙂
Autore
BENISSIMO !!!
Sono contento perché sperimentando hai raggiunto il tuo obiettivo.
Mauro
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
Autore
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
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
Autore
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
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
Autore
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
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
Autore
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
Mi piacerebbe trovare le librerie OSC….
Cè solo una insalata di file sul web…
quali siano quelli giusti e funzionanti, è solo un mistero
Autore
Ciao Paolo,
nell’articolo dovrei aver incluso il link a quelle da me utilizzate.
Mauro
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
Autore
Ciao Marco,
ti consiglio di leggere uno degli articoli dedicati ai pulsanti ed i led ed integrare gli sketch.
Mauro
ho provato ma sulla voce void loop mi da errore
Autore
Ciao Marco,
é evidente che hai commesso qualche semplice errore di sintassi.
Controlla il messaggio di errore e individua cosa correggere.
Mauro
Fatto mancava una parentesi 🙂 , ora posso vedere quando questo pulsante è premuto trammite un led su osc??
Autore
Ciao Marco,
non ho capito se vuoi vedere quando il pulsante é premuto o se vuoi accendere il led tramite pulsante.
Mauro
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
Autore
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
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
Autore
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
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
Autore
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
Ciao sono d’accordo però purtropppo non so dove cercare le librerie , sono un novizio con arduino .
grazie comunque
Autore
Ciao Frank,
io uso Google, in alternativa puoi provare su gitHub
Mauro
ho messo la libreria OSC
Continua a dare errore in questa riga
OSCClass osc(&recMes);
‘OSCClass’ does not name a type
Autore
Ciao Matteo,
potrebbe non essere la versione corretta o essere cambiato il nome della classe controlla nella documentazione della documentazione della classe.
Mauro
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?
Autore
Ciao Matteo,
non ho mai provato il modulo bluetooth, so che funzionano in modalità seriale.
Mauro
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?
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…
Autore
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.
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
Autore
Ciao Marco,
il relè parte eccitato o il contatto parte chiuso?
Ecitato
Autore
Ciao Marco,
ti basta invertire i segnali nello sketch, quando il pin è impostato a LOW convertilo a HIGH e viceversa.
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
Autore
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.
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…..
Autore
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.
porta UDP giusto? grazie ancora.
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?
Autore
Ciao Luca la getIntValue è una funzione dichiarata in fondo allo sketch, controlla di averla copiata.
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!
Autore
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.
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!
Autore
Ciao Marco,
controlla che la libreria OSCClass sia compatibile con l’IDE che stai utilizzando, se non ricordo male è compatibile con l’ide 0022
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
Autore
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.
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.
Autore
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.
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
Autore
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.
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!
Autore
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.
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.
servizi Dns dinamici a pagamento*, avevo dimenticato di dire
Autore
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.
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
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”
Autore
Ciao Antonio,
il ping potrebbe essere impedito per ragioni di sicurezza oppure potresti avere una errata configurazione del router.
Autore
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.
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
Autore
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?
Ciao Mauro mi potresti dire per cortesia qual’e L’app che hai installato per questo progetto?
Autore
Ciao Calogero,
Touch OSC ed ho scritto anche degli articoli su come usarla.
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
Autore
Ciao Giovanni,
puoi usare il monitor seriale, trovi come usarlo nel mio corso base arduino gratuito on-line
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
Autore
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.
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.
Autore
Ciao Pablo,
penso sia giusto prima stabilire cosa vuoi ottenere, poi come pensi sia fattibile e poi iniziare a parlare di tecnologie e protocolli.
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
Autore
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.