ITEAD推出了其下一代HMI面板的新增强系列 该公司的代表向我提供了此行的副本,用于将新的面板功能集成到FLProg程序中。在2.2版中,已实现。在本课程中,我们将考虑面板的新功能,例如,为五个通道创建一个可编程计时器。首先,请考虑面板的特性。增强型线具有内置的实时时钟,1024字节的非易失性存储器,8个数字输入/输出。它们每个都可以配置为输入或输出。可以将其中四个(从第4到第7)配置为PWM输出。
除了Nextion HMI Enhanced系列本身以外,还发布了扩展板,
它的GPIO面板上附有控件和显示。
这样的机会允许基于该面板制造几乎完整的设备。在本课程中,我将专注于对面板本身进行编程,因为关于此主题的信息很少,但是有很多陷阱。帖子的结尾是指向Nextion Editor程序项目的链接。在我以前的文章tyts,tyts和tyts中讨论了Nextion Editor的工作开始,启动,编码的初始选择,面板类型。因此,我们将不再赘述。该计划包括三个面板主屏幕(的主),设置定时器(的SetTimer)和时间设定(SetCurrentTime)。让我们从主屏幕开始。
该屏幕显示用于打开,关闭,每个通道的状态,用于更改通道状态的按钮以及用于切换到用于设置当前时间的屏幕的按钮的设置。当单击显示通道设置的文本时,将转到该通道的设置。此外,在此屏幕上,需要四个隐藏按钮来绑定到扩展板上的物理按钮。。
考虑主屏幕上包含的代码。事件Preinitialilize事件(屏幕初始化之前调用)。cfgpio 0,1,b0
cfgpio 2,1,b8
cfgpio 3,1,b7
cfgpio 4,1,b6
cfgpio 5,1,b9
SelTim.val=1
在这里,我们将扩展板上的物理按钮绑定到屏幕上的虚拟按钮。有关cfgpio命令的更多信息-设置面板的物理输入和输出(仅增强型面板具有此命令)。:
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
|
事件触按事件按钮B0 - «设置时间»page 2
这都是不言自明的事件触按事件按钮B1 -第一个通道的«开关状态”repo TempB.val,0
if(TempB.val==1)
{
if(tsr1.val==1)
{
tsr1.val=2
}else
{
tsr1.val=1
}
}
首先,我们从EEPROM读取通道活动。可以在“频道设置”页面上关闭每个频道的工作。repo命令“从EEPROM读取”将在下面详细讨论。然后,如果通道处于活动状态,请切换其状态。通道的当前状态分别存储在每个通道的变量tsr1-tsr5中。if else表达式语法中的功能if(TempB.val==1) – .
. .
}else
, . , else , .
对于其余用于更改通道状态的按钮(b2-b5),触摸按键事件代码相同。仅更改EEPROM中的地址和通道状态变量。事件触按事件按钮B6 - «选择前一个频道“。该按钮不可见。渲染模式(sta)- 裁剪图像 (裁剪图像)。作为处于未按下状态(picc)和按下状态(picc2)的图片,选择窗口的背景图像。因此,该按钮不显示,但可以使用。此屏幕上的此按钮与扩展板上的物理向上(IO4)按钮相关联。if(SelTim.val<2)
{
SelTim.val=5
}else
{
SelTim.val=SelTim.val-1
}
SelTim
变量包含当前选择的计时器的编号。我认为,从评论中可以清楚地看到其他所有内容。
事件触按事件按钮B7 - «选择下一个通道“。该按钮不可见。此屏幕上的此按钮与扩展板上的物理向下(IO3)按钮相关联。 if(SelTim.val>4)
{
SelTim.val=1
}else
{
SelTim.val=SelTim.val+1
}
在这里,我认为同样的事情很清楚。事件触按事件按钮B8 - «编辑所选通道“。该按钮不可见。此屏幕上的此按钮与扩展板上的Right Right按钮(IO2)绑定。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
}
单击命令详细信息-模拟单击或释放元素:
click cmpID,event
:
cmpID: ID .
event: 0 – ; 1 –
. click .
事件触按事件按钮B9 - «所选通道的开关状态“。该按钮不可见。该屏幕上的此按钮与扩展板上的物理左侧按钮(IO5)绑定在一起。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
}
TimerText1文本框
的Touch Press Event是“显示通道1状态”。sys0=1
sys1=1
page 1
对于其他文本字段(TimerText2-TimerText5),Touch Press Event代码是相同的。仅在sys0系统变量中输入相应的通道号。sys0,sys1,sys2是不需要创建或定义的全局数字变量。它们可以在任何屏幕上使用。这三个变量的默认值为0,它们可以读写,它们的值范围为0〜4294967295。建议在页面之间传递值。在此屏幕上设置了tm0计时器。此计时器每200毫秒触发一次(tim参数),则该页面处于活动状态。用于监视计时器状态并在页面上重绘组件的代码位于此计时器的“ 计时器事件”中。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=""
}
for表达式语法中的功能for(n0.val=0; n0.val<100; n0.val++) — .
. .
阅读有关cov命令的更多信息-字符串和数字数据之间的转换。:
cov att1,att2,lenth
:
att1:
att2:
lenth: ( 0 – )
:
cov number.val,text.txt,0
number text.
cov text.txt,number.val,5
text.
. cov .
考虑数据在EEPROM面板中的位置。每个通道分配52个字节。对于每个值-4个字节。EEPROM地址 起始偏移量 =(通道号从0开始)* 52
| 价值 |
---|
开始偏移 | 通道活动(0-禁用通道,1-启用通道) |
起始偏移量 + 4 | 频道收录日。如果不考虑-10,000 |
起始偏移量 + 8 | 频道收录月份。如果不考虑-10,000 |
起始偏移量 + 12 | . — 10000 |
+ 16 | . — 10000 |
+ 20 | . -10000 |
+ 24 | . – 10000 |
+ 28 | . — 10000 |
+ 32 | . – 10000 |
+ 36 | . -10000 |
+ 40 | . -10000 |
+ 44 | . -10000 |
+ 48 | 频道关闭第二。如果不考虑-10000 |
从主屏幕完成后,移动到屏幕上,定时器设置(的SetTimer ID = 1)
的事件Preinitialilize事件(屏幕被初始化之前被调用)。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
在这里,我们重新定义了扩展板上的物理按钮到此屏幕需求的绑定,并预读了数据。事件触按事件按钮B0 - «转到下一个领域“。该按钮不可见。此屏幕上的此按钮与扩展板上的Right Right按钮(IO2)绑定。if(sys1>11)
{
sys1=1
}else
{
sys1=sys1+1
}
事件触按事件按钮B1 - «转到先前场“。该按钮不可见。该屏幕上的此按钮与扩展板上的物理左侧按钮(IO5)绑定在一起。if(sys1<2)
{
sys1=12
}else
{
sys1=sys1-1
}
事件触按事件按钮B2 - “激活/停用信道”或“退出”(保持2秒)。该按钮不可见。此屏幕上的此按钮与扩展板上的物理Esc按钮(IO0)绑定。tm1.en=1
在这里,我们启动辅助计时器。如果按物理按键Esc键(IO0)的扩展板 2秒(财产添 定时器),缩编发生定时器(事件调用计时器事件定时器TM1),如果按钮事件之前发布是由于触摸释放事件按钮B2tm1.en=0
if(Enable.val==1)
{
Enable.val=0
}else
{
Enable.val=1
}
事件计时器事件计时器TM1 click b11,1 // b11 ("")
事件触按事件按钮,一个BYE - «在选定字段的操作”启用/禁用注册表。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
了解有关wepo命令的更多信息-写入EEPROM和回购-从EEPROM读取(仅增强型面板具有这些命令)。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 .
事件触按事件按钮BYP - «加1到选定字段“。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
}
}
事件触按事件按钮BYM - «减去1从所选择的领域“。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
}
}
事件触按事件按钮B11 - «返回到主页“。wepo Enable.val,StAddr.val
sys0=0
sys1=0
page 0
事件触按事件的文本框中的startd -启动值的«日“。sys1=1
对于具有其他设置的文本字段,Touch Press Event代码与字段编号相同。设置值字段的编号为:StartMo -2(“操作设定点的月份”)。StartY -3(“设定点行程的年份”)。StartH -4(“运行设置的小时数”)。StartMi -5(“运行分钟设定值”)。StartS -6(“操作设定值的第二个”)。StopD -7(“行程天数”)。StopMo -8(“行程月份设置”)。StopY -9(“行程设置的年份”)。StopH -10(“行程设置”)。斯托米-11(“分钟行程设置”)。StopS -12(“第二跳闸设定点”)。在此屏幕上还设置了tm0定时器,其跳闸时间为200毫秒。在此计时器的计时器事件中,将更新设置字段的值。剧透下的代码
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
}
有关vis命令的更多信息-更改元素可见性:
vis obj,state
:
obj: ID .
state: 1- , 0 –
. vis .
完成频道设置屏幕后,转到当前时间设置屏幕(SetCurrentTime ID = 2)。
在此,与“ 预初始化事件”中的其他屏幕一样(在屏幕初始化之前调用),我们将物理按钮重新绑定到该屏幕上的虚拟按钮。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
事件触按事件按钮B0 - «添加到当前的一天的时间。”if(rtc2<31)
{
rtc2=rtc2+1
}
事件触按事件按钮B2 - «添加一个月当前时间“。if(rtc1<12)
{
rtc1=rtc1+1
}
事件触按事件按钮B4 - «年添加到当前的时间。”rtc0=rtc0+1
事件触按事件按钮B6 - «一个小时添加到当前的时间。” if(rtc3<23)
{
rtc3=rtc3+1
}
事件触按事件按钮B8 - «添加到时间的当前时刻“。if(rtc4<59)
{
rtc4=rtc4+1
}
事件触按事件按钮B1 - «从当前时间带走的一天。”if(rtc2>1)
{
rtc2=rtc2-1
}
事件触按事件按钮B3 - «带走的当前时间的最后一个月“。if(rtc1>1)
{
rtc1=rtc1-1
}
按钮b5
的触摸按下事件为“从当前时间减去年份”。if(rtc0>2016)
{
rtc0=rtc0-1
}
按钮b7
的触摸按下事件是“从当前时间减去一个小时。”if(rtc3>0)
{
rtc3=rtc3-1
}
事件触按事件按钮B9 - «带走的当前时间的分钟“。if(rtc4>0)
{
rtc4=rtc4-1
}
按钮b10
的触摸按下事件为“将秒数设置为0”。rtc5=0
事件触按事件按钮B11 - «退出»。page 0
事件触按事件按钮B12 - «转到先前场“。该按钮不可见。此屏幕上的此按钮与扩展板上的物理向上(IO4)按钮相关联。if(sel.val<2)
{
sel.val=5
}else
{
sel.val=sel.val-1
}
事件触按事件按钮B13 - «转到下一个领域“。该按钮不可见。此屏幕上的此按钮与扩展板上的物理向下(IO3)按钮相关联。if(sel.val>4)
{
sel.val=1
}else
{
sel.val=sel.val+1
}
事件触按事件按钮B14 - «加1到所选择的字段的值“。该按钮不可见。此屏幕上的此按钮与扩展板上的Right Right按钮(IO2)绑定。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
}
事件触摸释放事件按钮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
}
事件触按事件按钮B15 - «减去1从所选字段的值” 该按钮不可见。该屏幕上的此按钮与扩展板上的物理左侧按钮(IO5)绑定在一起。 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
}
事件触摸释放事件按钮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
}
嗯,和其他窗口一样,在此窗口中将tm0计时器设置为200毫秒的响应时间。在此计时器的计时器事件中,将更新文本字段的值。剧透下的代码
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
}
在此,我们完成了面板。原则上,它证明了一个自治系统,无需额外的设备即可工作。但是我们无法使用频道回复。我们只有两个免费的入口-出口。在这里,arduinka将进行救援。在FLProg的2.2版中,对Nextion HMI面板的支持已更新。她有新的障碍。- 阻止“ 单击项目 ”-允许您模拟单击并释放面板屏幕上的任何项目。
- “ 获取系统变量的值 ”和“ 设置系统变量的值 ” 块允许您读取和写入面板上几乎所有系统变量的值
- “ GPIO设置 ”块-允许您随时配置面板I / O操作模式
好吧,在本课程中(由于它仍然更加致力于面板本身的编程),我们仅读取计时器通道的状态(变量tsr1-tsr5)并将其输出到LED。FLProg程序中Arduino的项目大纲。
设备操作的一小段视频(这仍是培训项目,因此是暂时组装的)应用范围:- Nextion Editor的项目(面板的固件)
- FLProg程序的项目(用于arduino的固件)