【问题标题】:If statement conditions met but not running如果语句条件满足但未运行
【发布时间】: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


【解决方案1】:

在这种情况下,$port.ReadLine() 可能只需要按照 cmets 中的 @Adam 进行一些清理。您可以使用其他 SO 用户编写的以下函数来显示控制台中不可见的任何其他字符。

https://stackoverflow.com/a/45356836/4868262

加载函数,然后编写:

$gpi = $port.readline()
$gpi | Debug-String

一旦您发现某个字符的问题,请尝试使用-replace '' 将其删除。

【讨论】:

  • 'r0 是 Debug-String 的输出。不错的功能。我不熟悉-replace。您将如何删除无关的 'r 字符?
  • $gpi -replace "`r", ''
【解决方案2】:

$gpi 可能已经被 low-com 函数中的 $script:gpi = $port.readline() 行改变了。

【讨论】:

    猜你喜欢
    • 2018-01-16
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多