最近、ArduinoとIRリモートを使用してメディアプレーヤーを制御するプロジェクトを作成し、PC上で動作するPowerScriptを使用してArduinoの情報をシリアルポート経由で受信しました。ArduinoはPowerShellスクリプトを使ってPCと通信します
問題は、Arduinoから何らかの入力があった場合にのみ何かをするためにPowerShellをスクリプト化する方法です。今はPowerShellスクリプトの遅延を伴うループがあり、コードが実行されるたびにArduinoからの入力があるかどうかを読み取り、チェックします。しかし、Arduinoが何かを送ったときだけ待つのではなく、PowerShellスクリプトを起動するにはどうすればいいですか?あなたは、.NETライブラリを使用することによって、私はGPIOデバイスとしてのArduinoと通信するためのPowerShellイベントドリブンインターフェースの例を働いているArduinoの上の固体と呼ばれるFirmataプロトコルを使用している場合
$console = $host.UI.RawUI
$console.BackgroundColor = "darkgreen"
$console.ForegroundColor = "black"
$size = $console.WindowSize
$size.Width = 15
$size.Height = 2
$console.WindowSize = $size
$buffer = $console.BufferSize
$buffer.Width = 15
$buffer.Height = 2
$console.BufferSize = $buffer
Write-Host "PC Media Remote"
function IRinputText {
Param([string]$serialread,[string]$combo,[string]$key)
Process{If ($IRbuffer -like ("*"+$serialread)) {IRbufferReset;$wshell.SendKeys($combo+"{"+$key+"}")}}
}
function IRinputHEX {
Param([string]$serialread,[string]$key)
Process{If ($IRbuffer -like ("*"+$serialread)) {IRbufferReset;$wshell.SendKeys([char]+$key)}}
}
function IRbufferReset {
$Script:IRbuffer=""
$Script:IRbuffer= $Script:IRbuffer.PadLeft(15,'0')
}
IRbufferReset
$port= new-Object System.IO.Ports.SerialPort COM4,9600,None,8,one
$wshell = New-Object -ComObject wscript.shell;
$port.open()
while($true)
{
$inputvar= $port.ReadExisting() -replace "`n","" -replace "`r",""
If(($inputvar -ne "")){
$IRbuffer= If($IRbuffer.Length -ge $inputvar.Length){$IRbuffer.Substring($inputvar.Length) }
$IRbuffer= $IRbuffer + $inputvar
}
If($IRbuffer.Length -gt 15){$IRbuffer= $IRbuffer.Substring($IRbuffer.Length - 15);}
IRinputText -serialread "CH+" -combo "^" -key "UP"
IRinputText -serialread "CH-" -combo "^" -key "DOWN"
IRinputText -serialread "100+" -combo "^" -key "LEFT"
IRinputText -serialread "200+" -combo "^" -key "RIGHT"
IRinputText -serialread "CH" -key "f"
IRinputHEX -serialread "VOL+" -key "0xAF"
IRinputHEX -serialread "VOL-" -key "0xAE"
IRinputHEX -serialread "PLAY/PAUSE" -key "0xB3"
IRinputHEX -serialread "PREV" -key "0xB1"
IRinputHEX -serialread "NEXT" -key "0xB0"
IRinputHEX -serialread "EQ" -key "0xAD"
If ($IRbuffer -like ("*1532")) {IRbufferReset;Stop-Computer}
Start-Sleep -m 20
}
あなたは番目によって公開されDataReceivedイベントハンドラにPowerShellをsubscripeすることができますe SerialPortクラス。 (私のArduinosでそれをやっているのです) – bluuf
@bluufもう少し詳しく説明できますか?私はPowerShellの初心者です。ありがとう! – raulx222