シリアルポートとの間で読み書きするプログラムを書いています。2 つのスレッドがあります。1 つのスレッドは 500 ミリ秒ごとにシリアル ポートの読み取りと書き込みを行い、もう 1 つのスレッドは 3 秒ごとにシリアル ポートに書き込みます。
私が抱えている問題は、500 ミリ秒は 3 秒、6 秒、9 秒の 3 の倍数であるため、500 ミリ秒のループがシリアル ポートからの読み取り/書き込みに失敗することです。シリアルポートが使用中かどうかを確認する方法はありますか?
counter = 0
switchRelays = DoEvery([3], 20) do
sp.write "@00 WR #{relays[counter]}\r"
counter = (counter + 1) % relays.length
end
# This thread samples every 500ms.
sp.write "@00 AI 0\r"
sleep 0.2
sample500 = DoEvery([0.5], 1.0/0.0) do |timeStamp|
if switchRelays.alive? == false
csv.close
puts 'Done'
sample500.exit
else
sleep 0.1
analogueStatus = sp.readline
sp.write "@00 AI 0\r"
end
end