Я чувствую, что это может быть проблемой на стороне python, так как код arduino m работает, когда я пользуюсь монитором.Pyserial writing to arduino mega 2560 problem
В любом случае, я в основном отправляю массив строк, идущих из файла csv, в arduino - используя python 2.7 бит.
Моя проблема в том, что ардуино останавливает прием строк (примерно в 12 строк).
Если кто-нибудь может что-нибудь увидеть, это может вызвать проблемы, я буду признателен за любую помощь. Я попытался использовать различные time.sleep (-ы) вокруг кода, поскольку я прочитал много вещей - потребуется некоторое время, чтобы инициализировать порт после serial.serial(). Я даже попробовал ожидание после отправки всех данных - прежде чем компилятор должен быть прочитан кодом python (это мой основной метод проверки). Я также использовал программные последовательные rx rx контакты для отдельного USB-устройства для последовательного устройства (я не полагаюсь на его вывод, потому что это дешево). Я также экспериментировал с каждой используемой скоростью Бода и без кубиков.
Вот код питона: `
import serial
import time
ser = serial.Serial('COM3', 9600, timeout=0)
file = open('C:\\samples.csv')
time.sleep(2)
while 1:
line = file.readline()
print line
if not line:
break
ser.write(line)
#time.sleep(4)
time.sleep(20)
while 1:
try:
print ser.readline()
time.sleep(1)
except ser.SerialTimeoutException:
print('Data could not be read')
time.sleep(1)`
и вот код Arduino - библиотека LinkedList я испытал, и она работает:
#include <analogShield.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(18, 19); // RX, TX
#include <LinkedList.h>
unsigned int full = 65536;
unsigned int zero = 32767;
//SoftwareSerial mySerial(18, 19); // RX, TX
LinkedList<String> myLinkedList = LinkedList<String>();
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
mySerial.begin(9600);
while (!Serial) {
; // wait for serial port to connect.
}
//Serial.println("TESTING...");
//
delay(20000);
}
void loop() { // run over and over
if (Serial.available()) {
String s = Serial.readString();
myLinkedList.add(s);
mySerial.println(s);
//delay(1);
}
else {
Serial.println("THIS IS LIST " );
Serial.println(myLinkedList.size());
for (int i = 0; i<myLinkedList.size();i++) {
//unsigned int volt = myLinkedList.get(i);
Serial.println(myLinkedList.get(i));
//analog.write(0,volt);
//delay(1);
//delayMicroseconds(8);
}
while (true) {
//analog.write(0,zero);
}
}
}
`
Всегда ли он приходит к одной и той же строке или это немного случайно? Останавливает получение всех вместе или данные повреждены? – snow
@snow Всегда одна и та же строка, на полпути к 18560 году. Я просто получаю 18. Тот же самый номер строки, что я пытаюсь – tauhtauhsauce
Почему вы используете 'SoftwareSerial' на Arduino Mega? Он имеет 4 аппаратных последовательных интерфейса. 'Serial1' находится на контактах 18 и 19. –