python-3.x - 使用 Python 和 Arduino 通过串行更改灯泡的延迟
问题描述
我在 Windows 10 64 位上使用 Arduino Mega 和 python 3.7。我正在尝试使用 python 和 pyserial 使灯泡闪烁。我希望灯泡保持点亮一段时间并关闭一段时间。我在 python Tkinter 程序中输入值:https ://pastebin.com/zkRmcP60完整代码。在我输入通过此代码发送到 Arduino 的值之后:
import msgpack
import serial
arduionoData = serial.Serial('com3', 9600, timeout=1)
def sendlower(*args):
try:
global arduionoData
arduionoData.write(b"1")
while arduionoData.readline().decode() != "Send Next":
pass
first = int(firstdelay.get())
arduionoData.write(msgpack.packb(first, use_bin_type=True))
except ValueError:
print("Only Positive Integers")
def senduppper(*args):
try:
global arduionoData
arduionoData.write(b"2")
while arduionoData.readline().decode() != "Send Next":
pass
second = int(seconddelay.get())
arduionoData.write(msgpack.packb(second, use_bin_type=True))
except ValueError:
print("Only Positive Integers")
Tkinter 程序执行上面的函数访问 Pastebin 以获取整个代码。
首先,我指定模式,或者它是否会改变开启延迟或关闭延迟。使用此代码(省略设置和其他代码,请在粘贴箱中查找。)
void readdelay(){
mode = Serial.parseInt();
if (mode == 1){
delay(200);
Serial.write("Send Next");
delay1 = Serial.parseInt();
}else if (mode == 2){
delay(200);
Serial.write("Send Next");
delay2 = Serial.parseInt();
}
}
void loop() {
if (Serial.available() > 0){
readdelay();
}
}
现在,如果我将任何正数发送到程序中,它要么完全关闭(当我发送一个用于开启延迟的数字时),要么将它打开(当我发送一个用于关闭延迟的数字时)。我的猜测是,每当Serial.parseInt();
函数获得错误类型的输入时,它都会将其解释为零。
解决方案
推荐阅读
- c# - 整个 Windows 桌面的实时视频处理
- corda - Corda self ISSUE flow 无需公证
- swiftui - 如何确定 SwiftUI 视图的帧大小
- php - Elastic Beanstalk 未连接到 Amazon DynamoDB
- laravel - 我可以在策略中记录数据吗?
- c# - Swashbuckle 将 Type 替换为其他 Type
- git - 如何在 git pull 中处理多应用程序?
- c# - 如何使用 WPF-DataGrid 向 Fluent-nHibernate-Data 添加新行?
- c# - C#在文件中写入文本的非常奇怪的行为
- javascript - 从网址下载文件?