python3/arduino

Zoia

Новичок
Пользователь
Май 21, 2020
4
0
1
День добрый! Никак не могу сообразить как решить такую задачку:
с Ардуино приходят данные каждые 10 секунд в виде следующей строки: ['R':547, 'G':269, 'B':288, 'C':1103, 'Lux':1.81]
Это всё характеристики цвета и освещенности.
В коде python требуется отображать в реальном времени среднее значение для каждой из характеристик 'R', 'G', 'B', 'C', 'Lux'.
Как это сделать?
Заранее благодарю за помощь!
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Вот простой пример:
Python:
import random


# словарь для хранения списков значений характеристик
data = {'R': [], 'G': [], 'B': [], 'C': [], 'Lux': []}
while True:
    # данные, которые приходят с ардуино (представил в виде словаря)
    # если они в другом виде нужно будет сначала конвертировать их в словарь
    # из вопроса не понятно что за тип у входных данных
    current_data = {'R': random.randint(100, 1000), 'G': random.randint(100, 1000), 'B': random.randint(100, 1000), 'C': random.randint(100, 1000), 'Lux': random.random()}
    
    # добавление данных в словарь
    for k, v in current_data.items():
        data[k].append(v)

    # вывод средних значений характеристик
    # с учетом новых данных
    for k, v in data.items():
        print(k, sum(v) / len(v))

    # данные обновляются каждые 10 секунд
    time.sleep(10)
 

Zoia

Новичок
Пользователь
Май 21, 2020
4
0
1
Спасибо! По типу данных учтоню: значения не случайны, они приходят с датчика освещенности, где R,G,B,C - тип int, а lux - тип float.
И подскажите как преобразовать строку в словарь, пыталась таким образом:

Python:

ser = serial.Serial("COM4", 115200, timeout=0.5)

while True:
try:
arduino = (ser.readline().decode()) # с ардуино приходит текст 'R':547, 'G':269, 'B':288, 'C':1103, 'Lux':1.81
ard = dict{arduino} # здесь пытаюсь преобразовать поступающие данные в словарь, но ничего не получается.
except:
print('not connected')
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Спасибо! По типу данных учтоню: значения не случайны, они приходят с датчика освещенности, где R,G,B,C - тип int, а lux - тип float.
И подскажите как преобразовать строку в словарь
Код вставляйте через кнопку вставить -> код -> python. Формат данных по прежнему не понятен. Вот пример перевода строки в словарь:
Python:
x = "'R':547, 'G':269, 'B':288, 'C':1103, 'Lux':1.81"

l = x.replace(',', '').replace('\'', '').replace(':', ' ').split()
current_data = {}
for i, item in enumerate(l):
    if i % 2 != 0:
        current_data[l[i - 1]] = item

print(current_data)
 
  • Я влюблен!
Реакции: Zoia

Форум IT Специалистов