如何通过串行通信正确发送 int
How to properly send an int over serial communication
我正在尝试通过串行通信使用 python 和 arduino 来控制伺服电机,但我似乎无法找到如何将 int 值发送到 arduino。 (无法转换为字符串,因为 str 函数不支持 unicode)。
代码打开一个带有 x 轴和 y 轴的 window 并将坐标打印到屏幕上。它们都是 int 类型。如何将它们发送到 arduino 以移动伺服?
import serial
import time
import pygame
port = serial.Serial("COM3", baudrate=9600)
time.sleep(1)
WIDTH, HEIGHT = 540, 540
WIN = pygame.display.set_mode((WIDTH, HEIGHT))
Color = (255,255,255)
def main():
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
#get position x,y mouse
x, y = pygame.mouse.get_pos()
#Draw y line
pygame.draw.line(WIN, Color, (0, y), (WIDTH,y))
#Draw x line
pygame.draw.line(WIN, Color, (x, 0), (x, HEIGHT))
#Draw circle
pygame.draw.circle(WIN, (139,0,0), (x, y), 5, 0)
pygame.display.flip()
print(x,y)
WIN.fill([0,0,0])
time.sleep(0.15)
if __name__ == "__main__":
main()
和这个arduino代码
#include <Servo.h>
Servo myservo;
int x;
void setup() {
myservo.attach(9);
Serial.begin(9600);
}
void loop() {
while (Serial.available())
{
x = Serial.read();
}
}
尝试在发送前将其转换为字节
msg = bytes('1', 'utf-8')
收到后转成int
您可以像这样将整数转换为字节数组
ba = bytearray(struct.pack("i", num))
然后通过串口发送字节数组
ser.write(ba)
在 arduino 端,您现在读取字节并“构建”int 数据类型。
我正在尝试通过串行通信使用 python 和 arduino 来控制伺服电机,但我似乎无法找到如何将 int 值发送到 arduino。 (无法转换为字符串,因为 str 函数不支持 unicode)。
代码打开一个带有 x 轴和 y 轴的 window 并将坐标打印到屏幕上。它们都是 int 类型。如何将它们发送到 arduino 以移动伺服?
import serial
import time
import pygame
port = serial.Serial("COM3", baudrate=9600)
time.sleep(1)
WIDTH, HEIGHT = 540, 540
WIN = pygame.display.set_mode((WIDTH, HEIGHT))
Color = (255,255,255)
def main():
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
#get position x,y mouse
x, y = pygame.mouse.get_pos()
#Draw y line
pygame.draw.line(WIN, Color, (0, y), (WIDTH,y))
#Draw x line
pygame.draw.line(WIN, Color, (x, 0), (x, HEIGHT))
#Draw circle
pygame.draw.circle(WIN, (139,0,0), (x, y), 5, 0)
pygame.display.flip()
print(x,y)
WIN.fill([0,0,0])
time.sleep(0.15)
if __name__ == "__main__":
main()
和这个arduino代码
#include <Servo.h>
Servo myservo;
int x;
void setup() {
myservo.attach(9);
Serial.begin(9600);
}
void loop() {
while (Serial.available())
{
x = Serial.read();
}
}
尝试在发送前将其转换为字节
msg = bytes('1', 'utf-8')
收到后转成int
您可以像这样将整数转换为字节数组
ba = bytearray(struct.pack("i", num))
然后通过串口发送字节数组
ser.write(ba)
在 arduino 端,您现在读取字节并“构建”int 数据类型。