Ayuda con un proyecto

Buenos días, quería saber si me podríais ayudar con un proyecto que tengo en mente. Imaginaos que tengo un puesto de perritos calientes y hamburguesas, y tengo un cocinero que los cocina. La idea sería que en total, hay tres pulsadores (botones), 2 en donde se reciben los pedidos, en el cual uno llevaría una etiqueta que pone "Perrito caliente" y otro pone "Hamburguesa", y en donde se prepara la comida habría solo un pulsador. Si se pulsa una vez el pulsador de "perrito caliente", una vez el de "hamburguesa", y otra vez el de "perrito caliente", en la LCD que hay en la cocina debería de poner "perrito caliente" primero, después, cuando el cocinero haya terminado el perrito caliente, pulsa su botón y en la LCD sale "hamburguesa", y al igual que en el caso anterior, cuando termina la hamburguesa, pulsa el botón y en la LCD sale el siguiente producto que se ha marcado, que en este caso sería otro perrito caliente.
He estado pensando cómo podría realizar este proyecto pero no se me ocurre, ¿me podríais ayudar? Muchas gracias de antemano

Hola:

Debes trabajar con arrays. Haces un arreglo de enteros por ejemplo e identificas a cada producto con un numero por ejemplo peero caliente el 1 y hamburguesa el 2, luego cuando se presione el boton de perro caliente por ejemplo incrementas un contador en el programa y ese contador te va a dar la posicion dentro del arreglo deonde debes colocar el numero de identificacion del producto que se ha pedido. Luego el cuando se presione el boton de la cocina debes tener otro contador que se vaya incrementado en 1 cada ve que se presione el boton y luego lees el dato que esta en esa posicion dentro del arreglo de producto y entonces podras obtener el identificador del producto a cocinar. Luego puedes hacer un If y preguntar que identificador es y en dependencia del que obtengas del arreglo pues mandas a imprimir en la LCD que producto debe cocinar el cocinero. Creo que deberias tener otro boton que cuando se cierre el turno de trabajo ponga los contadores y llene el arreglo con ceros por ejemplo sabiendo entonces que el numero 0 ya no lo podras usar como identificador de un producto. espero la idea te pueda ayudar..saludos

Arrays es demasiado para alguien que comienza.
Lo mejor desde mi punto de vista que puedes hacer es primero.

Aprende a usar pulsadores/botones con contadores y que con cada presion incremente un valor.
Aprende a usar el LCD o simplemente elige el que usarás y sigue los ejemplos de su librería. Hay librerías para todo.
Con ambas cosas entendidas resolverás tu problema.

Cada pulsador incrementa un contador.
El tercer pulsador resetea las cuentas o pone a cero las variables de perro caliente y hamburguesa.
Lo demas es presentación en el LCD sea paralelo o I2C.

Repito, el IDE tiene ejemplos de pulsador.
Un libro o google o el mismo foro te enseña a incrementar un contador. Algo tan simple como

contador = contardor + 1;

que es similar a

contador++;

Muchas gracias por la respuesta. Tampoco te creas que no se nada sobre Arduino, lo único es que no sé muy bien como podría realizar este proyecto. Y con lo que tu has dicho, el programa no indicaría el orden en el que se deben de preparar los productos.

Hola.

Como dicen por aquí "no hay dos sin tres", y por lo tanto ahí vá una tercera forma (la mía) de resolver el problema (version simplificada).

  • Asignamos 'P' a perritos, y 'H' a hamburguresas
  • Creamos un bufer circular soportado en un array de caracter de, digamos, 20 elementos (valor máximo de pedidos pendientes)
  • Inicializamos dos indices: pedido en elaboración (el que se muestra al cocinero) y siguiente pedido (el que nos hará el siguiente cliente)
  • Cuando se pulsa el boton "hamburguesa" se coloca el caracter 'H' en el array usando el índice de siguiente pedido, y se incrementa dicho indice (si indice > 19, entonces indice = 0)
  • Otro tanto ocurre si pulsamos "perrito" pero usando el caracter 'P'
  • Si los indices son distintos, al cocinero le aparece en el display el siguiente producto a preparar, identificado por el indice de pedido en elaboracion
  • Cuando ha elaborado el pedido y pulsa el boton correspondiente, se incrementa el indice de pedido en elaboracion (si indice > 19, entonces indice = 0), y si ocurre que pedido en elaboracion == siguiente pedido, entonces el display muestra: "sin pedidos" y el sistema espera a un nuevo cliente

Aclaracion: al leerse el caracter 'P' se muestra al cocinero algo así como "elaboracion de perrito", y "elaboración de hamburguesa" si el caracter leído es 'H'.

Este sistema permite añadir facilmente mas productos en la carta, asignando a cada uno de ellos un nuevo caracter ('S' sandwitch, 'B' bocadillo, etc..).
Si queremos especializar el producto podemos codificar el sistema como "byte" de tal modo que 0=perrito normal, 1=perrito con extra de mostaza, 2= perrito con tres salchichas, etc,..

Naturalmente esto es una simplificacion máxima del diagrama de flujo que debería seguir el programa, y en la implementacion haría falta considerar otros factores.

Pero creo que así se entenderá mejor la idea.

Espero haber ayudado. Saludos.

planteamientos previos al código.

Si el proyecto va a llevarse a una práctica real empezaría mirando cómo quiero comunicar los arduinos:

¿Mediante cableado? Entonces sería cuestión de poner uno maestro y otro esclavo.
¿Sin cableado? Pues hay muchos módulos, quizás te sirva uno tipo bluetooth como el HC-05 esclavo/maestro pero hay más opciones.

¿Requiero que las comandas me las puedan hacer desde una tablet/teléfono móvil, celular (o como quiera llamarse en cada país)/ ordenador estilo aplicación web o app... o necesito dos arduinos sí o sí?

Entrando en la parte de código:

El uso de arrays para mí es más que necesario.
Yo lo plantearía enviando una comanda, no sólo un producto. Por ejemplo los empleados que atienden para 3 perritos y 5 hamburguesas tendrían que presionar 8 veces los correspondientes botones :fearful: :fearful: :fearful: Repito 8 veces para 2 productos sin especificar de que son los perritos o las hamburguesas!!!! Pobre cocinero y camarero.

Creo que deberías buscar un elemento diferente.
¿Te has planteado la idea de usar pantallas lcd táctiles con menus? ¿Cuantos botones y tiempo de lectura en las comandas te ahorrarías? Saca la calculadora :grin:

Esto es como hacer el análisis de una BD. Creo que es más sencillo establecer:
Comanda con:

  • ID = identificador de la comanda (las comandas suelen ser el número de la mesa).
  • Cantidad de elementos que se piden.
  • Producto que se selecciona (otro id para facilitarlo estaría bien).

Quendando algo así:

MESA-7 {
2 X perritos.
1 X hamburgesa vegetal
1 X Arepa
3 X Refresco-cola.
}

Yo me apuntaría a la idea de usar Wifi si el recinto lo tiene y usar una tablet + aplicación web /app.
Sin wifi usaría bluetooth. Y si por lo que fuese necesariamente fuese SÓLO con 2 arduinos, sigo pensando que el uso de botones y displays de 16x2 puede simplificarse con una pantalla lcd táctil y usando menús. Además da mejor impresión visual :grin: :grin: :grin: y ya está bastante estandarizado en los negocios de comida.

¿Qué no? Pues nada... Arduinos Esclavo/Maestro "a pelo" (Un ejemplo cualquiera: https://circuits.io/circuits/3782782-2-arduinos) y con cables por el suelo :frowning:

Gracias por tu respuesta, pero se trata de un local de calle. La gente hace cola y la gente va pidiendo y se va entregando en el acto. Me encantaría aprender a usar Wi-Fi y pantallas LCD táctil, pero eso ya se sale de mis conocimientos desgraciadamente. De todas maneras, muchas gracias por tu ayuda.

Ok, ningún problema, entonces 2 arduinos conectados entre sí mediante cables y listo. Es sencillo de hacer. Cualquier duda nos comentas.

eric39es:
Gracias por tu respuesta, pero se trata de un local de calle. La gente hace cola y la gente va pidiendo y se va entregando en el acto.

Si local de calle equivale a vehiculo de comida ambulante entonces te bastaria con un par de pulsadores en la recepcion del pedido (hamburguesas y perritos), y en la cocina el Arduino con el display y el pulsador de pedido preparado.

Tambien puedes añadir algun led en la recepcion para señalizar situaciones excepcionales.

Todo esto son generalidades y si decides seguir adelante entonces sería el momento de concretar mas.

Saludos.

Y digo yo, antes de todo el tema de Arduino....
¿Has pensado si es efectivo el sistema que piensas?

Si solo va viendo lo que primero se ha pedido y hasta que no le de al boton no le aparece lo siguiente a preparar..... ¿eso es eficiente?

Creo que despues de haber puesto el pan a calentar, la salchicha, prepararlo todo, darle al botón y enciontrarte con la sorpresa de que hay otro perrito más esperando... ¿se habría hecho más rápido si empieza los dos perritos a la vez?

O incluso si lo segundo era hamburguesa, pero lo tercero era otra vez perrito, también hubiera valido la pena ir dejando ya los 2 panes de perritos y las 2 salchichas haciendose, mientras me lio con la hamburguesa.

Es decir, si no he entendido mal, lo que planteas es que la cocina trabaje de forma secuencial y eso no es para nada eficiente.
La cocina debería ver todos los pedidos aunque lleven un orden, pero eso le permitiría adelantarse y preveer lo que se le viene encima.
Es mi modesta opinión claro

Intergus:
Es decir, si no he entendido mal, lo que planteas es que la cocina trabaje de forma secuencial y eso no es para nada eficiente.
La cocina debería ver todos los pedidos aunque lleven un orden, pero eso le permitiría adelantarse y preveer lo que se le viene encima.
Es mi modesta opinión claro

Exacto, debería hacerse mediante comandas, pero bueno si sólo hay dos productos posibles siempre se puede usar una lcd de 16 x 2 y poner el número y el tipo a continuación, uno por fila:


| 1 hot dog |

3 burger

Lo que debería usarse para mayor comodidad algún teclado que facilite el poner números o una opción estilo menú. Se podría ahorrar muchos clicks de botones.

Algo así (y son muy muy baratos):

Y fáciles de conectar: Tutorial

Se podría enviar hotdog con A, y hamburgesas con B, con los números ingresamos la cantidad, almohadilla puede usarse para corregir (ir atrás o "key backspace") y el asterisco para realizar el envío.

Sería rápido y fácil.