AYUDA! Como separar lo que recibo por client.read() caracter por caracter

Buenas Tardes, soy nuevo en el foro y actualmente me encuentro desarrollando un proyecto de una tarjeta de adquisición de datos para un laboratorio virtual de mi universidad y quisiera saber si me podrían ayudar en algo en lo que me encuentro estancado hace ya un tiempo a pesar de buscar información al respecto.

estoy usando mi arduino como un cliente web, y la duda que tengo es la de como puedo separar caracter por caracter en mi codigo lo que me envía mi archivo php.

Por ejemplo:

Desde mi archivo PHP leo y escribo en mi base de datos; todo lo que necesito leer de la base de datos lo agrupo en una sola variable que es lo que mando a mostrar para que mi arduino lo reciba a traves del client.read().

Lo que manda mi PHP tiene el siguiente formato:

Tipo;pin;valor;bandera1;bandera2/Tipo;pin;valor;bandera1;bandera2/...(y asi sucesivamente dependiendo la cantidad de elementos en el laboratorio que tenga que controlar a travez del arduino separados por "/").

enviando por ejemplo: SD;2;1;0;1/EA;1;0;0;1/...

donde el primer elemento se refiere a activar Salida Digital, pin 2 y le coloca valor 1 al respectivo pin, mi bandera1 tiene un valor 0 y mi bandera2= 1.

en el arduino al poner:

if (client.available()) {
    char c = client.read();

recibire lo antes mencionado que me manda el codigo php.

Quisiera saber ahora como puedo separar lo recibido, primero separarlos por "/" que me dividirá los elementos de laboratorio y poder armar un arreglo en el que en cada posición guarde uno de ellos, y luego por el ";" lo que me permitira guardar en una variable el SD, el 2... etc.

char type = SD; byte pin = 2; byte value = 1;

y poder desarrollar lo que quiero con estas variables. Agradeceria mucho su ayuda, tiempo y explicación. Saludos!.

Anyone?...

Estaba pensando en una solución, el client.available() regresa la cantidad de bytes que hay en el buffer de la ethernet shield, si tomamos ese dato y almacenamos la cadena en un array para posteriormente usar un for para separarla, dentro de el for se pondrían comparaciones clave por ejemplo if ( char =="/") y almacenar las otras partes en otro array.

Hola.
Creo que client hereda de stream, así que si puedes prever qué tipo de dato va a llegar puedes utilizar client.readBytesUntil para almacenar el tipo, y los client.parseInt para almacenar los datos directamente en las variables correspondientes.

Prueba esto a través de Serial (envía las tramas desde el monitor serial)

char Tipo[5];
int pin;
int valor;
int bandera1;
int bandera2;

void setup()
{
	Serial.begin(9600);
}

void loop()

{
	if (Serial.available()){
		memset(Tipo, 0, sizeof(Tipo)); // Limpiamos el buffer
		Serial.readBytesUntil(';', Tipo, sizeof(Tipo)); // Leemos tipo
		pin = Serial.parseInt();
		valor = Serial.parseInt();
		bandera1 = Serial.parseInt();
		bandera2 = Serial.parseInt();
	}
}

Los comandos serial deberían ser utilizables con clien.
Saludos.

Saludos Como dice noter un cliente ethernet herada la clase stream, como lo haria Serial.

Cuando estes tratando este tipo de datos puedes usar lo mismo que usarias para Serial. Tal como Serial.print. Serial.find, etc.

Este es mi aporte

    if(client.available()){
        if(client.find("SD")){
            pin = client.parseInt();
            valor = client.parseInt();
            bandera1 = client.parseInt();
            bandera2 = client.parseInt();
            digitalWrite(pin, valor);
            client.print("Pin "+ String(pin));
            if(valor==1)client.println(" Activado");
            else client.println(" Desactivado");
        }
        if(client.find("EA")){
            pin = client.parseInt();
            valor = client.parseInt();
            bandera1 = client.parseInt();
            bandera2 = client.parseInt();
            lectura = analogRead(pin);
            client.println("Lectura en entrada analoga A"+ String(pin) + "=" + String(lectura));
        }
    }

Lo que no especificas es que vas a hacer con las banderas.