我覺得這可能是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);
}
}
}
`
它總是來到相同的字符串還是有點隨機?一起停止接收或數據被破壞? – snow
@snow總是相同的字符串,一直到18560.我只是得到了18個。同樣的字符串nomatter我嘗試了 – tauhtauhsauce
爲什麼在Arduino Mega上使用'SoftwareSerial'?它有4個硬件串行接口。 'Serial1'在引腳18和19上。 –