Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Geração de menu LCD sem código usando XOD

Componentes e suprimentos

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

Aplicativos e serviços online

Ambiente XOD

Sobre este projeto


Os processadores que alimentam as placas de desenvolvimento Arduino não são os microcontroladores do seu avô - eles têm um grande poder de processamento e podem ser usados ​​para monitorar e controlar muitos tipos de hardware físico e sensores simultaneamente. O IDE de programação gráfica XOD para Arduino pode simplificar a tarefa de projetos de hardware de prototipagem rápida, mas conforme a complexidade de um sistema cresce, há a questão do controle do usuário e do gerenciamento de informações - como organizar as informações sobre o processo que está sendo controlado para exibição e permitir que o usuário controlá-lo de maneira lógica. Botões e interruptores dedicados funcionam para projetos simples, mas logo se descobre maneiras lógicas de organizá-los (ou lugares para colocá-los em um gabinete). Muitos projetos usam um visor de algum tipo para dar esse tipo de feedback, até mesmo um forno de micro-ondas geralmente tem uma pequena tela que permite editar as configurações e inserir os tempos de cozimento e, embora muitos "mergulhos no menu" para acessar configurações obscuras possam comprometer a experiência do usuário, as interfaces baseadas em menus são um fato da vida para projetos de todos os tipos.

Estruturas de software para desenvolver interfaces baseadas em menu em C ou C ++ para microcontroladores geralmente têm uma curva de aprendizado íngreme e pode ser difícil fazer mudanças rápidas no projeto, já que muitas vezes tudo interage com todo o resto. O objetivo deste projeto era usar o ambiente de programação gráfica XOD para fornecer a capacidade de criar protótipos de interfaces baseadas em menus para projetos de microcontroladores compatíveis com o Arduino usando um estilo de interface arrastar e soltar / WYSIWYG. Os parâmetros de saída e entrada da estrutura de menu gerada são modulares e genéricos e devem ser capazes de ser usados ​​com uma ampla variedade de fontes de entrada (interruptores, botões, codificadores) e produz uma sequência de saídas de texto simples que podem ser alimentadas a um amplo variedade de tipos de display com suporte para XOD, incluindo módulos LCD de texto de várias linhas, conforme usado neste exemplo.

Se você não está familiarizado com o ambiente XOD que este projeto usa, verifique os tutoriais desse projeto primeiro em xod.io.





Segue uma captura de tela de um esboço de exemplo motivacional simples. Examinaremos este diagrama de patch XOD seção por seção para explicar como tudo se encaixa.

  • O Menu Seção de interface do controlador

À direita da tela de edição de patch no XOD, há quatro nós conectados de forma descendente. De cima para baixo, primeiro há um nó do tipo de entrada analógica, que é selecionado para ser conectado a uma das portas de entrada analógica do Arduino. Em meus testes, usei um Arduino Uno com um processador ATMega328 de 8 bits, com um LCD 16x2 / escudo do teclado conectado em cima dele. O teclado na blindagem é conectado por meio dos pinos da blindagem à entrada analógica "A0" do Arduino, e o hardware gera tensões de níveis diferentes para sinalizar ao Arduino quais botões no pad estão pressionados.

Além do botão "reset" no teclado, que não faz interface com o esboço do Arduino diretamente, este tipo de proteção da tela fornece quatro botões direcionais - para cima, para baixo, para a esquerda e para a direita, um botão "selecionar". O segundo nó alimentado pelo nó de entrada analógica contém o código que decodifica as diferentes tensões correspondentes às teclas individuais e dispara gatilhos do tipo pulso, dependendo de qual botão é pressionado. Uma entrada de "tempo limite" é fornecida para que um desenvolvedor XOD possa ajustar o tempo limite de depuração do teclado de proteção LCD para evitar disparos falsos, ajustados para um botão ou tipo de interruptor de um aplicativo específico.

O terceiro nó abaixo é um nó do tipo controlador de menu, que contém código para aceitar gatilhos do tipo pulso do painel de controle e lidar com a lógica do usuário navegando pela árvore de menu e fazendo seleções que geram atualizações de estado da árvore de menu.

Conforme implementado atualmente, ele aceita uma única entrada do tipo Número que pode ser qualquer parâmetro que o usuário possa alterar a partir de um controle externo, digamos, um potenciômetro ou dial em um painel de controle que representa algum parâmetro que pode ser alterado. Quando um determinado menu do tipo folha é selecionado pelo controlador de menu que recebe um pulso para sua entrada "Invocar", na árvore do menu à esquerda o nó da tela que o usuário está olhando atualmente emitirá um pulso por conta própria saída, e também enviar uma mudança de parâmetro. Existem também duas entradas String que podem ser usadas para gerar uma tela inicial no visor quando o Arduino é ligado.

Seguindo esse nó, está um módulo controlador LCD 16x2 de estoque da biblioteca padrão do ambiente XOD, mas qualquer tipo de exibição para o qual um módulo está disponível pode ser usado para exibir o texto de saída aqui.
  • A seção da árvore do menu

No topo da captura de tela do esboço está uma estrutura em forma de árvore que, quando compilada e a "raiz" de saída final da árvore é roteada para a entrada do controlador de menu que a aceita, irá gerar automaticamente um menu navegável conforme ilustrado no designer gráfico. Atualmente implementados três tipos de nós de árvore de menu, um menu do tipo "folha" - um submenu final, sem portas de entrada de cor laranja - isso representa alguma ação ou parâmetro que o usuário pode controlar, um menu do tipo "ramificação" com uma entrada e uma saída, onde o usuário pode selecionar entre vários submenus filho, e um menu do tipo "concat" onde os submenus são agrupados e alimentados na entrada de um menu do tipo ramificação, para formar um grupo de opções. Esperançosamente, deve ser um tanto autoexplicativo a partir do diagrama como conectar este conjunto de nós.

Selecionar "invocar" quando um menu do tipo "ramificação" é exibido desce para seu subgrupo de submenu associado, em vez de gerar uma saída como um menu do tipo folha. Sub-sub-sub-menus, sub-sub-sub-sub-menus, etc. são possíveis! Estruturas complexas podem ser implementadas, limitadas principalmente pelos recursos de memória RAM e Flash disponíveis de um processador de modelo Arduino específico.
  • Saída seção

Neste exemplo, a seção de saída é onde os menus do tipo folha fazem interface com o hardware externo por meio dos pinos de saída do Arduino. Cada menu tipo folha tem uma saída do tipo pulso que se conecta a um respectivo flip-flop por meio de um barramento, para ativar e desativar o pino de saída digital associado. Este tipo de arranjo pode ser usado para controlar relés externos ou LED, mas as saídas de pulso são muito gerais, e o pulso de saída gerado ao selecionar "Invocar" ao acessar a tela de um menu do tipo folha pode ser usado para fazer muitas tarefas, como atualizar um nó de tipo buffer XOD interno onde os dados de parâmetro da porta de entrada de tipo de parâmetro do controlador de menu são retidos para uso futuro.
  • Problemas conhecidos atuais

Este conjunto de nós foi testado e deve funcionar bem com o Arduino Uno no estado em que se encontra, mas alguns problemas permanecem que não foram resolvidos até o prazo deste projeto. Atualmente deve haver um menu do tipo ramificação em algum lugar da árvore para que um esboço seja compilado, embora a maioria dos projetos provavelmente deseje ter pelo menos um. A entrada de menu "superior" para o controlador de menu, destinada a retornar totalmente à tela de título da interface, não está implementada atualmente, mas deve ser um recurso fácil para a próxima revisão.

Exibições de quatro linhas são suportadas pelo nó controlador de menu, mas a interface de menu do tipo folha com quatro linhas de entrada de texto ainda não foi escrita. Uma boa quantidade de esforço foi colocada para reduzir a sobrecarga de memória deste utilitário, mas a maneira como o transpiler XOD atualmente armazena strings constantes não é ideal para sobrecarga de RAM muito baixa, e as interfaces baseadas em menu tendem a ter muito texto. Para este projeto, uma solução alternativa foi desenvolvida e um conjunto de nós do tipo string flash adicionado ao patch para garantir que strings mais longas não consumissem a preciosa RAM do programa. Esperançosamente, isso será resolvido em uma atualização do ambiente XOD, mas a solução alternativa está OK por enquanto.

Usar os nós do tipo string flash não é muito trabalhoso, mas exige a duplicação do patch e do código para cada nova string armazenada na memória do programa e clicar no código C ++ contido no próprio nó para editar a string de saída:



A entrada "ID" de nós folha e ramificação ainda não tem uma função. O pensamento é que seria bom para cada conjunto de submenus ter números de ID associados organizados em ordem para que o usuário pudesse acompanhar sua posição em um conjunto de telas, mas será necessário pensar mais um pouco sobre como codificar isso em C ++ para acontecer automaticamente.
  • Continuando o trabalho

Outros testes de bug e testes em outros dispositivos Arduino, além dos dispositivos AVR / ATmega, como o ARM, devem ser realizados. O conjunto atual de tipos de nós de menu é um pouco limitante, deve haver mais variedade de entrada e saída. Continuando o trabalho para reduzir a sobrecarga de RAM, talvez usando mais metaprogramação em tempo de compilação e armazenando o máximo de dados na memória Flash em vez de interconectar / concatenar os componentes da árvore em tempo de execução.





19/02/19 - Um segundo exemplo.


Este segundo exemplo de captura de tela mostra como usar o controlador de menu para obter um valor externo ou interno como entrada para o controlador, exibir os valores atuais e anteriores em uma página de menu desejada e selecionar um novo valor e armazená-lo em um buffer.

À direita, o nó do controlador do menu está sendo alimentado com a saída de um contador, alimentado por um nó de "relógio". Mas isso pode ser qualquer tipo de valor de dados interno ou um valor externo de, digamos, um potenciômetro conectado a uma entrada analógica. A saída do contador também é enviada para um nó de formatação de string e concatenada com algum texto de exibição para mostrar o valor atual sendo recebido pelo controlador na segunda linha do LCD, quando a página do menu é exibida.

As saídas "invocadas" e "param" do menu folha "A" são enviadas para um nó "buffer" da biblioteca padrão XOD. A saída do buffer é então roteada de volta para um arranjo semelhante ao anterior, exceto para o nó "defer", que é necessário para quebrar quaisquer loops de feedback em esboços XOD. O valor armazenado no buffer é exibido na primeira linha do LCD.

Quando o nó do controlador do menu recebe um pulso de disparo "invocado" do controlador do teclado, o nó A-out emite o valor de entrada do parâmetro do controlador do menu ali, neste caso o valor da corrente do contador e um gatilho "invocado" pulso que ativa a rotina de atualização do buffer e armazena o novo parâmetro no buffer. A tela então é atualizada automaticamente para refletir o novo valor armazenado.

A porta de saída do buffer também pode ser roteada para qualquer número de outros nós para alterar seu comportamento para refletir o novo valor de dados que o usuário selecionou:




Código

  • Biblioteca do sistema de menus XOD
Biblioteca do sistema de menus XOD C / C ++
https://xod.io/libs/bitrex/xod-menu-system-11

Adicione bitrex / xod-menu-system ao navegador de bibliotecas de esboço a partir da opção Arquivo -> Adicionar bibliotecas ... de dentro do ambiente XOD.
 Sem visualização (somente download). 

Esquemas

Abra diretamente usando o IDE XOD xodmenusystemrev1_1_4-1-19_fLVYrcSgbX.xodball

Processo de manufatura

  1. Decodificador DTMF usando apenas Arduino
  2. Faça Monitor Ambilight usando Arduino
  3. Máquina de LEVITAÇÃO ULTRASÔNICA Usando ARDUINO
  4. Animação de LCD e jogos
  5. Faça você mesmo voltímetro usando Arduino e Smartphone
  6. Monitor de freqüência cardíaca usando IoT
  7. WebServerBlink usando Arduino Uno WiFi
  8. Contador de carros usando Arduino + Processing + PHP
  9. Jogo Dino automatizado usando arduino
  10. Rádio FM usando Arduino e RDA8057M