iPhone -> OSC -> Ethernet Shield -> sensores, luzes, relays..

Boas noites,

Estou com dificuldades em fazer a comunicação entre o iPhone e o Ethernet Shield.
Usei como código um exemplo que utiliza a app, Ardumote, como possuo o touchOSC acabei por ter que fazer algumas alterações no código, e muito provavelmente reside aqui o problema. As alterações que efetuem correspondem ao argumento enviado pela app. Por exemplo, no Ardumote, um deles é "PWMXXX" , que funciona como um potenciómetro em que XXX toma valores de 0-255, como utilizo o touchOSC, em vez de "PWMXXX" vem "/PWM XXX", ou seja, antes parte do código aparecia deste modo:

// Assuming our packBuff's contents at index values 3-5 are our PWM values, you can convert them to an int using this:

pwmVal = (packBuff[3] - '0')*100 + (packBuff[4] - '0')*10 + (packBuff[5] - '0'); //Get PWMXXX message, and use XXX to set an int between 0 and 255.

//////////////////////// Pin 6 (LED_Pin) /////////////////////////////////////

if (packBuff[0] = 'P' && packBuff[1]=='W' && packBuff[2]=='M') // Wait for "PWMXXX" and use XXX as value for PWM
{

Agora vem:

// Assuming our packBuff's contents at index values 3-5 are our PWM values, you can convert them to an int using this:

pwmVal = (packBuff[5] - '0')*100 + (packBuff[6] - '0')*10 + (packBuff[7] - '0'); //Get PWMXXX message, and use XXX to set an int between 0 and 255.

//////////////////////// Pin 6 (LED_Pin) /////////////////////////////////////

if (packBuff[0] = '/' && packBuff[1]=='P' && packBuff[2]=='W' && packBuff[3]=='M' && packBuff[4]==' ') // Wait for "PWMXXX" and use XXX as value for PWM
{

Uma das dúvidas é se posso declarar o espaço existente entre /PWM XXX, como: && packBuff[4]==' '

Outra dúvida é em relação a esta parte do código, não sei se terá que ser alterado também, visto que o argumento possui mais caracteres, não sei se tem alguma coisa a ver.
packetSize = packetSize - 8; // subtract the 8 byte header

Em relação á parte da comunicação, wifi, tudo parece estar ok, inclusive quando toco na app no iphone, vejo o ethernet shield a receber informação pelo que aseguir não é transmitida, neste caso ao LED.
Estou a usar o Arduino Uno e a Ethernet Shield (Wiznet W5100), penso não haver também problemas com as bibliotecas, mas nunca se sabe.
Penso mesmo que o problema reside no argumento enviado pela app do iphone, e no modo como este é filtrado.
Envio o código que estou a utilizar.
Link do código original: http://www.samratamin.com/Ardumote_files/Ardumote_Example_IDE1_0.ino

Agradecia qualquer tipo de ajuda.

(neste momento nem consigo fazer o upload do código para o arduino, não da qualquer tipo de erro, mas fica eternamente a fazer o upload)

Obrigado.

#include <Dhcp.h>
#include <Dns.h>
#include <Ethernet.h>
#include <EthernetClient.h>
#include <EthernetServer.h>
#include <EthernetUdp.h>
#include <util.h>

#include <SPI.h> // for Arduino later than ver 0018
#include <EthernetUdp.h> // UDP library from bjoern@cs.stanford.edu
#include <Ethernet.h>

byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x7C, 0x51 }; //Set your Ethernet Shield's MAC address here - make sure you replace the ZZs with your shield's values!
byte ip[] = { 192,170,1,3 }; // Set your shield's desired IP address here - check your network for configuration details
//byte gateway[] = { 192,168,1,1 }; //if you need to set a gateway IP
//byte subnet[] = { 255,255,255,0 }; // Change this to your subnet address

unsigned int localPort = 7777; // local port to listen on (set this the same as Port # on Ardumote Params Screen)

int LED_Pin = 6; //Set LED_Pin to Pin 6 - Place an LED on Pin 6 of your ethernet shield for testing this code

// buffers for receiving and sending data
char packBuff[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,

EthernetUDP Udp;

void setup() {

// start the Ethernet and UDP:
Ethernet.begin(mac,ip); // If you don't need to set your default gateway or subnet manually, use this
// Ethernet.begin(mac,ip,gateway,subnet); // Use this line instead if you've manually set all the parameters

Udp.begin(localPort); //Setup UDP socket on port defined earlier

Serial.begin(9600); //Start Serial Communications with PC

pinMode(LED_Pin,OUTPUT); //Designate pin 6 as Output Pin

}

void loop()
{

int pwmVal; // Integer that will hold our PWM values for later use

// if there's data available, read a packet
int packetSize = Udp.parsePacket(); // note that this includes the UDP header
if(packetSize)
{
packetSize = packetSize - 8; // subtract the 8 byte header
Serial.print("Packet size: ");
Serial.println(packetSize);

// read the packet into packetBuffer and get the senders IP addr and port number
Udp.read(packBuff,UDP_TX_PACKET_MAX_SIZE);
Serial.println("Message: ");
Serial.println(packBuff);

/* PWM - If we move a slider on Ardumote, it sends in a 3 digit value attached to the message of the slider.

For example, if your message is set to be "PWM" and your slider is halfway set (slider value is 127),
then your actual sent message will be received as "PWM127". Therefore, to set the Pin's PWM value, you simply
extract the last 3 digits of your message and use that as your PWM value (see below):

*/

// Assuming our packBuff's contents at index values 3-5 are our PWM values, you can convert them to an int using this:

pwmVal = (packBuff[5] - '0')*100 + (packBuff[6] - '0')*10 + (packBuff[7] - '0'); //Get PWMXXX message, and use XXX to set an int between 0 and 255.

//////////////////////// Pin 6 (LED_Pin) /////////////////////////////////////

if (packBuff[0] = '/' && packBuff[1]=='P' && packBuff[2]=='W' && packBuff[3]=='M' && packBuff[4]==' ') // Wait for "PWMXXX" and use XXX as value for PWM
{

analogWrite(LED_Pin,pwmVal); //Set LED_Pin to PWM Value

Serial.println("PWM on Pin 6"); //Write notification

}

else if (packBuff[0] = '/' && packBuff[1]=='P' && packBuff[2]=='6' && packBuff[3]==' ' && packBuff[4]=='1') // If we get the message "/P6 1", then set LED_Pin (6) HIGH
{

digitalWrite(LED_Pin,HIGH); //Turn on LED_Pin

Serial.println("LED ON"); //Write notification

}

else if (packBuff[0] = '/' && packBuff[1]=='P' && packBuff[2]=='6' && packBuff[3]==' ' && packBuff[4]=='0') // If we get the message "/P6 0", then set LED_Pin (6) LOW
{

digitalWrite(LED_Pin,LOW); //Turn off LED_Pin

Serial.println("LED OFF"); //Write notification
}

}

delay(20);
}