Duda sobre el funcionamiento de RAMPS

Hola a todos, estoy empezando en el mundo de arduino con la domotica de casa. Hasta ahi todo bien, tengo mis pequeños pro mini en cada habitacion, gestionando las luces, temperatura, nivel de luz.... pues el caso es que, se que arduino no trabaja en paralelo, pero al ver las impresoras 3d, o brazos robots que ha montado la gente con ramps, me surge la duda de como gestionan los motores ya que se ejecutan varios movimientos a la vez, pero el arduino es lineal.... por lo que me surege la duda de como funciona RAMPS ya que (pregunta de novato), ¿no deberia esperar a que termine un movimiento de posicionamiento para ejecutar el otro?, sin embargo se mueven a la par con diferentes direcciones.

Mi segunda pregunta es por curiosidad, la cosa es que se me ha pasado por la cabeza centralizar toda la casa en un arduino mega, y me surge la pregunta de, ¿y si se accionan 2 pulsadores de encendido de luz al mismo tiempo? o ¿Y si entran en dos estancias 2 personas al mismo tiempo en las cuales el PIR activa el rele de la luz?, ya que solo puede ejecutar una accion al mismo tiempo, supongo que la que este un milisegundo mas tarde se perdera, o ¿el arduino congela esa accion hasta haber realizado la otra?

Para explicarme mejor, pulso 2 pulsadores (no interrupores) al mismo tiempo, o 2 PIR (de los que detectan al pasar, con la espera de activacion al minimo) detectan al mismo tiempo, ¿se ejecuta uno y el otro se queda esperando para ejecutarse al acabar el primer loop? o se pierde y no se activa ya que al durar la interrupcion un segundo y volver a su estado de no pulsado o detectado nada, no lo detecta en la siguiente vuelta.

Se que es practicamente imposible debido a la velocidad de ejecucion de los programas, tendria que ser 2 activaciones a la par al milisegundo, pero me surge esa duda y me hecha para atras aventurarme a centralizar toda la casa en un mega.

Un saludo y gracias de antemano. :slight_smile:

, me surge la duda de como gestionan los motores ya que se ejecutan varios movimientos a la vez, pero el arduino es lineal.... por lo que me surege la duda de como funciona RAMPS ya que (pregunta de novato), ¿no deberia esperar a que termine un movimiento de posicionamiento para ejecutar el otro?, sin embargo se mueven a la par con diferentes direcciones.

Ilusión óptica si quieres o simplemente una programación con máquina de estados.
Tu seguramente estas sorprendido porque cada vez que intentas algo usas delay.
La diferencia es que aca no se usa delay, se usa millis() y máquinas de estado.
Estonces tienes un objetivo que subdivides en multiples pasos. Estos pasos se cumplen en una secuencia logíca (explicada de manera muy clara en Documentación uno de los primeros hilos)
De ese modo tu tienes la sensación de que Arduino trabaja en paralelo pero sigue haciendo las cosas a un ritmo de 1mseg y con cada tick va distribuyendo cosas.

Para responder tu segunda pregunta te diré donde esta tu error conceptual.
Tu estas viendo como que todo ocurre al mismo tiempo y que es transmitido al mismo tiempo. A menos que hables de dos pulsadores conectados a tu MEGA cosa que será igualmente detectada lo demas seguramente será enviado por RF y si es asi nada llega inmediatamente aunque si eso pasa existen colas que mantienen comandos y son procesados a medida que llegan. Esto depende de como fue hecha la librería.
No te preocupes, por perder algo. Hazlo y luego prueba a ver si no lo detectas.
Ya verás que no pierdes nada.

Muchas gracias, me ha quedado clarisimo, voy a mirar en la documentacion que comentas y aprender bien sobre millis() y maquinas de estado para simplificar mis programas y hacerlos mas eficintes.

Sobre lo del MEGA, efectivamente todos los pulsadores, sensores de presencia etc... irian conectados a los puertos del MEGA por lo que las señales llegarian directas, lo que no sabia es que habia librerias con sistemas de cola de espera, actualmente estoy usando la libreria Bounce2 y no tengo ni idea de si admitira colas, tendre que investigar, ya que aunque es dificil que se activen 2 interruptores a la vez, si me gustaria saber que puede soportarlo y no se perderian entradas de hardware al hacerlo al ismo tiempo.

Un saludo y de nuevo muchas gracias :slight_smile:

Nunca nada es a la vez, todo depende de la perspectiva con la que se mida.
A la vez es en el mismo milisegundo, el mismo microsegundo, o mas allá?

Vivimos en un mundo finito, todo es medible (dentro de nuestros límites logicamente), siempre algo ocurre antes que lo otro o depende del momento en que la secuencia de Arduino lo lea.
De todos modos no te preocupes, ni cuenta te darás!!

Primero debes comprender otras cosas (que ya has enumerado) antes que pensar en la simultaneidad de eventos.

surbyte:
Vivimos en un mundo finito, todo es medible (dentro de nuestros límites logicamente), siempre algo ocurre antes que lo otro o depende del momento en que la secuencia de Arduino lo lea.
De todos modos no te preocupes, ni cuenta te darás!!

vivimos en un mundo finito si, pero al usar sistemas digitales lo que estamos haciendo justamente es diferenciarlo, arduino no puede diferenciar entre dos eventos que sucedan a poca distancia temporal, suficientemente pequeña para que produzca en un mismo ciclo de reloj, y esas dos para el arduino habrán ocurrido exactamente a la vez