首页 > 编程问答 >一个简单的问题(python、串行通信和arduinos)

一个简单的问题(python、串行通信和arduinos)

时间:2024-07-22 06:29:58浏览次数:9  
标签:python serial-port pyserial

只是一个关于小脚本的快速问题,由于某种原因无法工作

我运行了这个脚本:

import serial
import time
import turtle


def serialreading():
    
    serialPort = serial.Serial(
    port="COM5", baudrate=9600, bytesize=8, timeout=2, stopbits=serial.STOPBITS_ONE
    )
    # Read data out of the buffer until a carraige return / new line is found
    serialString = serialPort.readline()
    turtlenumber = serialString.decode("Ascii")

    # Print the contents of the serial data to ASCII
    try:
        print(turtlenumber)
    except:
        pass


def roomview():
    
    t = turtle.Turtle()
    t.speed(0) # 1:slowest, 3:slow, 5:normal, 10:fast, 0:fastest
    t.forward(turtlenumber)
    time.sleep(1)
    turtle.reset()
    

while 1 > 0:
    
    serialreading()
    roomview()

乌龟的目标是简单地画一条线,只要进入串行通信的数字(其变量是海龟编号)。对于这个例子,数字应该是 1192,但我从来没有看到它的实际情况,因为 shell 告诉我“ NameError:名称'turtlenumber'未定义

请帮助我


变量“turtlenumber”的作用域有问题。在 serialreading 函数中定义它,但在 roomview 函数中试图访问它,在那里它是未定义的。

以下是修复代码的方法:

import serial
import time
import turtle


def serialreading():
    serialPort = serial.Serial(
        port="COM5", baudrate=9600, bytesize=8, timeout=2, stopbits=serial.STOPBITS_ONE
    )
    # 从缓冲区中读取数据,直到找到回车/换行符
    serialString = serialPort.readline()
    turtlenumber = serialString.decode("Ascii")

    # 将串行数据的内容打印到ASCII
    try:
        print(turtlenumber)
        return int(turtlenumber) # 返回turtlenumber
    except:
        return 0 # 返回默认值(例如,0)如果出现错误


def roomview(distance): # 将turtlenumber作为参数传递
    t = turtle.Turtle()
    t.speed(0)  # 1:最慢,3:慢,5:正常,10:快,0:最快
    t.forward(distance) # 使用传递的距离
    time.sleep(1)
    turtle.reset()


while 1 > 0:
    turtlenumber = serialreading() # 获取turtlenumber
    roomview(turtlenumber) # 将turtlenumber传递给roomview

这些变化包括:

  1. serialreading 返回 turtlenumber 我们修改 serialreading 以返回读取的 turtlenumber 值。
  2. turtlenumber 作为参数传递给 roomview 我们添加了一个参数到 roomview 以接收 turtlenumber ,并相应地修改了 while 循环以传递该值。

通过这些修改, turtlenumber 的值在两个函数之间正确共享,并且代码应该按预期工作。

标签:python,serial-port,pyserial
From: 78776437

相关文章

  • 我在 Windows 10 上运行 Python 代码后控制台立​​即关闭
    虽然我在代码末尾使用input(),但在Windows10(IDLE之外)的窗口中输入名称后,控制台仍然立即关闭,并且我看不到结果。我该怎么做才能阻止控制台关闭?#!python3name=input('Enteryourname:')print('Hello'+name)input('pressEntertoexit:')你在代码末尾......
  • 具有未定义嵌套列表深度的嵌套列表的Python注释类型
    [[1,2,3],3,[2,4],5]的类型是list[list[int]|int]但是,如果嵌套列表具有未定义的深度,例如[[[1,2]],2,[1,[3,[3]]]],3,[2,[2]]],那么它会具有什么类型?可以使用递归类型提示来表示任意深度嵌套的列表:fromtypingimportList,Union......
  • 在Spyder(Python 3.6)中导入cv2时出现导入错误
    我已经在Windows操作系统中安装了opencv3.0.0。我已运行该应用程序并已成功将其安装在C:\驱动器中,并且还将cv2.pyd文件复制到C:\Python27\Lib\site-packages中,正如我在几个教程视频中看到的那样在我的Python2.7.5Shell中,即当我键入>>>i......
  • Python + VS Code 调试器:可视化我的程序当前正在执行的源代码中的位置?
    当我使用VSCodePython调试器时:我可以执行我的程序,以便编辑器将我逐行带到源代码中的任何位置(跳转到相关文件/如果尚未打开则将其打开)目前的执行情况是?是的,VSCode的Python调试器可以让你逐行执行代码,并实时显示当前执行的位置。以下是操作方法:1.设置断点:......
  • 如何立即取消使用 Ollama Python 库生成答案的 Asyncio 任务?
    我正在使用Ollama通过OllamaPythonAPI从大型语言模型(LLM)生成答案。我想通过单击停止按钮取消响应生成。问题在于,只有当响应生成已经开始打印时,任务取消才会起作用。如果任务仍在处理并准备打印,则取消不起作用,并且无论如何都会打印响应。更具体地说,即使单击按钮后,此函数......
  • 使用 np.array 索引过滤 Python 列表
    谁能向我解释一下列表self.data如何使用numpy索引数组selec_idx进行索引/过滤?完整的课程可在https://github.com/kaidic/LDAM-DRW/blob/master/imbalance_cifar.pydefgen_imbalanced_data(self,img_num_per_cls):new_data=[]n......
  • 尝试在cmd(python)中安装turtle
    当我在cmd中编写pipinstallturtle后,这条消息出现在我面前。有人知道该怎么办吗?C:\>pipinstallturtleCollectingturtleUsingcachedturtle-0.0.2.tar.gz(11kB)ERROR:Commanderroredoutwithexitstatus1:command:'C:\Users\Bruger\App......
  • Python + Polars:如何有效地“fill_null”仅 DataFrame 的某些列?
    例如,假设我只想fill_null(strategy="zero")DataFrame的数字列。我当前的策略是这样做:final_df=df.select(cs.exclude(cs.numeric()))final_df.with_columns(df.select(cs.numeric()).fill_null(strategy="zero"))是否有替代的、更惯用或更有效的方法来实现我......
  • 如何找到 Windows 上 Python 的安装位置?
    我想找出我的Python在Windows上的安装路径。例如:C:\Python25如何找到Python的安装位置?在Windows上查找Python安装位置的方法有很多种:1.使用where命令(推荐方法):打开命令提示符(cmd)。输入以下命令并按回车键:wherepython......
  • Python Pandas:如何解析没有行结尾的 CSV
    如何解析没有行结尾的CSV文件?示例数据sep=;Id;Date;1;1980-02-29;2;1980-03-10;3;;可以使用lineterminator参数指定行终止符来解析没有行尾的CSV文件。在这种情况下,你可以将lineterminator设置为一个空字符串('')。以下是使用......