【发布时间】:2021-07-12 03:38:44
【问题描述】:
我有一个 Arduino UNO。我编写了一个脚本来控制连接到 Arduino 上 PIN 2、3、4 的灯。可以使用我的笔记本电脑关闭或打开灯:
- 0 关闭所有 LED
- 1 打开引脚 1 上的 LED
- 2 打开引脚 2 上的 LED
- 3 打开引脚 1 和 2 上的 LED
- 4 打开引脚 3 上的 LED
- 5 开启引脚 1 和 3 上的 LED
- 6 打开引脚 2 和 3 上的 LED
- 7 点亮所有 LED。
我实际上只对从我的笔记本电脑发送数据并相应地闪烁灯感兴趣。
这是我的程序:
# pragma GCC optimize ("Ofast")
# define LED1 2
# define LED2 3
# define LED3 4
char buf[4] ;
unsigned char inp, len ;
void setup() {
pinMode(LED1, OUTPUT) ;
pinMode(LED2, OUTPUT) ;
pinMode(LED3, OUTPUT) ;
Serial.begin(115200) ;
Serial.setTimeout(1) ;
}
void loop() {
if (Serial.available() > 0) {
len = Serial.readBytes(buf, 3) ;
if (len) {
buf[3] = '\0' ;
inp = atoi(buf) ;
// Illuminate LEDs
digitalWrite(LED1, 1 & inp ? HIGH : LOW) ;
digitalWrite(LED2, 2 & inp ? HIGH : LOW) ;
digitalWrite(LED3, 4 & inp ? HIGH : LOW) ;
}
}
}
当我打开 IDE 的串行监视器并写 printf 1 > /dev/ttyUSB0 时,它工作正常。
但是当我关闭串行监视器和printf 1 > /dev/ttyUSB0 时,它不起作用,我唯一得到的是板载 LED 闪烁。
所以每次我需要点亮一个 LED 时,我必须确保 IDE 是打开的。
有没有办法在不打开 IDE 的情况下从任何 Linux 计算机写入 Arduino 串行端口?
【问题讨论】:
-
Uno 在新的 USB 连接上重置。如果要发送 1,为什么要发送带有串行监视器的
printf 1 > /dev/ttyUSB0? -
您的代码正在等待 3 个字节。
printf 1发送一个字节。但是,由于您有 1ms 超时,您会收到 1 个字节。很难说buf[1]和buf[2]在这一点上包含什么。如果您只需要 3 位,那么您应该只发送和接收一个字节。 -
你试过
echo 1 > /dev/ttyUSB0吗?它添加了一个像串行监视器这样的换行符。 -- 你检查过 Uno 上的复位信号电平吗? -
您好,是的,如果我回显,它也不起作用。在回声之前,我必须这样做:
exec 3<> /dev/ttyUSB0