Массив и matplotlib в Python - PullRequest
       4

Массив и matplotlib в Python

0 голосов
/ 26 октября 2018

Python newbie здесь.

В настоящее время я делаю детектор сигналов сердцебиения с Arduino для моего школьного проекта.

Я хочу нарисовать график плоттера с отправленным мною значением сигналаиз Arduino в Python, но я до сих пор не уверен, какой именно способ сделать правильный массив и построить его на Python.

Мой arduino связан с модулем Bluetooth, и он непрерывно отправляет двойное целое значение около 30 ~40 раз в секунду.

В Python я хочу написать скрипт, который получит 20 секунд данных, сохранит их в файле и построит график.

Я построил свой код на основемои базовые знания C.

import serial, sys
from time import sleep
import time
import matplotlib.pyplot as plt

def read_BLE( ser ):
  msg = ""
  if( ser.in_waiting > 0 ):
        msg = ser.readline( ser.in_waiting ).decode('utf-8')
  return msg

with serial.Serial(port='COM7', baudrate=9600, timeout=1) as ser:
 while(True) :


  max_time = int(input('20'))     #limit time : 20seconds
  start_time = time.time()  # remember when we started

  while (time.time() - start_time) < max_time:   
    values = []
    currenttime = []
    i,j=0

    currenttime[i] = (time.time() - start_time)
    values[j] = read_BLE( ser )
                    i += 1
                    j += 1


plt.plot(currenttime, values)

1 Ответ

0 голосов
/ 26 октября 2018

Реструктурированная часть вашего кода, исправлено несколько ошибок, теперь он должен работать, если ваши остальные части кода верны:

with serial.Serial(port='COM7', baudrate=9600, timeout=1) as ser:
    values = [] # Initiate your list before the loop!
    currenttime = [] 
    max_time = 20     #limit time : 20seconds
    start_time = time.time()  # remember when we started
    while True:
        if (time.time() - start_time) > max_time:
            break # if time elapsed larger than max_time, break out of loop
        currenttime.append(time.time() - start_time)
        values.append(read_BLE(ser)) # python list has no set length. just append to it.

plt.plot(currenttime, values)

Python list не имеет фиксированного выделения памяти, .append всегда будет добавлять элемент без проблем с памятью -> Это просто передача ссылок на самом деле.Вы также хотите инициировать list перед циклом, в противном случае каждый цикл будет перезаписан и получит новый list

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...