ITEAD lanza una nueva línea mejorada de sus paneles Nextion HMI Los representantes de la compañía me proporcionaron una copia de esta línea para integrar nuevas funciones del panel en el programa FLProg. En la versión 2.2, esto fue implementado. En esta lección, consideraremos las nuevas características del panel y, por ejemplo, crearemos un temporizador programable para cinco canales.Para comenzar, considere las características del panel. La línea mejorada tiene un reloj de tiempo real incorporado, 1024 bytes de memoria no volátil, 8 entradas / salidas digitales. Cada uno de ellos se puede configurar como entrada o como salida. Cuatro de ellos (del 4 al 7) se pueden configurar como salidas PWM.
Además de la línea Nextion HMI Enhanced, también se lanzó la tarjeta de expansión, que
tiene controles y pantallas conectadas al panel GPIO.
Tales oportunidades permiten hacer un dispositivo casi completo basado en este panel. En esta lección, me enfocaré en programar el panel en sí, ya que hay poca información sobre este tema, pero hay muchas trampas. Al final de la publicación hay un enlace al proyecto para el programa Nextion Editor.Primeros pasos con el editor Nextion Editor, su puesta en marcha, la elección inicial de codificación, tales como el panel se discutió en mis mensajes anteriores tyts , tyts y tyts . Por lo tanto, no nos detendremos en esto.El programa consta de tres pantallas del panel principal ( Main ), Ajuste del temporizador ( el SetTimer ) y la hora ( SetCurrentTime ).Comencemos desde la pantalla principal.
Esta pantalla muestra la configuración para encender, apagar, el estado de cada canal, el botón para cambiar el estado de los canales y el botón para cambiar a la pantalla para configurar la hora actual. Cuando haces clic en el texto que muestra la configuración del canal, vas a la configuración de este canal. Además, en esta pantalla hay cuatro botones ocultos necesarios para unirse a los botones físicos ubicados en la Tarjeta de expansión. .
Considere el código contenido en la pantalla principal.Evento Preinitialilize el evento (la pantalla se denomina antes de la inicialización).cfgpio 0,1,b0
cfgpio 2,1,b8
cfgpio 3,1,b7
cfgpio 4,1,b6
cfgpio 5,1,b9
SelTim.val=1
Aquí vinculamos los botones físicos ubicados en la Tarjeta de expansión a los botones virtuales en la pantalla.Más información sobre el comando cfgpio: configuración de entradas y salidas físicas del panel (solo los paneles mejorados tienen este comando).:
cfgpio id,state,cmp:
id: / (0-7)
state: (0-4)
cmp: ( 1, — 0).
.
cfgpio .
:
| | |
---|
0 | + 5 ( 50 ). pio0 – pio7 ( 0- 7 / | cfgpio 0,0,0 / GPIO0 , +5. : n0.val = pio0
|
1 | + 5 ( 50 ) . pio0 – pio7 ( 0- 7 / ). . 1 , . 0 . Preinitialilize Event , , . | cfgpio 2,1,b0 / GPIO2 , +5 b0. , b0 , – .
|
2 | . pio0 – pio7 ( 0- 7 / ). | cfgpio 1,2,0 / GPIO1 . : pio1=1
|
3 | . 4-7 /. 0 100. – 50. pwm4- pwm7 ( 4- 7 / ). pwmf . 1 65536. – 1000. | cfgpio 4,3,0 / GPIO4 . : pwm4=20 – 2000 . pwmf=2000
|
4 | . pio0 – pio7 ( 0- 7 / ). | cfgpio 5,4,0 / GPIO5 . : pio5=1
|
Caso del tacto de prensa Evento botón b0 - «Establecer hora»page 2
Es todo explica por sí mismoevento táctil evento para la prensa botones B1 - Estado «interruptor del primer canal"repo TempB.val,0
if(TempB.val==1)
{
if(tsr1.val==1)
{
tsr1.val=2
}else
{
tsr1.val=1
}
}
Primero leemos la actividad del canal de la EEPROM. Cada canal se puede desactivar desde el trabajo en la página de configuración del canal. El comando repo "lectura de EEPROM" se analizará con más detalle a continuación. Luego, si el canal está activo, cambie su estado. El estado actual de los canales se almacena en las variables tsr1 - tsr5 para cada uno de los canales, respectivamente.Características en la sintaxis de la expresión if elseif(TempB.val==1) – .
. .
}else
, . , else , .
Para los botones restantes para cambiar el estado del canal ( b2 - b5 ), el código de evento Touch Press es el mismo. Solo se cambia la dirección en la EEPROM y la variable de estado del canal.Caso del tacto de prensa Evento botón b6 - «elegir el programa anterior ". El botón es invisible. Modo de representación ( sta ): imagen recortada (imagen recortada). Como imagen en estado no presionado ( picc ) y en estado presionado ( picc2 ), se selecciona la imagen de fondo de la ventana. Debido a esto, el botón no se muestra, pero funciona. Este botón en esta pantalla está vinculado al botón físico Arriba (IO4) en la Tarjeta de expansión .if(SelTim.val<2)
{
SelTim.val=5
}else
{
SelTim.val=SelTim.val-1
}
La variable SelTim contiene el número del temporizador seleccionado actualmente. Todo lo demás, creo, está claro por los comentarios. Caso del tacto de prensa Evento botón B7 - «para seleccionar el siguiente canal ". El botón es invisible. Este botón en esta pantalla está vinculado al botón físico Down (IO3) en la tarjeta de expansión . if(SelTim.val>4)
{
SelTim.val=1
}else
{
SelTim.val=SelTim.val+1
}
Aquí creo que lo mismo está claro.Caso del tacto de prensa Evento botón B8 - «Editar el canal seleccionado ". El botón es invisible. Este botón en esta pantalla está vinculado al botón físico derecho (IO2) en la placa de expansión .if(SelTim.val==1)
{
click TimerText1,1
}
if(SelTim.val==2)
{
click TimerText2,1
}
if(SelTim.val==3)
{
click TimerText3,1
}
if(SelTim.val==4)
{
click TimerText4,1
}
if(SelTim.val==5)
{
click TimerText5,1
}
Haga clic en detalles del comando: simule hacer clic o soltar un elemento:
click cmpID,event
:
cmpID: ID .
event: 0 – ; 1 –
. click .
Caso del tacto de prensa Evento botón B9 - «estado de conmutación del canal seleccionado ". El botón es invisible. Este botón en esta pantalla está vinculado al botón físico izquierdo (IO5) en la placa de expansión .if(SelTim.val==1)
{
click b1,1
}
if(SelTim.val==2)
{
click b2,1
}
if(SelTim.val==3)
{
click b3,1
}
if(SelTim.val==4)
{
click b4,1
}
if(SelTim.val==5)
{
click b5,1
}
El evento Touch Press del cuadro de texto TimerText1 es "Mostrar estado del canal 1".sys0=1
sys1=1
page 1
Para otros campos de texto ( TimerText2 - TimerText5 ), el código del evento Touch Press es el mismo. Solo en la variable de sistema sys0 se ingresa el número de canal correspondiente.sys0, sys1, sys2 son variables numéricas globales que no necesitan ser creadas o definidas. Se pueden usar en cualquier pantalla. El valor predeterminado para estas tres variables es 0, se pueden leer y escribir, su rango de valores es 0 ~ 4294967295. Recomendado para pasar valores entre páginas.El temporizador tm0 se configura en esta pantalla . Este temporizador se activa cada 200 milisegundos (parámetro tim), cuando la página está activa. El código para monitorear el estado de los temporizadores y volver a dibujar los componentes en la página se encuentra en el Evento de temporizador de este temporizador.Código bajo spoler
temp.val=rtc2
tempText.txt=""
if(temp.val<10)
{
tempText.txt="0"
}
cov temp.val,TT1.txt,0
CurrentTime1.txt=tempText.txt+TT1.txt
temp.val=rtc1
tempText.txt=""
if(temp.val<10)
{
tempText.txt="0"
}
cov temp.val,TT1.txt,0
CurrentTime1.txt=CurrentTime1.txt+"-"+tempText.txt+TT1.txt
temp.val=rtc0
cov temp.val,TT1.txt,0
CurrentTime1.txt=CurrentTime1.txt+"-"+TT1.txt
temp.val=rtc3
tempText.txt=""
if(temp.val<10)
{
tempText.txt="0"
}
cov temp.val,TT1.txt,0
CurrentTime1.txt=CurrentTime1.txt+" "+tempText.txt+TT1.txt
temp.val=rtc4
tempText.txt=""
if(temp.val<10)
{
tempText.txt="0"
}
cov temp.val,TT1.txt,0
CurrentTime1.txt=CurrentTime1.txt+":"+tempText.txt+TT1.txt
temp.val=rtc5
tempText.txt=""
if(temp.val<10)
{
tempText.txt="0"
}
cov temp.val,TT1.txt,0
CurrentTime1.txt=CurrentTime1.txt+":"+tempText.txt+TT1.txt
for(i.val=0;i.val<5;i.val++)
{
temp.val=i.val*52
temp2.val=temp.val+4
Var0txt.txt=""
repo temp1.val,temp2.val
if(temp1.val==10000)
{
ts1.val=1
tempText.txt="X"
}else
{
if(temp1.val==rtc2)
{
ts1.val=1
}else
{
ts1.val=2
}
cov temp1.val,tempText.txt,0
if(temp1.val<10)
{
Var0txt.txt="0"
}
}
TT1.txt=Var0txt.txt+tempText.txt+"-"
temp2.val=temp.val+8
Var0txt.txt=""
repo temp1.val,temp2.val
if(temp1.val==10000)
{
ts2.val=1
tempText.txt="X"
}else
{
if(temp1.val==rtc1)
{
ts2.val=1
}else
{
ts2.val=2
}
cov temp1.val,tempText.txt,0
if(temp1.val<10)
{
Var0txt.txt="0"
}
}
TT1.txt=TT1.txt+Var0txt.txt+tempText.txt+"-"
temp2.val=temp.val+12
repo temp1.val,temp2.val
if(temp1.val==10000)
{
ts3.val=1
tempText.txt="X"
}else
{
if(temp1.val==rtc0)
{
ts3.val=1
}else
{
ts3.val=0
}
cov temp1.val,tempText.txt,0
}
TT1.txt=TT1.txt+tempText.txt+" "
temp2.val=temp.val+16
Var0txt.txt=""
repo temp1.val,temp2.val
if(temp1.val==10000)
{
ts4.val=1
tempText.txt="X"
}else
{
if(temp1.val==rtc3)
{
ts4.val=1
}else
{
ts4.val=0
}
cov temp1.val,tempText.txt,0
if(temp1.val<10)
{
Var0txt.txt="0"
}
}
TT1.txt=TT1.txt+Var0txt.txt+tempText.txt+":"
temp2.val=temp.val+20
Var0txt.txt=""
repo temp1.val,temp2.val
if(temp1.val==10000)
{
ts5.val=1
tempText.txt="X"
}else
{
if(temp1.val==rtc4)
{
ts5.val=1
}else
{
ts5.val=0
}
cov temp1.val,tempText.txt,0
if(temp1.val<10)
{
Var0txt.txt="0"
}
}
TT1.txt=TT1.txt+Var0txt.txt+tempText.txt+":"
temp2.val=temp.val+24
Var0txt.txt=""
repo temp1.val,temp2.val
if(temp1.val==10000)
{
ts6.val=1
tempText.txt="X"
}else
{
if(temp1.val==rtc5)
{
ts6.val=1
}else
{
ts6.val=0
}
cov temp1.val,tempText.txt,0
if(temp1.val<10)
{
Var0txt.txt="0"
}
}
TT1.txt=TT1.txt+Var0txt.txt+tempText.txt+" / "
temp2.val=temp.val+28
Var0txt.txt=""
repo temp1.val,temp2.val
if(temp1.val==10000)
{
ts7.val=1
tempText.txt="X"
}else
{
if(temp1.val==rtc2)
{
ts7.val=1
}else
{
ts7.val=0
}
cov temp1.val,tempText.txt,0
if(temp1.val<10)
{
Var0txt.txt="0"
}
}
TT1.txt=TT1.txt+Var0txt.txt+tempText.txt+"-"
temp2.val=temp.val+32
Var0txt.txt=""
repo temp1.val,temp2.val
if(temp1.val==10000)
{
ts8.val=1
tempText.txt="X"
}else
{
if(temp1.val==rtc1)
{
ts8.val=1
}else
{
ts8.val=0
}
cov temp1.val,tempText.txt,0
if(temp1.val<10)
{
Var0txt.txt="0"
}
}
TT1.txt=TT1.txt+Var0txt.txt+tempText.txt+"-"
temp2.val=temp.val+36
repo temp1.val,temp2.val
if(temp1.val==10000)
{
ts9.val=1
tempText.txt="X"
}else
{
if(temp1.val==rtc0)
{
ts9.val=1
}else
{
ts9.val=0
}
cov temp1.val,tempText.txt,0
}
TT1.txt=TT1.txt+Var0txt.txt+tempText.txt+" "
temp2.val=temp.val+40
Var0txt.txt=""
repo temp1.val,temp2.val
if(temp1.val==10000)
{
ts10.val=1
tempText.txt="X"
}else
{
if(temp1.val==rtc3)
{
ts10.val=1
}else
{
ts10.val=0
}
cov temp1.val,tempText.txt,0
if(temp1.val<10)
{
Var0txt.txt="0"
}
}
TT1.txt=TT1.txt+Var0txt.txt+tempText.txt+":"
temp2.val=temp.val+44
Var0txt.txt=""
repo temp1.val,temp2.val
if(temp1.val==10000)
{
ts11.val=1
tempText.txt="X"
}else
{
if(temp1.val==rtc4)
{
ts11.val=1
}else
{
ts11.val=0
}
cov temp1.val,tempText.txt,0
if(temp1.val<10)
{
Var0txt.txt="0"
}
}
TT1.txt=TT1.txt+Var0txt.txt+tempText.txt+":"
temp2.val=temp.val+48
Var0txt.txt=""
repo temp1.val,temp2.val
if(temp1.val==10000)
{
ts12.val=1
tempText.txt="X"
}else
{
if(temp1.val==rtc5)
{
ts12.val=1
}else
{
ts12.val=0
}
cov temp1.val,tempText.txt,0
if(temp1.val<10)
{
Var0txt.txt="0"
}
}
TT1.txt=TT1.txt+Var0txt.txt+tempText.txt
repo temp1.val,temp.val
tsrOn.val=0
if(temp1.val==1)
{
if(ts1.val==1)
{
if(ts2.val==1)
{
if(ts3.val==1)
{
if(ts4.val==1)
{
if(ts5.val==1)
{
if(ts6.val==1)
{
tsrOn.val=1
}
}
}
}
}
}
}
tsrOf.val=0
if(temp1.val==1)
{
if(ts7.val==1)
{
if(ts8.val==1)
{
if(ts9.val==1)
{
if(ts10.val==1)
{
if(ts11.val==1)
{
if(ts12.val==1)
{
tsrOf.val=1
}
}
}
}
}
}
}else
{
tsrOf.val=1
}
if(i.val==0)
{
if(tsr1.val==1)
{
if(tsrOf.val==1)
{
tsr1.val=2
}
}else
{
if(tsrOn.val==1)
{
tsr1.val=1
}
}
if(tsr1.val==1)
{
TimerText1.pco=63488
}else
{
if(temp1.val==1)
{
TimerText1.pco=65504
}else
{
TimerText1.pco=50712
}
}
TimerText1.txt=TT1.txt
}
if(i.val==1)
{
if(tsr2.val==1)
{
if(tsrOf.val==1)
{
tsr2.val=2
}
}else
{
if(tsrOn.val==1)
{
tsr2.val=1
}
}
if(tsr2.val==1)
{
TimerText2.pco=63488
}else
{
if(temp1.val==1)
{
TimerText2.pco=65504
}else
{
TimerText2.pco=50712
}
}
TimerText2.txt=TT1.txt
}
if(i.val==2)
{
if(tsr3.val==1)
{
if(tsrOf.val==1)
{
tsr3.val=2
}
}else
{
if(tsrOn.val==1)
{
tsr3.val=1
}
}
if(tsr3.val==1)
{
TimerText3.pco=63488
}else
{
if(temp1.val==1)
{
TimerText3.pco=65504
}else
{
TimerText3.pco=50712
}
}
TimerText3.txt=TT1.txt
}
if(i.val==3)
{
if(tsr4.val==1)
{
if(tsrOf.val==1)
{
tsr4.val=2
}
}else
{
if(tsrOn.val==1)
{
tsr4.val=1
}
}
if(tsr4.val==1)
{
TimerText4.pco=63488
}else
{
if(temp1.val==1)
{
TimerText4.pco=65504
}else
{
TimerText4.pco=50712
}
}
TimerText4.txt=TT1.txt
}
if(i.val==4)
{
if(tsr5.val==1)
{
if(tsrOf.val==1)
{
tsr5.val=2
}
}else
{
if(tsrOn.val==1)
{
tsr5.val=1
}
}
if(tsr5.val==1)
{
TimerText5.pco=63488
}else
{
if(temp1.val==1)
{
TimerText5.pco=65504
}else
{
TimerText5.pco=50712
}
}
TimerText5.txt=TT1.txt
}
}
if(SelTim.val==1)
{
b1.txt="+"
}else
{
b1.txt=""
}
if(SelTim.val==2)
{
b2.txt="+"
}else
{
b2.txt=""
}
if(SelTim.val==3)
{
b3.txt="+"
}else
{
b3.txt=""
}
if(SelTim.val==4)
{
b4.txt="+"
}else
{
b4.txt=""
}
if(SelTim.val==5)
{
b5.txt="+"
}else
{
b5.txt=""
}
Características en la sintaxis de una expresión forfor(n0.val=0; n0.val<100; n0.val++) — .
. .
Lea más sobre el comando cov: conversión entre cadenas y datos numéricos.:
cov att1,att2,lenth
:
att1:
att2:
lenth: ( 0 – )
:
cov number.val,text.txt,0
number text.
cov text.txt,number.val,5
text.
. cov .
Considere la ubicación de los datos en el panel EEPROM. A cada canal se le asignan 52 bytes. Para cada valor - 4 bytes.Dirección EEPROM Offset de inicio = (número de canal que comienza en 0) * 52
| Valor |
---|
Iniciar desplazamiento | Actividad del canal (0 - canal deshabilitado, 1 - canal habilitado) |
Comienzo offset + 4 | Día de inclusión del canal. Si no se tiene en cuenta - 10,000 |
Compensación inicial + 8 | Mes de inclusión del canal. Si no se tiene en cuenta - 10,000 |
Compensación inicial + 12 | . — 10000 |
+ 16 | . — 10000 |
+ 20 | . -10000 |
+ 24 | . – 10000 |
+ 28 | . — 10000 |
+ 32 | . – 10000 |
+ 36 | . -10000 |
+ 40 | . -10000 |
+ 44 | . -10000 |
+ 48 | Canal apagado segundo. Si no se tiene en cuenta -10000 |
Desde la pantalla principal de haber terminado, pasar a la pantalla, el ajuste del temporizador ( el SetTimer ID = 1 )
Evento Preinitialilize el evento (la pantalla se denomina antes de la inicialización).cfgpio 0,1,b2
cfgpio 1,1,BYE
cfgpio 2,1,b0
cfgpio 3,1,BYM
cfgpio 4,1,BYP
cfgpio 5,1,b1
StAddr.val=sys0-1
StAddr.val=StAddr.val*52
repo Enable.val,StAddr.val
Aquí redefinimos la unión de los botones físicos ubicados en la Tarjeta de expansión a las necesidades de esta pantalla y leemos previamente los datos.Caso del tacto de prensa Evento botón b0 - «Ir al siguiente campo ". El botón es invisible. Este botón en esta pantalla está vinculado al botón físico derecho (IO2) en la placa de expansión .if(sys1>11)
{
sys1=1
}else
{
sys1=sys1+1
}
Caso del tacto de prensa Evento botones B1 - «Ir al campo anterior ". El botón es invisible. Este botón en esta pantalla está vinculado al botón físico izquierdo (IO5) en la placa de expansión .if(sys1<2)
{
sys1=12
}else
{
sys1=sys1-1
}
Caso del tacto de prensa Evento botón b2 - "canal Activar / Desactivar" o "Salir" (retención de 2 segundos). El botón es invisible. Este botón en esta pantalla está vinculado al botón físico Esc (IO0) en la tarjeta de expansión.tm1.en=1
Aquí comenzamos el temporizador auxiliar. Si pulsa el botón físico Esc (IO0) en la placa de expansión durante 2 segundos (propiedad tim temporizador), la reducción suceda temporizador (evento llamado evento de temporizador del temporizador TM1 ), si se suelta el botón antes del evento se debe táctil de lanzamiento Evento botón b2tm1.en=0
if(Enable.val==1)
{
Enable.val=0
}else
{
Enable.val=1
}
Evento evento de temporizador del temporizador TM1 click b11,1 // b11 ("")
Caso del tacto de prensa Evento botón de una semana de descanso - «Activar / Desactivar registro en la operación" del campo seleccionado.if(sys1==1)
{
temp2.val=rtc2
}
if(sys1==2)
{
temp2.val=rtc1
}
if(sys1==3)
{
temp2.val=rtc0
}
if(sys1==4)
{
temp2.val=rtc3
}
if(sys1==5)
{
temp2.val=rtc4
}
if(sys1==6)
{
temp2.val=rtc5
}
if(sys1==7)
{
temp2.val=rtc2
}
if(sys1==8)
{
temp2.val=rtc1
}
if(sys1==9)
{
temp2.val=rtc0
}
if(sys1==10)
{
temp2.val=rtc3
}
if(sys1==11)
{
temp2.val=rtc4
}
if(sys1==12)
{
temp2.val=rtc5
}
temp3.val=sys1*4
temp.val=StAddr.val+temp3.val
repo temp1.val,temp.val
if(temp1.val==10000)
{
temp1.val=temp2.val
}else
{
temp1.val=10000
}
wepo temp1.val,temp.val
Lea más sobre los comandos wepo - escriba en EEPROM y repo - lea desde EEPROM (solo los paneles mejorados tienen estos comandos).wepo
:
wepo att,add
:
att:
add: EEPROM
:
wepo number.val,10
number EEPROM 10. EEPROM 0. . wepo .
repo
:
repo att,add
:
att:
add: EEPROM
:
repo number.val,10
number EEPROM , 10. , 4 , . – txt_maxl att +1
. repo .
Caso del tacto de prensa Evento botón EXC - «Añadir 1 al campo seleccionado ".if(sys1==1)
{
temp2.val=31
}
if(sys1==2)
{
temp2.val=12
}
if(sys1==3)
{
temp2.val=9999
}
if(sys1==4)
{
temp2.val=23
}
if(sys1==5)
{
temp2.val=59
}
if(sys1==6)
{
temp2.val=59
}
if(sys1==7)
{
temp2.val=31
}
if(sys1==8)
{
temp2.val=12
}
if(sys1==9)
{
temp2.val=9999
}
if(sys1==10)
{
temp2.val=23
}
if(sys1==11)
{
temp2.val=59
}
if(sys1==12)
{
temp2.val=59
}
temp3.val=sys1*4
temp.val=StAddr.val+temp3.val
repo temp1.val,temp.val
if(temp1.val!=10000)
{
if(temp1.val!=temp2.val)
{
temp1.val=temp1.val+1
wepo temp1.val,temp.val
}
}
Caso del tacto de prensa Evento botón BYM - «Reste 1 del campo elegido ".temp2.val=0
if(sys1==1)
{
temp2.val=1
}
if(sys1==2)
{
temp2.val=1
}
if(sys1==3)
{
temp2.val=2016
}
if(sys1==7)
{
temp2.val=1
}
if(sys1==8)
{
temp2.val=1
}
if(sys1==9)
{
temp2.val=2016
}
temp3.val=sys1*4
temp.val=StAddr.val+temp3.val
repo temp1.val,temp.val
if(temp1.val!=10000)
{
if(temp1.val!=temp2.val)
{
temp1.val=temp1.val-1
wepo temp1.val,temp.val
}
}
Caso del tacto de prensa Evento botón B11 - «Volver a la página principal ".wepo Enable.val,StAddr.val
sys0=0
sys1=0
page 0
El evento Touch Press del cuadro de texto StartD es " Disparador del punto de ajuste del día".sys1=1
Para los campos de texto con otras configuraciones, el código del evento Touch Press es el mismo, excepto el número de campo.Los números de los campos de valores de configuración son:StartMo - 2 ("Mes del punto de ajuste de la operación").StartY - 3 ("Año del viaje del punto de ajuste").StartH - 4 ("Hora del ajuste de la operación").StartMi - 5 (" Punto de ajuste de minutos de operación").StartS - 6 ("Segundo punto de ajuste de la operación").StopD - 7 (“Configuración del día del viaje”).StopMo - 8 ("Configuración del mes del viaje").StopY - 9 ("Configuración del año del viaje").Parada H - 10 ("Configuración de la hora del viaje").Stopmi- 11 (“Configuración de viaje de minutos„).Paradas - 12 ("Segundos del punto de ajuste de disparo").El temporizador tm0 también se configura en esta pantalla con un período de disparo de 200 milisegundos. En el evento de temporizador de este temporizador, los valores de los campos de configuración se actualizan.Código bajo el spoiler
temp1.val=StAddr.val+4
repo temp.val,temp1.val
cov temp.val,tempStr.txt,0
if(temp.val<10)
{
tempStr1.txt="0"+tempStr.txt
}else
{
tempStr1.txt=tempStr.txt
}
if(temp.val==10000)
{
if(sys1==1)
{
vis BYP,0
vis BYM,0
}
StartD.txt="X"
}else
{
if(sys1==1)
{
vis BYP,1
vis BYM,1
}
StartD.txt=tempStr1.txt
}
temp1.val=StAddr.val+8
repo temp.val,temp1.val
cov temp.val,tempStr.txt,0
if(temp.val<10)
{
tempStr1.txt="0"+tempStr.txt
}else
{
tempStr1.txt=tempStr.txt
}
if(temp.val==10000)
{
if(sys1==2)
{
vis BYP,0
vis BYM,0
}
StartMo.txt="X"
}else
{
if(sys1==2)
{
vis BYP,1
vis BYM,1
}
StartMo.txt=tempStr1.txt
}
temp1.val=StAddr.val+12
repo temp.val,temp1.val
cov temp.val,tempStr.txt,0
if(temp.val<10)
{
tempStr1.txt="0"+tempStr.txt
}else
{
tempStr1.txt=tempStr.txt
}
if(temp.val==10000)
{
if(sys1==3)
{
vis BYP,0
vis BYM,0
}
StartY.txt="X"
}else
{
if(sys1==3)
{
vis BYP,1
vis BYM,1
}
StartY.txt=tempStr1.txt
}
temp1.val=StAddr.val+16
repo temp.val,temp1.val
cov temp.val,tempStr.txt,0
if(temp.val<10)
{
tempStr1.txt="0"+tempStr.txt
}else
{
tempStr1.txt=tempStr.txt
}
if(temp.val==10000)
{
if(sys1==4)
{
vis BYP,0
vis BYM,0
}
StartH.txt="X"
}else
{
if(sys1==4)
{
vis BYP,1
vis BYM,1
}
StartH.txt=tempStr1.txt
}
temp1.val=StAddr.val+20
repo temp.val,temp1.val
cov temp.val,tempStr.txt,0
if(temp.val<10)
{
tempStr1.txt="0"+tempStr.txt
}else
{
tempStr1.txt=tempStr.txt
}
if(temp.val==10000)
{
if(sys1==5)
{
vis BYP,0
vis BYM,0
}
StartMi.txt="X"
}else
{
if(sys1==5)
{
vis BYP,1
vis BYM,1
}
StartMi.txt=tempStr1.txt
}
temp1.val=StAddr.val+24
repo temp.val,temp1.val
cov temp.val,tempStr.txt,0
if(temp.val<10)
{
tempStr1.txt="0"+tempStr.txt
}else
{
tempStr1.txt=tempStr.txt
}
if(temp.val==10000)
{
if(sys1==6)
{
vis BYP,0
vis BYM,0
}
StartS.txt="X"
}else
{
if(sys1==6)
{
vis BYP,1
vis BYM,1
}
StartS.txt=tempStr1.txt
}
temp1.val=StAddr.val+28
repo temp.val,temp1.val
cov temp.val,tempStr.txt,0
if(temp.val<10)
{
tempStr1.txt="0"+tempStr.txt
}else
{
tempStr1.txt=tempStr.txt
}
if(temp.val==10000)
{
if(sys1==7)
{
vis BYP,0
vis BYM,0
}
StopD.txt="X"
}else
{
if(sys1==7)
{
vis BYP,1
vis BYM,1
}
StopD.txt=tempStr1.txt
}
temp1.val=StAddr.val+32
repo temp.val,temp1.val
cov temp.val,tempStr.txt,0
if(temp.val<10)
{
tempStr1.txt="0"+tempStr.txt
}else
{
tempStr1.txt=tempStr.txt
}
if(temp.val==10000)
{
if(sys1==8)
{
vis BYP,0
vis BYM,0
}
StopMo.txt="X"
}else
{
if(sys1==8)
{
vis BYP,1
vis BYM,1
}
StopMo.txt=tempStr1.txt
}
temp1.val=StAddr.val+36
repo temp.val,temp1.val
cov temp.val,tempStr.txt,0
if(temp.val<10)
{
tempStr1.txt="0"+tempStr.txt
}else
{
tempStr1.txt=tempStr.txt
}
if(temp.val==10000)
{
if(sys1==9)
{
vis BYP,0
vis BYM,0
}
StopY.txt="X"
}else
{
if(sys1==9)
{
vis BYP,1
vis BYM,1
}
StopY.txt=tempStr1.txt
}
temp1.val=StAddr.val+40
repo temp.val,temp1.val
cov temp.val,tempStr.txt,0
if(temp.val<10)
{
tempStr1.txt="0"+tempStr.txt
}else
{
tempStr1.txt=tempStr.txt
}
if(temp.val==10000)
{
if(sys1==10)
{
vis BYP,0
vis BYM,0
}
StopH.txt="X"
}else
{
if(sys1==10)
{
vis BYP,1
vis BYM,1
}
StopH.txt=tempStr1.txt
}
temp1.val=StAddr.val+44
repo temp.val,temp1.val
cov temp.val,tempStr.txt,0
if(temp.val<10)
{
tempStr1.txt="0"+tempStr.txt
}else
{
tempStr1.txt=tempStr.txt
}
if(temp.val==10000)
{
if(sys1==11)
{
vis BYP,0
vis BYM,0
}
StopMi.txt="X"
}else
{
if(sys1==11)
{
vis BYP,1
vis BYM,1
}
StopMi.txt=tempStr1.txt
}
temp1.val=StAddr.val+48
repo temp.val,temp1.val
cov temp.val,tempStr.txt,0
if(temp.val<10)
{
tempStr1.txt="0"+tempStr.txt
}else
{
tempStr1.txt=tempStr.txt
}
if(temp.val==10000)
{
if(sys1==12)
{
vis BYP,0
vis BYM,0
}
StopS.txt="X"
}else
{
if(sys1==12)
{
vis BYP,1
vis BYM,1
}
StopS.txt=tempStr1.txt
}
if(sys1==1)
{
StartD.pco=63488
}else
{
StartD.pco=65535
}
if(sys1==2)
{
StartMo.pco=63488
}else
{
StartMo.pco=65535
}
if(sys1==3)
{
StartY.pco=63488
}else
{
StartY.pco=65535
}
if(sys1==4)
{
StartH.pco=63488
}else
{
StartH.pco=65535
}
if(sys1==5)
{
StartMi.pco=63488
}else
{
StartMi.pco=65535
}
if(sys1==6)
{
StartS.pco=63488
}else
{
StartS.pco=65535
}
if(sys1==7)
{
StopD.pco=63488
}else
{
StopD.pco=65535
}
if(sys1==8)
{
StopMo.pco=63488
}else
{
StopMo.pco=65535
}
if(sys1==9)
{
StopY.pco=63488
}else
{
StopY.pco=65535
}
if(sys1==10)
{
StopH.pco=63488
}else
{
StopH.pco=65535
}
if(sys1==11)
{
StopMi.pco=63488
}else
{
StopMi.pco=65535
}
if(sys1==12)
{
StopS.pco=63488
}else
{
StopS.pco=65535
}
Más información sobre el comando vis: cambiar la visibilidad del elemento:
vis obj,state
:
obj: ID .
state: 1- , 0 –
. vis .
Con la pantalla de configuración del canal finalizada, vaya a la pantalla de configuración de hora actual ( SetCurrentTime ID = 2 ).
Aquí, como en otras pantallas en el Evento de preinicialización (llamado antes de que se inicialice la pantalla), volvemos a unir los botones físicos a los botones virtuales en esta pantalla.cfgpio 0,1,b11
cfgpio 1,1,b10
cfgpio 2,1,b14
cfgpio 3,1,b13
cfgpio 4,1,b12
cfgpio 5,1,b15
sel.val=1
Caso del tacto de prensa Evento botón b0 - «Añadir a la hora actual día ".if(rtc2<31)
{
rtc2=rtc2+1
}
Caso del tacto de prensa Evento botón b2 - «Añadir mes a la hora actual ".if(rtc1<12)
{
rtc1=rtc1+1
}
Caso del tacto de prensa Evento botón B4 - «Añadir el año a la hora actual ".rtc0=rtc0+1
Caso del tacto de prensa Evento botón b6 - «Añadir una hora a la hora actual ". if(rtc3<23)
{
rtc3=rtc3+1
}
Caso del tacto de prensa Evento botón B8 - «Añadir al momento actual de tiempo ".if(rtc4<59)
{
rtc4=rtc4+1
}
Caso del tacto de prensa Evento botones B1 - «Quitad el día de la hora actual ".if(rtc2>1)
{
rtc2=rtc2-1
}
El evento Touch Press del botón b3 es "Restar el mes de la hora actual".if(rtc1>1)
{
rtc1=rtc1-1
}
El evento Touch Press del botón b5 es "Restar el año de la hora actual".if(rtc0>2016)
{
rtc0=rtc0-1
}
El evento Touch Press del botón b7 es "Restar una hora de la hora actual".if(rtc3>0)
{
rtc3=rtc3-1
}
Caso del tacto de prensa Evento botón B9 - «Quitad el minuto de la hora actual ".if(rtc4>0)
{
rtc4=rtc4-1
}
El evento Touch Press del botón b10 es "Establecer segundos a 0".rtc5=0
El evento Touch Press del botón b11 es "Salir".page 0
El evento Touch Press del botón b12 es "Ir al campo anterior". El botón es invisible. Este botón en esta pantalla está vinculado al botón físico Arriba (IO4) en la Tarjeta de expansión .if(sel.val<2)
{
sel.val=5
}else
{
sel.val=sel.val-1
}
Caso del tacto de prensa Evento botón B13 - «Ir al siguiente campo ". El botón es invisible. Este botón en esta pantalla está vinculado al botón físico Down (IO3) en la tarjeta de expansión .if(sel.val>4)
{
sel.val=1
}else
{
sel.val=sel.val+1
}
Caso del tacto de prensa Evento botón B14 - «Añadir 1 al valor del campo elegido ". El botón es invisible. Este botón en esta pantalla está vinculado al botón físico derecho (IO2) en la placa de expansión .if(sel.val==1)
{
click b0,1
}
if(sel.val==2)
{
click b2,1
}
if(sel.val==3)
{
click b4,1
}
if(sel.val==4)
{
click b6,1
}
if(sel.val==5)
{
click b8,1
}
Caso del tacto de lanzamiento Evento botón b14if(sel.val==1)
{
click b0,0
}
if(sel.val==2)
{
click b2,0
}
if(sel.val==3)
{
click b4,0
}
if(sel.val==4)
{
click b6,0
}
if(sel.val==5)
{
click b8,0
}
El evento Touch Press del botón b15 es "Restar 1 del valor del campo seleccionado". El botón es invisible. Este botón en esta pantalla está vinculado al botón físico izquierdo (IO5) en la placa de expansión . if(sel.val==1)
{
click b1,1
}
if(sel.val==2)
{
click b3,1
}
if(sel.val==3)
{
click b5,1
}
if(sel.val==4)
{
click b7,1
}
if(sel.val==5)
{
click b9,1
}
Caso del tacto de lanzamiento Evento botón b15if(sel.val==1)
{
click b1,0
}
if(sel.val==2)
{
click b3,0
}
if(sel.val==3)
{
click b5,0
}
if(sel.val==4)
{
click b7,0
}
if(sel.val==5)
{
click b9,0
}
Bueno, como en las otras ventanas, el temporizador tm0 se configura en esta ventana con un período de respuesta de 200 milisegundos. En el evento de temporizador de este temporizador, se actualizan los valores de los campos de texto.Código bajo el spoiler
temp.val=rtc2
tempText.txt=""
if(temp.val<10)
{
tempText.txt="0"
}
cov temp.val,TT1.txt,0
CurrentTime1.txt=tempText.txt+TT1.txt
temp.val=rtc1
tempText.txt=""
if(temp.val<10)
{
tempText.txt="0"
}
cov temp.val,TT1.txt,0
CurrentTime1.txt=CurrentTime1.txt+"-"+tempText.txt+TT1.txt
temp.val=rtc0
tempText.txt=""
if(temp.val<10)
{
tempText.txt="0"
}
cov temp.val,TT1.txt,0
CurrentTime1.txt=CurrentTime1.txt+"-"+tempText.txt+TT1.txt
temp.val=rtc3
tempText.txt=""
if(temp.val<10)
{
tempText.txt="0"
}
cov temp.val,TT1.txt,0
CurrentTime1.txt=CurrentTime1.txt+" "+tempText.txt+TT1.txt
temp.val=rtc4
tempText.txt=""
if(temp.val<10)
{
tempText.txt="0"
}
cov temp.val,TT1.txt,0
CurrentTime1.txt=CurrentTime1.txt+":"+tempText.txt+TT1.txt
temp.val=rtc5
tempText.txt=""
if(temp.val<10)
{
tempText.txt="0"
}
cov temp.val,TT1.txt,0
CurrentTime1.txt=CurrentTime1.txt+":"+tempText.txt+TT1.txt
if(sel.val==1)
{
t1.pco=63488
}else
{
t1.pco=65535
}
if(sel.val==2)
{
t2.pco=63488
}else
{
t2.pco=65535
}
if(sel.val==3)
{
t3.pco=63488
}else
{
t3.pco=65535
}
if(sel.val==4)
{
t4.pco=63488
}else
{
t4.pco=65535
}
if(sel.val==5)
{
t5.pco=63488
}else
{
t5.pco=65535
}
En esto hemos terminado con el panel. En principio, resultó un sistema autónomo que puede funcionar sin equipo adicional. Pero no podemos usar las respuestas del canal. Solo tenemos dos entradas libres: salidas. Aquí el arduinka vendrá al rescate.En la versión 2.2 de FLProg, se actualizó el soporte para paneles Nextion HMI. Hay nuevos bloques para ella.- Bloquear " Hacer clic en un elemento ": le permite simular un clic y soltar cualquier elemento en la pantalla del panel.
- Los bloques " Obtener el valor de la variable del sistema " y " Establecer el valor de la variable del sistema " le permiten leer y escribir los valores de casi todas las variables del sistema del panel
- El bloque " Configuración GPIO " : le permite configurar los modos de operación de E / S del panel en cualquier momento
Bueno, en esta lección (dado que todavía está más dedicado a programar el panel en sí), solo leemos el estado de los canales del temporizador (variables tsr1 - tsr5 ) y lo enviamos a los LED.Esquema del proyecto para Arduino en el programa FLProg.
Un pequeño video del funcionamiento del dispositivo (este sigue siendo un proyecto de capacitación, por lo que se ensambla de forma temporal)Aplicaciones:- Proyecto para Nextion Editor (firmware para el panel)
- Proyecto para el programa FLProg (firmware para arduino)