gpt4 book ai didi

python - pySerial 程序停止正常工作

转载 作者:太空宇宙 更新时间:2023-11-03 17:04:27 24 4
gpt4 key购买 nike

我一直在摆弄我的 Arduino,正在创建一个在 LCD 屏幕上显示推文的程序。不幸的是,我编写的用于检索和发送推文的 python 程序似乎在一分钟或更短的时间内停止工作。然后,它会停止将任何输出打印到控制台,并且每次更新时仅在 Arduino 上显示一个字符。

我假设这是与串行相关的代码的问题,因为如果我删除与 Twitter 相关的所有内容,它会遇到相同的问题。如果我从 Arduino IDE 中的串行监视器发送输入,Arduino 代码可以正常工作,所以我认为我在这方面也很擅长。

下面是我的代码,任何帮助将不胜感激。

import serial
import tweepy
import time

ser = serial.Serial("COM3", 9600)

auth = tweepy.OAuthHandler("authstuff")
auth.set_access_token("accessstuff")

api = tweepy.API(auth)


def find_tweet():
public_tweets = api.user_timeline("duderitsover")
tweet = public_tweets[0].user.screen_name + ": " + public_tweets[0].text
print tweet
ser.write(tweet.encode('ascii'))



while True:
print "in loop"
find_tweet()
time.sleep(4)

还有 Arduino 代码,以防万一(抱歉,这是一团糟)

#include <LiquidCrystal.h>
#include <String.h>

LiquidCrystal lcd(2, 3, 4, 8, 9, 10, 11);
String long_string = "Long sting long string longer string long string this string is very long";
String data;
String temp_data;

String read_input;
unsigned long current_time;
unsigned long led_delay = 0;
bool has_updated = false;


int dial_position;



void setup() {
Serial.begin(9600);
lcd.begin(16,2);
pinMode(5, OUTPUT);
digitalWrite(5, HIGH);

}

void loop() {
current_time = millis();

if (led_delay < current_time) {
digitalWrite(5, LOW);
has_updated = false;
}

Serial.println(analogRead(A0));
dial_position = analogRead(A0) / 10;

if (read_input != "" && read_input != long_string) {
long_string = read_input;
has_updated = true;
}

if (dial_position < 10) {
temp_data = long_string.substring(0, 33);
}
else if (dial_position < 20) {
temp_data = long_string.substring(33, 65);
}
else if (dial_position < 30) {
temp_data = long_string.substring(65, 97);
}
else if (dial_position < 50) {
temp_data = long_string.substring(65 + 32, 97 + 32);
}
else if (dial_position < 60) {
temp_data = long_string.substring(65 + 64 + 32, 97 + 64 + 32);
}
else if (dial_position < 70) {
temp_data = long_string.substring(65 + 64 + 64, 97 + 64 + 64);
}
else if (dial_position < 80) {
temp_data = long_string.substring(65 + 128 + 32, 97 + 128 + 32);
}
else if (dial_position < 90) {
temp_data = long_string.substring(65 + 128 + 64, 97 + 128 + 64);
}
else if (dial_position < 100) {
temp_data = long_string.substring(65 + 128 + 96, 97 + 128 + 96);
}

if (temp_data != data && temp_data != "") {
data = temp_data;

if (temp_data.length() > 16) {
lcd.clear();
lcd.print(data.substring(0, 16));
lcd.setCursor(0, 1);
lcd.print(data.substring(16, 33));
}
else {
lcd.clear();
lcd.print(data);
}

}
}

void serialEvent(){
read_input = Serial.readString();
Serial.println("UPDATING");
digitalWrite(5, HIGH);
led_delay = current_time + 2000;
}

最佳答案

每隔几次循环运行就使用 Serial.reset_input_buffer() 命令解决了该问题,不确定它的功能是否是正确的方法。

关于python - pySerial 程序停止正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34713094/

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