HMI FLProg + Nextion. Lição 3



Nas lições anteriores ( lição 1 , lição 2 ), falei sobre como desenhar a interface de um painel HMI do Nextion e como controlar um painel usando o Arduino. Neste tutorial, mostrarei como resolver o problema inverso de controlar a placa Arduino usando o painel Nextion HMI.
Na lição, expandiremos o projeto da lição anterior, adicionaremos o controle do ventilador, que será ativado quando a temperatura subir acima do limite especificado e desligado quando a temperatura cair abaixo do segundo limite. As configurações serão definidas no painel e armazenadas na memória não volátil do controlador Arduino. Além disso, faremos um interruptor de luz (liga-desliga) no painel e um botão com o qual ligamos a lanterna (por exemplo, para dar um sinal aos alienígenas).

Esquema modificado da última lição. Lanterna, luz e ventilador simulam LEDs.


O design do painel também foi finalizado. Duas páginas adicionadas. Além disso, a fonte carregada no painel foi substituída. O projeto para o painel está no arquivo, cujo link é fornecido no final do artigo. Nos comentários da última lição, eles me criticaram com razão pela falta de talento de designers. Concordo plenamente com isso, portanto, as novas páginas não têm design, pura funcionalidade.
Considere as novas páginas.

Página de gerenciamento (“página3”, ID = 3).


Considere os elementos na página.

  1. Apenas campos de texto. Nada de interessante.
  2. . , . . . .

    , ( “vscope” “global”). . “Touch Press Event” .

    4 .
    page4.evtemp.txt=onV.txt

    4 , .
    page4.varN.val=0

    .
    page page4


  3. . . .

    “Touch Press Event”.

    .
    page4.varN.val=1


  4. . . .

    “Touch Press Event”.


  5. (“Dual-state button”) – .
    .

    , ( “vscope” “global”). ( “sta” “image”). “pic0” 0 “pic1” 1.

  6. (“Button”) – . .

    . , . , Arduino UART ( , ). (7 8). , , ( ). (“Touch Press Event”) .

    (“Touch Release Event”) .

    FLProg.


Janela para editar valores (“página4”, ID = 4).

Considere o que está incluído nele.
  1. Campo de valor editável. Parâmetros do item.

    Leremos o valor desse campo no controlador, respectivamente, torná-lo global (o atributo "vscope" está definido como "global").

  2. Botões de entrada de valor. Todos esses botões são quase idênticos e diferem na inscrição e no código no manipulador de eventos “Touch Press Event”. Ao clicar em um desses botões, o símbolo correspondente é adicionado ao valor atual do campo do valor editado.
    O código no "Touch Press Event" para cada um dos botões.
    “0”
    evtemp.txt=evtemp.txt+"0"

    “1”
    evtemp.txt=evtemp.txt+"1"

    “2”
    evtemp.txt=evtemp.txt+"2"

    “3”
    evtemp.txt=evtemp.txt+"3"

    “4”
    evtemp.txt=evtemp.txt+"4"

    “5”
    evtemp.txt=evtemp.txt+"5"

    “6”
    evtemp.txt=evtemp.txt+"6"

    “7”
    evtemp.txt=evtemp.txt+"7"

    “8”
    evtemp.txt=evtemp.txt+"8"

    “9”
    evtemp.txt=evtemp.txt+"9"

    “.”
    evtemp.txt=evtemp.txt+"."


  3. Botão para limpar o campo. Quando pressionado, o valor do campo é excluído.
    Código no "Touch Press Event"
    evtemp.txt=""

  4. Botão para excluir o último caractere.
    Código no "Touch Press Event"
    evtemp.txt=evtemp.txt-1

    . . . .

  5. .
    , (“endPress” “ endRel”) .
    “Touch Press Event”
    page4.endPress.val=1

    “Touch Release Event”
    page4.endRel.val=1


  6. . .
    “Touch Press Event”
    page page3



Com o painel terminado, vá para o programa FLProg. Ele também usa o projeto da última lição, ligeiramente modificado. O arquivo do projeto está no arquivo morto, um link fornecido no final da postagem.
Como na última lição, mostrarei as placas de circuito prontas e contarei o que está acontecendo nelas.
Quadro 7 - “Gerenciamento de Lanternas”



Tudo é simples aqui. Bloco B46 - “Click Tracking” (biblioteca de elementos, pasta “Nextion HMI Panel”). Na saída, corresponde ao estado do botão monitorado ou outro elemento dos eventos "Touch Press Event" e "Touch Release Event" no painel. Este valor é gravado diretamente na saída ligada à lâmpada. O bloco é parametrizado usando o editor de blocos.



No editor de blocos, selecione o painel, crie uma nova página e escreva os elementos necessários nela. Eu disse como fazer isso em uma lição anterior.



Essa imagem deve acabar.



Como variável pressionada, selecionamos a variável na qual gravamos a unidade no botão "Touch Press Event" e, como variável de liberação, a variável do botão "Touch Release Event".

Quadro 8 - "Controle de luz".



O mesmo quadro muito simples. Aqui, lemos a posição do comutador usando o bloco B47 - “Get parameter” (biblioteca de elementos -> pasta “Nextion HMI Panel” -> pasta “Elements”). Então esse valor é enviado diretamente para a unidade de saída, anexada à iluminação. O bloco é parametrizado usando o editor de blocos.



Para reduzir a carga no controlador, solicitaremos o estado do comutador uma vez por segundo.

Quadro 9 - "Fim dos parâmetros de edição".
Nesta placa, processaremos o clique do botão "Concluir" na página de edição de parâmetros.



Utilizando o bloco B48 - “Rastreamento de cliques” (biblioteca de elementos, pasta “Nextion HMI Panel”), determinamos o momento de pressionar. No editor deste bloco, criaremos a página 4 e a preencheremos com os elementos de seu interesse.



E monte o bloco.



Usando o bloco B49 - “Rtrig” (biblioteca de elementos, pasta “Triggers”), selecione a borda principal do sinal quando o botão “Concluir” for pressionado e escreva-o na variável “Edição final”.
Também nesta frente, leremos o valor da variável que armazena o identificador do campo editado usando o bloco B54 - "Obter parâmetro" (biblioteca de elementos -> pasta "Nextion HMI Panel" -> pasta "Elements"). Bloquear configurações.



Colocamos o valor obtido na variável “Número do campo editado”.
E pelo mesmo impulso, leremos diretamente o novo valor do campo de texto usando o bloco B50 - "Get Parameter" (biblioteca de elementos -> pasta "Nextion HMI Panel" -> pasta "Elements"). Bloquear configurações.



Transformamos o novo valor da string em um número no formato Float usando o bloco B51 - “Conversão de String” (biblioteca de elementos, pasta “Conversão de Tipo”). Bloquear configurações.



Multiplicamos o número por 10 usando o bloco B52 - “MUL (*)” (biblioteca de elementos, pasta “Matemática”), alteramos o tipo para Inteiro usando o bloco B53 - “Converter flutuador em inteiro” (biblioteca de elementos, pasta “Conversão de tipos”) e coloque na variável "Novo valor".

Quadro 10 - “Processando os Resultados da Edição de Valor”



Usando o bloco B55 - "Comparador" (biblioteca de elementos, a pasta "Comparação"), determinamos qual campo foi editado e, dependendo do resultado, escreva o valor da variável "Novo valor" pelo momento na variável "Fim da edição" em uma das duas variáveis, em “Ponto de ajuste para desligar a ventoinha x10” ou em “Ponto de ajuste para desligar a ventoinha x10” Também com o mesmo impulso, damos o comando do painel para ir para a página de controle usando o bloco B58 - “Ir para a página” (biblioteca de elementos, pasta “Nextion HMI Panel” -> pasta “Page”). Bloquear configurações.



Quadro 11 - “Escrevendo Valores Definidos para o Painel e EEProm”



Utilizando o bloco B59 - “Detector para alterar o número” (biblioteca de elementos, pasta “Elementos básicos”), determinamos o fato de alterar o valor pela variável “Fan On Setpoint x10”. Um curto impulso é formado na saída do bloco no momento da alteração do valor na entrada "Valor". Por esse pulso, o valor é gravado na memória não volátil do controlador. Isso pode ser feito usando o bloco B65 - “Write to EEPROM” (biblioteca de elementos, pasta “EEPROM”). O bloco é configurado usando o editor de blocos.



Antes de escrever uma variável na EEPROM, você precisa criá-la lá. Para fazer isso, clique no botão "Criar" no editor de blocos. A janela para criar uma variável é aberta.



Nele, definimos o nome da variável e seu tipo. Depois de clicar no botão Pronto, o bloco será anexado a essa variável.



Além disso, por um sinal sobre uma alteração de variável, seu valor é dividido por uma constante do tipo Float igual a 10 usando o bloco B61 - “DIV (/)” (biblioteca de elementos, pasta “Matemática”), se transforma em uma string usando o bloco B62 - “Conversão de String” (biblioteca de elementos, pasta “conversão de tipos”) e enviada ao painel no campo correspondente usando o bloco B63 - “Set Parameter” (biblioteca de elementos, pasta “Nextion HMI Panel” -> pasta “Elements”). Configurações para este bloco.



A lógica de controle pela variável “Fan off setting x10” é a mesma, as configurações de bloco são as seguintes.

Bloco B65.



Bloco B68.



Agora garantiremos que as configurações sejam lidas na EEPROM no momento em que o controlador for iniciado. Para fazer isso, insira uma nova placa na parte superior do projeto, para que o circuito localizado nela seja executado primeiro. Para fazer isso, selecione o primeiro plano e clique no botão "Inserir um cartão na frente do selecionado".



Vamos nomear o novo quadro "Lendo as configurações da EEPROM". Quadro

1.



Usando o bloco 72 - “Rtrig” (biblioteca de elementos, pasta “Triggers”), criamos um pulso curto quando o controlador é ligado. De acordo com esse impulso, os valores lidos na memória não volátil são registrados nas variáveis ​​“Ponto de ajuste para ligar a ventoinha x10” e “Ponto de ajuste para desligar a ventoinha x10”. Isso acontece usando os blocos B71 e B73 - “Leitura da EEPROM” (biblioteca de elementos, pasta “EEPROM”). Os blocos são parametrizados usando o editor de blocos.



Parâmetros do bloco B71.



A variável de leitura é selecionada na EEPROM pressionando o botão "Selecionar". A janela de seleção de variáveis ​​é aberta.



Parâmetros do bloco B73.



Bem, o último quadro do projeto.

Placa 12. “Controle do ventilador”



Se a temperatura atual exceder a configuração “Ponto de ajuste do ventilador x10”, isso será detectado pela unidade de comparação B69 e definir o gatilho B70 para o estado 1, e quando a temperatura cair abaixo da configuração do “Ponto de ajuste do desligamento do ventilador x10”, será detectado pelo bloco B71, que define o gatilho B70 para o estado 0. O estado do gatilho é fornecido à unidade de saída associada ao ventilador.

Arquive com códigos-fonte de projetos.

Demonstração em vídeo

Source: https://habr.com/ru/post/pt392865/


All Articles