Проблемы с Arduino Uno, используемым в качестве АЦП для Raspberry Pi 3 через последовательное соединение - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь эффективно использовать Arduino Uno в качестве АЦП для Raspberry Pi 3. В идеале я хотел бы прочитать два аналоговых напряжения и использовать их в системе управления в дальнейшем.

Мои проблемы заключаются в следующем: 1. Я не могу найти способ надежного чтения данных, передаваемых через последовательный порт. Я продолжаю получать сообщения об ошибках, которые, кажется, поступают с линии:

'data= float (ser.readline (). strip ()) '

Ошибка изображения

Я могу отправить два набора данных из Arduino, но у меня есть проблемы с разделением их и превращением их в целые числа для использования на стороне Python / Rpi

Вот эскиз Arduino:


int val = 0;  // variable to store the value read

int analogPin2 = A4;
int val2 = 0;

void setup() {
Serial.begin(9600);

}

void loop() {
val = analogRead(analogPin);  // read the input pin
val2 = analogRead(analogPin2);  // read the input pin

Serial.print(val);             // Value from An Pin 3
//Serial.print("\t");            // Delimiter
//Serial.print(val2);            // Value from An Pin 4
Serial.print("\n");
delay(1);
}

Вот код Python:

import serial
import time
import matplotlib.pyplot as plt
import numpy as np

BR = 9600
ser = serial.Serial("/dev/ttyACM1",BR)
ser.baudrate=BR
ser.flushInput()

Sample_rate = 1/0.0009
rec_secs = 15

N    = round(Sample_rate*rec_secs)

A3data = N*[0]
A4data = N*[0]
TT = N*[0]


for i in range(0,N):
    ST = time.time()
    read_ser = ser.readline()
    A3data[i] = float(ser.read().strip())
    print(read_ser)

    ET = time.time()
    TT[i] = ET-ST   

t_vec = N*[0]
for i in range (0,N-1):
    t_vec[i+1] = TT[i+1]+t_vec[i]

print(np.mean(TT))

plt.plot(t_vec,A3data)
plt.show()

Заранее большое спасибо!

...