我有一个Arduino Pro Mini(5V)连接到I2C上,它有2个分压器和连接到模拟引脚的10k旋钮式电位计,以获得每个引脚的电压。我正在使用ArduinoJson
创建一个Json对象,它可以通过串行方式发送到Python程序。你知道吗
Arduino代码非常简单。你知道吗
#include <ArduinoJson.h>
#define pot A0
#define volt1_pin A1
#define volt2_pin A2
float resist1 = 220000;
float resist2 = 1e4;
float sensor_max = (5 * resist1 + 5 * resist2) / resist2;
float volt1, volt2;
int pot_val;
const size_t cap = JSON_OBJECT_SIZE(10);
DynamicJsonDocument output(cap);
void setup() {
pinMode(volt1_pin, INPUT);
pinMode(volt2_pin, INPUT);
pinMode(pot, INPUT);
Serial.begin(9600);
}
void loop() {
volt1 = analogRead(volt1_pin) * sensor_max / 1024;
volt2 = analogRead(volt2_pin) * sensor_max / 1024;
pot_val = analogRead(pot);
pot_val = map(pot_val, 0, 1023, 0.0, 100.0);
output["volt1"] = volt1;
output["volt2"] = volt2;
output["pot"] = pot_val;
serializeJson(output, Serial);
Serial.println();
}
Python代码也很简单。你知道吗
import serial
import time
import logging
logging.basicConfig(level = logging.DEBUG, format = ' %(name)s %(message)s')
class Board():
def __init__(self):
self.board = serial.Serial()
self._cached = {
'volt1': 0,
'volt2': 0,
'pot': 0,
'port': ''
}
def open(self, port, baud = 9600):
self.board.port = port
self.board.baud = baud
self.board.timeout = 0
self.board.open()
if self.board.is_open:
self.board.readline()
logging.info('Successful Connection to Port: {}'.format(self.board.name))
return True
else:
logging.debug('Unsuccessful Connection to Port: {}'.format(port))
return False
def read(self):
output = self.board.readline()
output = output.decode('utf-8').strip('\r\n')
print(output)
def close(self):
logging.info('Closing EDM Port: {}'.format(self.board.name))
self.board.close()
if __name__ == '__main__':
board = Board()
if board.open('COM5'):
while True:
print(board.read())
time.sleep(1)
board.close()
一切正常,但是当我移动pot旋钮时,Python程序中的输出不会读取实时值。但是在Arduino串行监视器中运行这个,我可以看到我实时移动罐子。你知道吗
我不知道为什么我在Python中看不到实时值,为什么我在串行监视器中看到它。我已经调整了波特率,我试过self.board.read()
而不是self.board.readline()
,但都不起作用。我尝试使用线程,甚至在Python中使用asyncio
。我甚至试过去掉ArduinoJson
,只在Arduino端使用常规的Serial.print()
。你知道吗
有没有人能提出解决问题的建议?我对此束手无策。谢谢大家。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐