gpt4 book ai didi

python - Arduino 和 python3 串行通信问题

转载 作者:太空宇宙 更新时间:2023-11-03 13:56:16 25 4
gpt4 key购买 nike

我在将 python 代码中的串行字节写入 arduino 时遇到一些问题。python 代码必须将 arduino 接收到的数字写入串行端口。

Python3代码:

import serial
import time
ser = serial.Serial ('/dev/ttyACM0',)
ser.baudrate = 115200
ser.write(str(3).encode()) #or (b'3')
ser.write(str('\n').encode())

Arduino 代码:

void setup(){
Serial.begin (115200); //Comunicazione seriale 115200 bit
servomotore.attach(3);
pinMode(2,OUTPUT);
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
digitalWrite(2,HIGH);
digitalWrite(12,HIGH);
servomotore.write(180);
}
/*Il loop comprende due funzioni; sensori e Mappa, attivate ogni 15 gradi di movimento del servomotore,
sensori rileva le distanze, Mappa invia i valori al seriale, ogni ciclo del radar produce 24 valori in centimetri*/
void loop() {
char buffer[] = {' ',' '};
if (Serial.available() > 0) {


Serial.readBytesUntil('n', buffer, 2);
int incremento = atoi(buffer);

如果我运行此代码,我看不到输出,没有错误或打印,我需要使用 ctrl+c 退出。 Arduino 没有收到任何信息。Arduino代码较长,这是我目前唯一无法理解的部分,它只是最复杂项目的一部分

最佳答案

我无法重现您的问题。这是我测试的方法。在 Arduino Uno 上设置以下程序:

void setup()
{
Serial.begin(115200);
Serial.println(F("Serial test"));
}

char buffer[80] = { 0 };

void loop()
{
if (Serial.available() > 0)
{
Serial.readBytesUntil('\n', buffer, sizeof(buffer));
Serial.print(F("read: ["));
Serial.print(buffer);
Serial.println("]");
memset(buffer, 0, sizeof(buffer));
}
}

以下 python3 脚本成功读取和写入此 Arduino 固件:

#!/usr/bin/env python3

import sys
from serial import Serial

def main():
ser = Serial('/dev/ttyACM0',)
ser.baudrate = 115200

print(ser.readline())

ser.write(str(3).encode())
ser.write(str('\n').encode())

print(ser.readline())
return 0

if __name__ == '__main__':
sys.exit(main())

设备编程并插入后,我会得到以下输出:

~ $ python3 so-check-serial.py 
b'Serial test\r\n'
b'read: [3]\r\n'

基于串行输入的替代中断

我想补充一点,我通常不会在 Arduino 中编写这样的串行处理程序。下面使用串行中断来缓冲输入并在该行被完全读取时设置一个标志。在这个例子中,我们可以等待或做其他事情,直到接收到整行(即:在正确的时间保持闪烁):

#include <Arduino.h>

volatile String buffer;
volatile bool inputComplete = false;

void serialEvent()
{
while (Serial.available())
{
char c = (char)Serial.read();
if (c == '\n')
inputComplete = true;
else
buffer += c;
}
}
void setup()
{
Serial.begin(115200);
Serial.println(F("Serial test"));
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
}

void loop()
{
if (inputComplete) {
inputComplete = false;
Serial.println(buffer.c_str());
buffer = "";
}
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
delay(500);
}

关于python - Arduino 和 python3 串行通信问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49581416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com