Короче говоря, мой Python скрипт читает последовательные данные из Arduino, обновляет список, затем печатает этот список на экране с проклятиями.
import curses
from curses import wrapper
import serial
import time
knownIds = {}
readyPrint = True
def updateData(packetData):
newId = packetData[0]
newLength = packetData[1]
newData = packetData[2]
if (newId in knownIds):
knownIdData = knownIds[newId]
knownIds[newId] = {'time': time.time(), 'count': knownIdData['count'] + 1, 'value': newData, 'newVal': knownIdData['value'] != newData}
else:
knownIds[newId] = {'time': time.time(), 'count': 1, 'value': newData, 'newVal': True}
def printData(stdscr):
global readyPrint
stdscr.addstr(0,0, 'ID COUNT: {0}'.format(len(knownIds)), curses.A_BOLD)
stdscr.addstr(1,0, '-', curses.A_BOLD)
lineCount = 2
for id in knownIds:
if (not knownIds[id]['newVal']):
stdscr.addstr(lineCount,0, '{0} {1} {2}'.format(id, knownIds[id]['count'], knownIds[id]['value']))
lineCount = lineCount + 1
stdscr.refresh()
readyPrint = True
def main(stdscr):
global readyPrint
#curses.curs_set(False)
stdscr.clear()
ser = serial.Serial('/dev/cu.usbmodem14201', 115200, timeout=1)
while True:
if (ser.readline()):
packet = ser.readline()
try:
packet = packet.decode('utf-8')
packetData = packet.split(',')
except:
return
if (len(packetData) == 3):
updateData(packetData)
if (readyPrint):
readyPrint = False
printData(stdscr)
wrapper(main)
Обе начальные строки печатаются совершенно нормально:
stdscr.addstr(0,0, 'ID COUNT: {0}'.format(len(knownIds)), curses.A_BOLD)
stdscr.addstr(1,0, '-', curses.A_BOLD)
Проблема возникает во время l oop:
for id in knownIds:
if (not knownIds[id]['newVal']):
stdscr.addstr(lineCount,0, '{0} {1} {2}'.format(id, knownIds[id]['count'], knownIds[id]['value']))
lineCount = lineCount + 1
Я попытался напечатать каждую переменную по отдельности, и это работает. Пример:
stdscr.addstr(lineCount,0, '{0}'.format(knownIds[id]['count']))
ИЛИ
stdscr.addstr(lineCount,0, str(knownIds[id]['count']))
Я просто не могу получить ничего, кроме пустых строк для печати, когда я печатаю сразу все переменные , Курсор просто прыгает вверх и вниз по окну, когда элементы добавляются и удаляются, но никогда не отображаются. При использовании функции Python print () линии печатаются полностью нормально.
Предполагаемый результат будет выглядеть примерно так:
A3D 10 80 00 00 00