hola, quetal estaba al dope y me puse a escribir un poco mientra espero un respuesta dispuesto en el foro.

:
en cuanto a tu problema primero que no encuentro logica en que pongas dos botones para encender/apagar un solo led,
asi el programa que ise lo idee paara uno solo.
en segundo termino cuando haces un delay haces una pausa en el programa, no ejecuta nada mas hasta que se cumpla ese tiempo.
ested debe tomar el tiempo, (q es el tiempo ? ...ya paso

)
millis();si no tiene bien en claro los operadores logico que uso, entra qui he informate.
http://arduino.cc/en/Reference/HomePagecomo tambien Estructuras de control, los if, for , while, ..etc.
en en tercer termino usted debe verificar lo que envia, efectivamente es el valor enviado al arduino, en el formato que usted decea.
por ultimo, El programa, no lo he probado , pero lo que puede haber algun error. pero la esencia de lo que usted pretende
esta. donde debera modificarlo para su gusto. SLUDOS!!
const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 13; // the number of the LED pin
int time=0;
int dato =0;
int buttonState = 0; // variable for reading the pushbutton status
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
Serial.begin(9600);
}
void loop(){
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
SerialReceive();
if ( (buttonState == HIGH) || ( dato == 1 )) {
time = millis(); // 1000miilis is un second
if(time <= 30000){ // mientras 30 second
// turn LED on:
digitalWrite(ledPin, HIGH);
}
else {
// turn LED off:
digitalWrite(ledPin, LOW);
buttonState == LOW ;
time= 0;
}
}
else if ( (((buttonState == LOW) && ( time <= 30000) )) || ( (dato == 0 ) && ( time <= 30000)) )
{ digitalWrite(ledPin, LOW);
buttonState == LOW ;
time =0;
}
}
void SerialReceive()
{
while(Serial.available())
{
dato = Serial.read();
}
}