在这个脚本的Main函数中,我有两个if语句,每个语句都有两个在运行之前应该满足的条件。在第一个if语句中,满足两个条件但代码未运行。下面是代码和输出。任何见解都很有价值!
$port= new-object system.io.ports.serialport com4
$port.open()
$gpi= 0
$toggle1 = 0
$toggle2 = 0
function read-com{
$port.write("gpio read 0`r")
$dump = $port.readline()
$script:gpi = $port.readline()
}
function low-com{
C:\Users\ccrcmh1djg\Videos\Reel\default.m4v
}
function high-com{
C:\Users\ccrcmh1djg\Videos\Reel\on-air.m4v
}
function main{
do{
read-com
sleep -m 500
'read-com'
$toggle1
$gpi
if(($gpi -eq 0) -and ($toggle1 -eq 0)){
$toggle1 = 1
$toggle2 = 0
low-com
'low-com conditions met'
}else{write-host 'low-com condition not met'}
$toggle1
$gpi
if(($gpi -eq 1) -and ($toggle2 -eq 0)){
$toggle1 = 0
$toggle2 = 1
high-com
'high-com conditions met'
}Else{Write-Host 'high-com condition not met'}
'loop'
}while ($port.IsOpen)
}
main
输出:
read-com
0
0
low-com condition not met
0
0
high-com condition not met
loop
谢谢!
答案 0 :(得分:0)
$ gpi可能已被$ com脚中的行更改:gpi = $ port.readline()in low-com function。
答案 1 :(得分:0)
在这种情况下,$ port.ReadLine()可能只需要根据评论中的@Adam进行清理。您可以使用另一个SO用户编写的以下函数来显示控制台中不可见的任何其他字符。
https://stackoverflow.com/a/45356836/4868262
加载该函数,然后写:
$gpi = $port.readline()
$gpi | Debug-String
一旦发现问题某些字符,请尝试使用-replace ''
删除它。