Almacenar pulsación de boton en buffer. Igual con RF nrf24l01

Hola.

Tengo un proyecto en el que necesito que al pulsar un boton se inicien ciertas acciones. Pero mi duda es, cuando realizo la lectura de la pulsación del boton... Tengo que realizar la lectura en el mismo momento que se esta pulsando o la pulsación del usuario se queda almacenada en un buffer y puedo leerla posteriormente.

Me explico...

loop{
Leo boton
Ejecuto codigo durante 5 segundos
}

¿Que pasa si el usuario ha pulsado el boton durante los 5 segundos de ejecución? ¿Al volver a leer el boton en el siguiente loop leo 1 o 0?

Tengo la misma duda con la transmision rf de un modulo nrf24l01... ¿Que pasa si llega una señal a la antena durante los 5 segundos de ejecución? ¿Se queda almacenada en algun buffer o tengo que leer justo cuando transmite el emisor?

Gracias.

jfrubio:
Tengo que realizar la lectura en el mismo momento que se esta pulsando o la pulsación del usuario se queda almacenada en un buffer y puedo leerla posteriormente.

Me explico...

loop{
Leo boton
Ejecuto codigo durante 5 segundos
}

¿Que pasa si el usuario ha pulsado el boton durante los 5 segundos de ejecución? ¿Al volver a leer el boton en el siguiente loop leo 1 o 0?

Según a como estructuras la función loop, la lectura se redefine cada vez que el ciclo inicia.
Seguramente lo que haces es almacenar la lectura en una variable. Como sólo lee al principio del ciclo, eso significa que esa lectura perdurará hasta acabar el loop.

Cuando hablas de un "búfer de pulsaciones", eso sólo es posible si se trabaja con interrupciones.
Algo similar ocurre con la comunicación serial; el hecho de que tenga un búfer, se debe a que "en cualquier momento" un byte se puede recibir. Como es posible esto sin interferir en el programa principal? Se desencadena una interrupción por cada byte que se recibe.

jfrubio:
Tengo la misma duda con la transmision rf de un modulo nrf24l01... ¿Que pasa si llega una señal a la antena durante los 5 segundos de ejecución? ¿Se queda almacenada en algun buffer o tengo que leer justo cuando transmite el emisor?

No conozco muy bien la librería que lo maneja; pero volvemos a la misma idea, sólo si en la documentación de esa librería se especifica que se trabaja con interrupciones.

Que mezcla de cosas!!!!
No hay tal buffer de pulsaciones y tampoco comparto lo que dice Lucario con las interrupciones.
Este es un simple ejemplo de como con un pulsador cada ves que lo presionas llamas o no a una rutina. Una vez la ejecuta y a la siguiente no.
Acá no hay delays y de modo que mientras no uses delays no te vas a perder ninguna pulsacion de 5 seg
Ahora si en tu rutina que yo llame. ejecutoAlgo querés demorar 5 segundos, tienes que usar millis()
Si usas delay(5000) entonces x 5 segundos no reaccionará a nada.

const byte boton = 2;  // supongamos usas pin 2

bool tecla, teclaAnt = false;
bool llamofuncion = false;


void setup() {
     pinMode(boton, INPUT);
}

void loop() {
   tecla = digitalRead(boton);
   if (tecla && !teclaAnt) {
      llamofuncion = !llamofuncion;
   }
   teclaAnt = tecla;
   if (llamofuncion) {
       ejecutoAlgo();
   }
}

void ejecutoAlgo() {
   // haces lo que quieras
}

Con el nrf24 pasa lo mismo.
No puedes usar delay JAMAS con estas cosas.