0

私は、モニタを使用するとarduino mコードが機能するので、これはPython側で問題になるかもしれないと思う。arduinoメガ2560の問題への書きかけ

とにかく、私は基本的にarsinoにcsvファイルから来る文字列を送信しています - python 2.7 btwを使用しています。

私の問題は、arduinoが(約12弦で)文字列の受信を停止することです。

誰かが何かを見ることができれば、それは問題を引き起こしている可能性があります。私は助けていただければ幸いです。私は多くのことを読んだので、コードの周りにさまざまなtime.sleepを使用しようとしました。それは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のコードです - 私がテストしているとそれが動作LinkedListの図書館:18日でそう

#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メガで 'SoftwareSerial'を使用していますか?それは4つのハードウェアシリアルインターフェイスを持っています。 'Serial1'はピン18と19にあります。 –

答えて

0

それがwhile(true)ループに入るので、arduinoコードが停止します。送信に小さなブレーキがあり、コードがelse部分に入り、実行が終了します。特別な(文字列の)コマンドを受け取ったら、プログラムの2番目の部分に入ることをお勧めします。

必ず途中18560.

18560文字列を通じて同じ文字列、?それはメガ2560 RAMに収まりません。

+0

申し訳ありません私の文言はドギーだった、文字列は "18560"であり、私はちょうど18を取得します。現在40弦があり、それは前述の12番目の文字列で停止します"18560"。とにかくそれをチェックアウトして戻ってきます – tauhtauhsauce

関連する問題