0

Я чувствую, что это может быть проблемой на стороне 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); 
    } 
    } 
} 

`

+0

Всегда ли он приходит к одной и той же строке или это немного случайно? Останавливает получение всех вместе или данные повреждены? – snow

+0

@snow Всегда одна и та же строка, на полпути к 18560 году. Я просто получаю 18. Тот же самый номер строки, что я пытаюсь – tauhtauhsauce

+0

Почему вы используете 'SoftwareSerial' на Arduino Mega? Он имеет 4 аппаратных последовательных интерфейса. 'Serial1' находится на контактах 18 и 19. –

ответ

0

Так что в 18-м string, код arduino останавливается, потому что он переходит в цикл while (true). Может быть, есть небольшой тормоз в передаче, и ваш код переходит в другую часть, где выполнение завершается. Я бы предложил перейти во вторую часть программы после получения специальной (строковой) команды.

Всегда та же строка, на полпути через 18560.

18560 строк? Это не подходит для мега 2560 RAM.

+0

Извините, что моя формулировка была изворотливой, строка «18560», и я просто получаю 18. В настоящее время существует 40 строк, и она останавливается на 12-й строке, которая является вышеупомянутой "18560". Я все равно проверю и вернусь – tauhtauhsauce