我的代码需要在Arduino上使用超声波传感器,然后将数据发送到python以使用pygame创建虚拟环境,并且代码有问题
import pygame
import serial
pygame.init()
arduinoSerialData = serial.Serial('/dev/cu.usbserial-1410', 9600)
screen = pygame.display.set_mode((400, 300))
done = False
is_blue = True
x = 0
y = 115
clock = pygame.time.Clock()
##if (arduinoSerialData.inWaiting()>0):
## myData = arduinoSerialData.readline()
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
is_blue = not is_blue
pressed = pygame.key.get_pressed()
##if pressed[pygame.K_UP]: y -= 0.1
##if pressed[pygame.K_DOWN]: y += 0.1
##if pressed[pygame.K_LEFT]: x -= 0.1
##if pressed[pygame.K_RIGHT]: x += 0.1
if (arduinoSerialData.inWaiting()>0):
myDataone = arduinoSerialData.readline()
x = myDataone
screen.fill((0, 0, 0))
if is_blue: color = (0, 128, 255)
else: color = (255, 100, 0)
pygame.draw.rect(screen, color, pygame.Rect(x, y, 60, 60))
pygame.display.flip()
clock.tick(60)
当需要帮助时,提示“未定义名称'myDataone'。
答案 0 :(得分:1)
您需要定义arduinoSerialData.inWaiting() <= 0
的情况。
if arduinoSerialData.inWaiting() > 0:
myDataone = arduinoSerialData.readline()
else:
myDataone = ???
x = myDataone
但是从您的代码来看,我认为您想等到有数据在等待吗?
from time import sleep
...
while arduinoSerialData.inWaiting() <= 0:
sleep(0.2) # set this to something reasonable
myDataone = arduinoSerialData.readline()
x = myDataone
更好的解决方案might be found here