Я пытаюсь эффективно использовать 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()
Заранее большое спасибо!