首页 > 解决方案 > 与 Arduino 的 Python 串行通信,使用用户输入闪烁内置 LED,同时读取 Arduino 信号

问题描述

我一直在为一项学校作业工作,该作业需要制作一个程序来连接 arduino 以读取名为“Ping”的 arduino 信号,同时从 python 文件读取用户输入可以切换内置 LED开启和关闭。我一直在使用这个 2 天在互联网上搜索解决方案?

作业 2:从 Arduino 读取 Ping 并从笔记本电脑打开/关闭 LED。在您的 Arduino 上运行程序“pingandled.ino”。使用教程https://petrimaki.com/2013/04/28/reading-arduino-serial-ports-in-windows-7/ 编写一个程序 (.py) 从串行总线读取 Ping 并同时使可以从 PC 上打开/关闭 Arduino 上的默认 LED(引脚 13)。如果您的程序在等待打开或关闭 LED 的命令时阻止读取 Pnig,这是不正确的。阅读 Ping 应始终继续!!!!使用互联网寻找解决方案。

我们有一个不允许更改的 arduino 代码。

enter code here: int incomingByte = 0;
int ledPin = 13;

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}

int counter = 0;
void loop() {
// put your main code here, to run repeatedly:
if (Serial.available() == 0 and counter == 0)
{
Serial.print("Ping");
delay(10);
counter++;
}
else
{
incomingByte = Serial.read();

// say what you got:
if (incomingByte == 49) { // ASCII printable characters: 49 means number 1
  digitalWrite(ledPin, HIGH);
} else if (incomingByte == 48) { // ASCII printable characters: 48 means number 0
  digitalWrite(ledPin, LOW);
}
delay(10);
if (counter < 100)
{
  counter ++;
}
else
{
  counter = 0;
}
}
}

我有一个 python 代码,它有 2 个函数,一个用于读取 arduino 信号,一个用于打开和关闭 LED。如果我单独调用这些函数,它可以工作,但我需要一个代码在一个while循环中同时执行这两个函数。输出就像:不断地从arduino打印数据,同时我需要输入一个输入,输入1或0来切换led ping

enter code here: import serial
import time
s = serial.Serial("COM3", 9600, timeout=0)
def blink():
data = s.readline()
data = data.decode()
print(data)
time.sleep(1)
def aan():
var = input()
var = var.encode()
var = s.write(var)

while 1:

标签: pythonarduinopyserialblockingled

解决方案


没关系。我找到了解决方案!我使用了库线程中的线程。

蟒蛇代码:

导入序列号

进口时间

从线程导入线程

s = serial.Serial("COM3", 9600, timeout=0)

定义闪烁():

而1:

数据 = s.readline()

ping = data.decode()

打印(平)

时间.sleep(1)

定义 aan():

而1:

变量 = 输入()

s.write(var.encode())

如果名称== '主要':

线程(目标 = 闪烁).start()

线程(目标 = aan).start()


推荐阅读