【发布时间】:2018-05-10 17:58:06
【问题描述】:
在此脚本的 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
谢谢!
【问题讨论】:
-
也许是因为缩进,但我看不出你实际调用 main 的位置。
-
另外,这看起来像是minimal reproducible example 会有所帮助的情况。事实上,我怀疑您会在尝试创建问题时解决您的问题。
-
如果你从读入
gpi的端口得到一个不可见的字符,我会很高兴。例如,$foo = "1`t"; echo $foo; echo ($foo -eq 1)看起来像 1 但不是。 -
我认为你是正确的@Adam。当我手动设置 $GPI=1 时,它可以工作。那么我将如何标准化变量呢?
-
@Dan 这是百万美元的问题。在不知道哪个角色可能是你的罪魁祸首的情况下,它很难。您可以使用
$foo -match 1来伪造它。您可以尝试替换$foo -replace '[^\x00-\x7f]'以删除 ASCII 127 上的任何内容。但至少您现在知道该变量不是您想的那样。
标签: powershell