Salve a tutti questo é il mio primo post.
Sto lavorando ad un progetto di domotica.
Il problema che mi ha spinto a creare questo topic, come descritto nel titolo, riguarda l'utilizzo della libreria OSCClass in uno sketch per Arduino UNO con modulo WiFi. Infatti in seguito ad un errore di compilazione, ho indagato un pò, ed ora ho il dubbio se OSCClass e il wifi shield siano compatibili. Cioé mi sembra come se ci voglia per forza la Ethernet shield per poter usare la OSCclass.
Lo sketch é il seguente:
#include <SPI.h> //libreria per la communicazione fra shield WiFi e Arduino UNO
#include <OSCClass.h> //libreria OSC
#include <WiFi.h> //libreria WiFi
#include <WiFiClient.h>
#include <WiFiServer.h>
#include <WiFiUdp.h>
int pinLedA=2; //primo led su pin 2
int pinLedB=3; //secondo led su pin 3
int pinLedC=4; //terzo led su pin 4
OSCMessage recMes; //oggetto di classe OSCMessage che registrerà i messaggi inviati tramite OSC
OSCClass osc(&recMes); //istanza della classe OSC
char ssid[] = "SSID"; // your network SSID (name)
char pass[] = "PASS"; // your network password
int status = WL_IDLE_STATUS; // the Wifi radio's status
int serverPort = 10000;
char *topAddress="butt"; //le applicazioni OSC sono caratterizzate da una gerarchia dei componenti grafici, qui viene descritta
char *subAddress[8]={ "ledA" , "ledB" , "ledC","ledAB" , "ledBC" , "ledAC","fadeA" , "fadeB"};
void setup() {
WiFi.begin(ssid, pass); //metodo begin della classe Wifi, permette di passargli dei paramentri di una rete (WPA in questo caso) e di connetervi
osc.begin(serverPort); //la porta sulla quale comunicheranno Arduino ed il dispositivo che invierà il segnale OSC
pinMode(pinLedA, OUTPUT); //i pin corrispondenti ai led vengono settati su OUTPUT mode
pinMode(pinLedB, OUTPUT); // "
pinMode(pinLedC, OUTPUT); // "
digitalWrite(pinLedA, LOW); //i led vengono fatti partire da spenti
digitalWrite(pinLedB, LOW); //LED OFF
digitalWrite(pinLedC, LOW); //LED OFF
osc.flush();
}
void loop() {
if ( osc.available() ) { // la condizione dell'if verifica se OSC contiene un messaggio
if( !strcmp( recMes.getAddress(0) , topAddress ) ){ // questo secondo if ha una condizione che verifica se il livello piu alto del messaggio (cioé il livello 0) corrisponde a quello settato per "topAddress"
int val= getIntValue(&recMes);
if( !strcmp( recMes.getAddress(1) , subAddress[0] ) ) { digitalWrite(pinLedA, val); } //questo gruppo di if verifica quale subAdress é stata selezionata, e fa accendere il led corrispondente
if( !strcmp( recMes.getAddress(1) , subAddress[1] ) ) { digitalWrite(pinLedB, val); }
if( !strcmp( recMes.getAddress(1) , subAddress[2] ) ) { digitalWrite(pinLedC, val); }
if( !strcmp( recMes.getAddress(1) , subAddress[3] ) ) { digitalWrite(pinLedA, val); digitalWrite(pinLedB, val); } //questo gruppo di if é simile a quello di prima, ma fa accendere i led a due a due.
if( !strcmp( recMes.getAddress(1) , subAddress[4] ) ) { digitalWrite(pinLedB, val); digitalWrite(pinLedC, val); }
if( !strcmp( recMes.getAddress(1) , subAddress[5] ) ) { digitalWrite(pinLedA, val); digitalWrite(pinLedC, val); }
}
}
}
//funzione per avere il prelievo del valore in integer
int getIntValue(OSCMessage *mes){
switch( mes->getTypeTag(0) ){
case 'i': { return mes->getArgInt(0); }
break;
case 'f': { return int(mes->getArgFloat(0)); }
break;
}
}
e quando cerco di caricarlo, mi da questo errore:
Errore durante la compilazione
In file included from _controllo_3_pin.ino:2:
C:\Users\michele\Documents\Arduino\libraries\OSCClass/OSCClass.h:71:27: error: utility/w5100.h: No such file or directory
C:\Users\michele\Documents\Arduino\libraries\OSCClass/OSCClass.h:77:22: error: Ethernet.h: No such file or directory
Per concludere:
vorrei avere conferma del fatto di poter utilizzare o meno OSCClass con un wifi Shield;
se la risposta é negativa, conosco un'altra libreria di nome OSCuino, però anche quella dopo un po di ricerche pare che abbia bisogno necessariamente dell'ethernet shield;
se anche con Oscuino non si può utilizzare il wifi shield , come posso fare? a me serve necessariamente un modo per controllare con Android la mia scheda arduino tramite wifi.