Писериал записи в 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 оперативной памяти.

Другие вопросы по тегам