Katynga:
surbyte:
Que no te gusta?
Cuando veo un código llego de IF.... ELSE, me dan la impresión de que les falta estilo.
Seguro que hay maneras de hacerlo que funcionen mucho mejor.
¿Estilo? ¿Falta estilo en un if else? No sabía que había que adornar el código 


Yo pensaba que la eficiencia lo era todo...
Yendo al tema, ¿por qué no te haces un timer y ya? Como hoy fue un día "light" en el trabajo acabo de hacer algo así a modo de ejemplo tonto. Y no, no es tiempo perdido, va bien como material para mi web de Arduino.
Si tienes controlado el debounce de los botones sólo es adaptarlo.
(Entiendo que la idea es repetir una función todo el rato durante el tiempo designado)
Por favor no me digas ahora también que a los punteros de C le faltan estilo... Vaale, sí, en los lenguajes de ahora esto de los punteros es raro, pero C peina canas ya y es lo que hay

Si te fijas sólo he modificado la forma de hacer un debounce y cambiar el sentido del timer.
/*
Ejecutar una funcion durante un tiempo determinado
variables goblales -> array con 3 elementos
índice 1: tiempo durante el cual se repite la función
índice 2: determina que sólo entre en la función repetir una vez
índice 3: en 0 está en ejecución, en 1 parado.
*/
int
isa[] = {2000,0,0},
adri[] = {4000,0,0};
void setup() {
Serial.begin(9600);
Serial.println("Simon dice:");
Serial.println("Isabel, di hola durante 2 segundos");
}
void loop() {
//Mientras isa no acabe
if(!isa[2]){
//Irá a la función hola y escribirá "hola Simon" durante el timpo designado
*isa = repetir(isa,hola);
}
//Al finalizar
else{
//Mientras adri no acabe
if(!adri[2]){
Serial.println("Simon dice:");
Serial.println("Adrian, di hello durante 4 segundos");
//Irá a la función hello y escribirá "hello Simon" durante el timpo designado
*adri = repetir(adri,hello);
}
}
}
int repetir(int *arr, void (*f)(void) ) { //punteros
if(!arr[1] && !arr[2]){
arr[1] = true;
if( tiempo( arr[0], (*f) ) ){
arr[1] = false;
arr[2] = true;
}
}
return *arr;
}
boolean tiempo(unsigned long cont_extra, void (*f)(void) ) { //y más punteros 
unsigned long tiempo_hasta = millis() + cont_extra;
while(millis() < tiempo_hasta ){
(*f)();
}
return true;
}
void hola(){
Serial.println("Hola Simon");
}
void hello(){
Serial.println("Hello Simon");
}
Como resultado "isa" escribe hola durante 2 segundos y al finalizar lo hace "adri" durante 4 segundos. Cuando acaban ambos no se muestra en consola nada más.
Saludos.