Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Generación de menú LCD sin código usando XOD

Componentes y suministros

Arduino UNO
× 1
DFRobot Arduino LCD / Keypad Shield
× 1

Aplicaciones y servicios en línea

Entorno XOD

Acerca de este proyecto

Los procesadores que alimentan las placas de desarrollo Arduino no son los microcontroladores de su abuelo; tienen una gran potencia de procesamiento y se pueden usar para monitorear y controlar muchos tipos de hardware físico y sensores simultáneamente. El IDE de programación gráfica XOD para Arduino puede simplificar la tarea de creación rápida de prototipos de diseños de hardware, pero a medida que un sistema crece en complejidad, surge el problema del control del usuario y la gestión de la información:cómo organizar la información sobre el proceso que se está controlando para mostrar y dejar que el usuario controlarlo de una manera lógica. Los botones e interruptores dedicados funcionan para proyectos simples, pero pronto se agotan las formas lógicas de organizarlos (o lugares para colocarlos en un gabinete). Muchos diseños usan una pantalla de algún tipo para dar este tipo de retroalimentación, incluso un horno de microondas generalmente tiene una pequeña pantalla que permite editar configuraciones e ingresar tiempos de cocción, y aunque demasiada "inmersión en el menú" para acceder a configuraciones oscuras puede comprometer la experiencia del usuario, las interfaces controladas por menús son una realidad para proyectos de todo tipo.

Los marcos de software para desarrollar interfaces basadas en menús en C o C ++ para microcontroladores a menudo tienen una curva de aprendizaje pronunciada y puede ser difícil realizar cambios rápidos de diseño, ya que a menudo todo interactúa con todo lo demás. El objetivo de este proyecto era utilizar el entorno de programación gráfica XOD para proporcionar la capacidad de crear prototipos rápidamente de interfaces controladas por menús para proyectos de microcontroladores compatibles con Arduino utilizando un estilo de interfaz de arrastrar y soltar / WYSIWYG. Los parámetros de salida y entrada de la estructura de menú generada son modulares y genéricos y deberían poder utilizarse con una amplia variedad de fuentes de entrada (interruptores, botones, codificadores) y produce una secuencia de salidas de texto sin formato que se pueden alimentar a una amplia variedad de variedad de tipos de pantallas compatibles con XOD, incluidos los módulos LCD de texto de varias líneas como se usa en este ejemplo.

Si no está familiarizado con el entorno XOD que utiliza este proyecto, consulte primero los tutoriales de ese proyecto en xod.io.

A continuación, se muestra una captura de pantalla de un simple boceto de ejemplo de motivación. Repasaremos este diagrama de parche XOD sección por sección para explicar cómo encaja todo.

  • El menú Sección de interfaz del controlador

A la derecha de la pantalla de edición de parches en XOD hay cuatro nodos conectados de forma descendente. De arriba a abajo, primero hay un nodo de tipo de entrada analógica, que se selecciona para conectarse a uno de los puertos de entrada analógica de Arduino. En mis pruebas, he estado usando un Arduino Uno con un procesador ATMega328 de 8 bits, con un protector de teclado / LCD de 16x2 conectado en la parte superior. El teclado en el escudo está conectado a través de los pines del escudo a la entrada analógica "A0" de Arduino, y el hardware genera voltajes de diferentes niveles para indicar al Arduino qué botones de la almohadilla están presionados.

Aparte del botón "reiniciar" en el teclado que no interactúa directamente con el boceto de Arduino, este tipo de protector de pantalla proporciona cuatro botones direccionales:arriba, abajo, izquierda y derecha, un botón de "selección". El segundo nodo alimentado por el nodo de entrada analógica contiene un código que decodifica los diferentes voltajes correspondientes a las teclas individuales y emite disparadores de tipo pulso según el botón que se presione. Se proporciona una entrada de "tiempo de espera" para que un desarrollador de XOD pueda ajustar el tiempo de espera de supresión de rebotes del teclado de pantalla LCD para evitar disparos falsos, ajustado al botón de una aplicación en particular o al tipo de interruptor.

El tercer nodo hacia abajo es un nodo de tipo controlador de menú, que contiene código para aceptar disparadores de tipo pulso desde el panel de control y manejar la lógica del usuario que navega a través del árbol de menú y hace selecciones que generan actualizaciones de estado del árbol de menú.

Tal como está implementado actualmente, acepta una única entrada de tipo numérico que puede ser cualquier parámetro que el usuario pueda cambiar desde un control externo, digamos un potenciómetro o dial en un panel de control que representa algún parámetro que se puede cambiar. Cuando un menú de tipo hoja determinado es seleccionado por el controlador de menú que recibe un pulso en su entrada "Invoke", en el árbol del menú a la izquierda, el nodo de la pantalla que el usuario está mirando actualmente emitirá un pulso por sí solo. salida, y también enviar un cambio de parámetro. También hay dos entradas String que se pueden usar para generar una pantalla de bienvenida en la pantalla cuando se enciende Arduino.

A continuación de ese nodo hay un módulo controlador LCD de 16x2 estándar de la biblioteca estándar del entorno XOD, pero cualquier tipo de pantalla para la que esté disponible un módulo se puede utilizar para mostrar el texto de salida aquí.

  • La sección Árbol de menús

En la parte superior de la captura de pantalla del boceto hay una estructura en forma de árbol que, cuando se compila y la "raíz" de salida final del árbol se enruta a la entrada del controlador de menú que la acepta, generará automáticamente un menú navegable tal como se muestra en la imagen. diseñador gráfico. Actualmente se implementan tres tipos de nodos de árbol de menú, un menú de tipo "hoja" - un submenú final, sin puertos de entrada de color naranja - esto representa alguna acción o parámetro que el usuario puede controlar, un menú de tipo "rama" con tanto una entrada como una salida, donde el usuario puede seleccionar entre varios submenús secundarios, y un menú de tipo "concat" donde los submenús se agrupan y alimentan a la entrada de un menú de tipo rama, para hacer un grupo de opciones. Con suerte, debería ser algo autoexplicativo del diagrama cómo conectar este conjunto de nodos.

Seleccionar "invocar" cuando se muestra un menú de tipo "rama" desciende a su grupo de submenú asociado, en lugar de generar una salida como lo hace un menú de tipo hoja. ¡Son posibles sub-submenús, sub-sub-submenús, etc.! Se pueden implementar estructuras complejas, limitadas principalmente por la RAM disponible y los recursos de memoria Flash del procesador de un modelo Arduino en particular.

  • Salida sección

En este ejemplo, la sección de salida es donde los menús de tipo hoja se conectan al hardware externo a través de los pines de salida de Arduino. Cada menú tipo hoja tiene una salida tipo pulso que se conecta a un respectivo flip-flop a través de un bus, para activar y desactivar su pin de salida digital asociado. Este tipo de disposición podría usarse para controlar relés externos o LED, pero las salidas de pulso son muy generales, y el pulso de salida generado al seleccionar "Invocar" al acceder a una pantalla de menú tipo hoja podría usarse para realizar muchas tareas, como actualizar un nodo interno de tipo búfer XOD donde los datos de parámetros del puerto de entrada de tipo de parámetro del controlador de menú se conservan para uso futuro.

  • Problemas conocidos actuales

Este conjunto de nodos ha sido probado y debería funcionar bien con Arduino Uno tal como está, pero quedan algunos problemas que no se resolvieron antes de la fecha límite de este proyecto. Actualmente debe haber un menú tipo rama en el árbol en algún lugar para que se compile un boceto, aunque la mayoría de los proyectos probablemente querrán tener al menos uno. La entrada del menú "superior" al menú-controlador, destinada a regresar completamente a la pantalla de título de la interfaz, no está implementada actualmente, pero debería ser una característica fácil para la próxima revisión.

Las pantallas de cuatro líneas son compatibles con el nodo del controlador de menú, pero la interfaz de menú tipo hoja con cuatro líneas de entrada de texto aún no se ha escrito. Se ha realizado un gran esfuerzo para reducir la sobrecarga de memoria de esta utilidad, pero la forma en que el transpilador XOD almacena actualmente cadenas constantes no es óptima para una sobrecarga de RAM muy baja, y las interfaces basadas en menús tienden a tener mucho texto. Para este proyecto, se desarrolló una solución alternativa y se agregó un conjunto de nodos de tipo flash-string en el parche para garantizar que las cadenas más largas no consumieran la preciosa RAM del programa. Con suerte, esto se abordará en una actualización del entorno XOD, pero la solución alternativa funciona bien por ahora.

Usar los nodos de tipo flash-string no es demasiado doloroso, pero requiere duplicar el parche y el código para cada nueva cadena almacenada en la memoria del programa, y ​​hacer clic en el código C ++ contenido dentro del propio nodo para editar la cadena de salida:

La entrada "ID" de los nodos hoja y rama aún no tiene función. La idea es que sería bueno que cada conjunto de submenús tenga números de identificación asociados dispuestos en orden para que el usuario pueda realizar un seguimiento de su posición en un conjunto de pantallas, pero será necesario pensar más en cómo codificar esto en C ++. que suceda automáticamente.

  • Trabajo continuo

Se deben realizar más pruebas de errores y pruebas en otros dispositivos Arduino además de los dispositivos AVR / ATmega, como ARM. El conjunto actual de tipos de nodos de menú es algo limitante, debería haber más variedad de entradas y salidas. Continuar trabajando para reducir la sobrecarga de RAM, quizás utilizando más metaprogramación en tiempo de compilación y almacenando la mayor cantidad de datos en la memoria Flash en lugar de interconectar / concatenar los componentes del árbol en tiempo de ejecución.

19/02/19 - Un segundo ejemplo.

Este segundo ejemplo de captura de pantalla muestra cómo usar el controlador de menú para tomar un valor externo o interno como entrada al controlador, mostrar los valores actuales y anteriores en una página de menú deseada y seleccionar un nuevo valor y almacenarlo en un búfer.

A la derecha, el nodo de controlador de menú está siendo alimentado con la salida de un contador, alimentado por un nodo de "reloj". Pero esto podría ser cualquier tipo de valor de datos internos o un valor externo de, digamos, un potenciómetro conectado a una entrada analógica. La salida del contador también se envía a un nodo de formato de cadena y se concatena con un texto de visualización para mostrar el valor actual que recibe el controlador en la segunda línea de la pantalla LCD, cuando se abre la página del menú.

Las salidas "invocadas" y "param" del menú hoja "A" se envían a un nodo "búfer" de la biblioteca estándar XOD. La salida del búfer luego se enruta de nuevo a una disposición similar a la anterior, excepto por el nodo "diferir", que se requiere para romper cualquier bucle de retroalimentación en los bocetos XOD. El valor almacenado en el búfer se muestra en la primera línea de la pantalla LCD.

Cuando el nodo de controlador de menú recibe un pulso de activación de "invocación" del controlador de teclado, el nodo de salida A envía el valor de entrada del parámetro desde el controlador de menú de allí, en este caso el valor actual del contador, y un activador de "invocación" pulso que activa la rutina de actualización del búfer y almacena el nuevo parámetro en el búfer. Luego, la pantalla se actualiza automáticamente para reflejar el nuevo valor almacenado.

El puerto de salida del búfer también se puede enrutar a cualquier número de otros nodos para cambiar su comportamiento y reflejar el nuevo valor de datos que el usuario ha seleccionado:

Código

  • Biblioteca del sistema de menús XOD
Biblioteca del sistema de menús XOD C / C ++
https://xod.io/libs/bitrex/xod-menu-system-11

Agregue bitrex / xod-menu-system al navegador de bibliotecas de bocetos desde la opción Archivo -> Agregar bibliotecas ... desde el entorno XOD.
 Sin vista previa (solo descarga). 

Esquemas

Abrir directamente usando el IDE de XOD xodmenusystemrev1_1_4-1-19_fLVYrcSgbX.xodball

Proceso de manufactura

  1. Decodificador DTMF usando solo Arduino
  2. Hacer Monitor Ambilight usando Arduino
  3. Máquina de LEVITACIÓN ULTRASÓNICA usando ARDUINO
  4. Animación LCD y juegos
  5. Voltímetro de bricolaje con Arduino y un teléfono inteligente
  6. Monitor de frecuencia cardíaca con IoT
  7. WebServerBlink usando Arduino Uno WiFi
  8. Contador de autos usando Arduino + Procesamiento + PHP
  9. Juego automatizado de Dino usando arduino
  10. Radio FM usando Arduino y RDA8057M
  11. BLUE_P:Escudo de programación inalámbrico Arduino