Писериал записи в Arduino Mega 2560 задач
Я чувствую, что это может быть проблемой на стороне Python, так как код arduino m работает, когда я использую монитор.
Во всяком случае, я в основном отправляю массив строк из файла CSV в Arduino - используя Python 2.7 кстати.
Моя проблема в том, что Arduino перестает получать строки (около 12 строк).
Если кто-то может что-то увидеть, это может вызвать проблемы, я был бы признателен за любую помощь. Я попытался использовать различные time.sleep (s) вокруг кода, так как я прочитал много вещей - требуется некоторое время, чтобы инициализировать порт после serial.serial(). Я даже пытался подождать после того, как все данные были отправлены, - прежде чем код должен быть прочитан кодом Python (это мой основной метод проверки). Я также использовал программные последовательные контакты rx rx для подключения отдельных USB-устройств к последовательным устройствам (я не полагаюсь на их вывод, потому что это дешево). Я также экспериментировал с каждой скоростью в бодах и без кубиков.
Вот код Python: `
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 - библиотека связанных списков, которую я протестировал, и она работает:
#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);
}
}
}
`
1 ответ
Таким образом, на 18-й строке код arduino останавливается, потому что он входит в цикл while(true). Возможно, в передаче есть небольшой тормоз, и ваш код переходит в другую часть, где выполнение заканчивается. Я бы предложил перейти ко второй части программы после получения какой-то специальной (строковой) команды.
Всегда одна и та же строка, на полпути через 18560.
18560 строк? Это не вписывается в мега 2560 оперативной памяти.