e il che non è poco!!!

... sai per caso come potrei fare??? io ho fatto un programma che tramite comandi via telnet gestisce dei led(a=lampeggia led 2, b lampeggia led 3.....), adesso però vorrei mandare i comandi dal web al telnet!!ti posto il codice... se mi puoi aiutare mi renderesti felicissimo!!!

// variabili per la gestione delle uscite
#include <Firmata.h>
#include <Client.h>
#include <Ethernet.h>
#include <Server.h>
#include <SPI.h>
const int num_output = 3;
int stato_uscita = 0; // indica se l'uscita n-esima è ON o OFF
int comando_uscita = 0; // indica se l'uscita n-esima è abilitata a lampeggiare
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,1,134 };
byte gateway[] = {192,168,1,1};
byte subnet[] = {255,255,255,0};
Server server(77);
// i seguenti define servono solo a ricordare che l'uscita 1 è mappata sul primo bit, la 2 sul secondo e così via
#define OUT_1 0x01
#define OUT_2 0x02
#define OUT_3 0x04
// permette di utilizzare non necessariamente le prime 8 uscite digitali
int trascodifica_uscite[num_output] = {
// OUT_5
2, // OUT_6
3, // OUT_7
4}; // OUT_8
// variabili per le tempistiche
unsigned long istante_cambio_stato[num_output];
unsigned long tempo_on[num_output] = { 200, // OUT_1
200, // OUT_2
200 // OUT_3
}; // OUT_8
unsigned long tempo_off[num_output] = {
200, // OUT_6
200, // OUT_7
200}; // OUT_8
int rcv;
// elenco dei comandi
// i comandi per abilitare il blink devono essere consecutivi
#define BLINK_OUT_1 int('a')
#define BLINK_OUT_2 int('b')
#define BLINK_OUT_3 int('c')
// può esserci un buco tra i comandi di blink e di disabilitazione
// i comandi per disabilitare il blink devono essere consecutivi
#define DISABLE_OUT_1 int('k')
#define DISABLE_OUT_2 int('l')
#define DISABLE_OUT_3 int('m')
void gestione_comandi(int rcv)
{
if ((rcv >= BLINK_OUT_1) && (rcv <= BLINK_OUT_3))
{
comando_uscita |= (1 << (rcv - BLINK_OUT_1));
}
if ((rcv >= DISABLE_OUT_1) && (rcv <= DISABLE_OUT_3))
{
comando_uscita &= ~(1 << (rcv - DISABLE_OUT_1));
}
}
void gestione_uscite()
{
unsigned long currentMillis = millis();
int i;
for (i = 0; i < num_output ; i++)
{
if(comando_uscita & (1 << i))
{
// l'i-esima uscita deve lampeggiare
if (stato_uscita & (1 << i))
{
// l'i-esima uscita è ON
if((currentMillis - istante_cambio_stato
) >= tempo_on)
{
digitalWrite(trascodifica_uscite, LOW);
stato_uscita ^= (1 << i);
istante_cambio_stato = currentMillis;
}
}
else
{
// l'i-esima uscita è OFF
if((currentMillis - istante_cambio_stato) >= tempo_off)
{
digitalWrite(trascodifica_uscite, HIGH);
stato_uscita ^= (1 << i);
istante_cambio_stato = currentMillis;
}
}
}
else
{
// l'i-esima uscita deve essere disabilitata
digitalWrite(trascodifica_uscite, LOW);
}
}
}
void setup()
{
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
byte i;
for (i = 0; i < num_output ; i++)
{
pinMode(trascodifica_uscite, OUTPUT);
digitalWrite(trascodifica_uscite, LOW);
}
Serial.begin(9600);
}
void loop()
{
Client client = server.available();
server.write(rcv);
if (client) {
int rcv = client.read();
gestione_comandi(rcv);
}
gestione_uscite();
}