首页 > 解决方案 > 为什么我的 Arduino Uno 的 pyserial 给出的值在添加代码后现在卡住了?

问题描述

我正在尝试将来自 Arduino Uno 的光传感器数据存储在 .csv 文件中。起初我使用 pyserial 建立连接,使用以下代码确实有效:

import serial

ser = serial.Serial('COM3', baudrate=9600, timeout=1)

while 1:
    arduinoData = ser.readline().decode('ascii')
    print(arduinoData)

光传感器放置在一个暗箱中,因此您不断获得 1.00 勒克斯作为值。然而,如果你打开那个盒子里的光源,你会得到数据在 2400 到 2500 勒克斯之间波动。几乎是你所期望的。Arduino IDE 中的串行绘图仪给出相同的值。

之后,我继续编写用于获取时间戳、将数据存储在 .csv 文件中并绘制图形的代码:

import serial, time, pandas as pd, plotly.express as px
from datetime import datetime

try:
    COM3 = serial.Serial('COM3', baudrate=9600, timeout=1)
    print("Zum speichern der Daten COM3 entfernen")
    dataFile = open('DataLog.csv', 'w')
    dataFile.write('Zeit,Wert\r')
    arduinoData = COM3.readline().decode('ascii')
except:
    print("Es besteht keine Verbindung zu COM3")
    quit()

while 1:
    try:
        currentTime = datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
        arduinoData = COM3.readline().decode('ascii')

        dataFile.write(currentTime)
        dataFile.write(',')
        arduinoData = arduinoData.replace("\r\n", "")
        dataFile.write(arduinoData)
        dataFile.write('\r')

        print(arduinoData)
        time.sleep(0.1)
    except:
        dataFile.close()
        print("COM3 entfernt, Daten gespeichert")

        df = pd.read_csv('DataLog.csv')
        fig = px.line(df, x='Zeit', y='Wert', title='Messwerte')
        fig.show()

        quit()

我现在尝试记录一些数据,但现在即使您打开灯,该值仍保持在 1.00 勒克斯。它没有效果。当您第一次打开光源,然后运行程序时,您会再次获得在 2400 和 2500 勒克斯之间波动的值。但是,更奇怪的是,当你关掉灯时,这种情况还会继续。尽管灯被关闭,你仍然会得到波动的值。

由于 Arduino 似乎为 Arduino IDE 和第一个 python 代码提供了正确的值,我想它必须对我的 python 程序做一些事情;但我不知道出了什么问题。任何帮助将非常感激。

标签: pythonarduinopyserial

解决方案


推荐阅读