0

我覺得這可能是python方面的一個問題,因爲arduino m代碼在我使用顯示器時起作用。Pyserial寫入arduino巨型2560問題

無論如何,我基本上是從csv文件發送到arduino的字符串數組 - 使用python 2.7 btw。

我的問題是,arduino停止接收字符串(大約12個字符串)。

如果任何人都可以看到任何東西,那可能會導致問題,我會很感激任何幫助。我已經嘗試過在代碼周圍使用各種各樣的time.sleep(),因爲我已經閱讀了很多東西 - 在serial.serial()之後需要一段時間來初始化端口。我甚至在發送完所有數據之後嘗試等待 - 在comport必須由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的代碼 - 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個。同樣的字符串nomatter我嘗試了 – tauhtauhsauce

+0

爲什麼在Arduino Mega上使用'SoftwareSerial'?它有4個硬件串行接口。 'Serial1'在引腳18和19上。 –

回答

0

因此,在18日字符串arduino代碼停止,因爲它進入while(true)循環。也許在傳輸中有一個小的制動,並且你的代碼進入了執行終止的else部分。我會建議在收到一些特殊的(字符串)命令後進入程序的第二部分。

總是相同的字符串,中途18560.

18560字符串?這不適合大型2560 RAM。

+0

對不起,我的措辭是狡猾的,字符串是「18560」,我只是得到了18。目前有40個字符串,並停止在前面提到的第12個字符串「18560」。無論如何,我要檢查一下,然後回來 – tauhtauhsauce