3

Python スクリプトから Arduino Uno にシリアル経由でデータを正しく送信できません。私は 9600 ボーを使用しており、Arduino は正しくリセットされますが、Python スクリプトから送信した文字を読み取れません。time.sleep()Arduino のリセットが干渉しないことを確認するために呼び出します。Windows 7 を使用しています。デスクトップで Python スクリプトを実行し、USB 経由で Arduino Uno のシリアルに接続していることを明確にする必要があります。次に、Uno の RX および TX ピン (ピン 0 および 1) を Mega の Serial1 (ピン 18 および 19) に接続します。次に、ラップトップの Arduino IDE のシリアル モニター (Mega の通常のシリアルを使用) を使用して、Uno が見ているものをのぞき見します。Mega のコードは次のとおりです。

void setup() {
  Serial1.begin(9600);
  Serial.begin(9600);
  Serial.println("Master Ready");
}

void loop() {
  if(Serial1.available() > 0) {
    char inByte = Serial1.read();
    Serial.write(inByte);
    Serial.write("\n");
  }
}

Uno のコードは次のとおりです。

void setup() {
  Serial.begin(9600);
  Serial.println("Slave Ready");
}

void loop() {
 if(Serial.available() > 0) {
   char inByte = Serial.read();
   Serial.write(inByte);
   }
}

最後に、Python スクリプトを次に示します。

import sys
import serial
import time

ser = serial.Serial("COM23",9600)
n = int(sys.argv[1])
print n

time.sleep(10)
print ser
print n == 41
if (n == 70):
    ser.write(chr(97))
    print 'a'
elif n == 41:
    ser.write('ggggggg')
    print 'b'
elif n == 42:
    ser.write('hello world')
    print 'c'
elif n == 25:
    ser.write(chr(100))
elif n == 26:
    ser.write(chr(101))
elif n == 22:
    ser.write(chr(102))
elif n == 10:
    ser.write(chr(103))
elif n == 4:
    ser.write(chr(104))
elif n == 14:
    ser.write(chr(105))
elif n == 7:
    ser.write(chr(106))
elif n == 11:
    ser.write(chr(105))
elif n == 5:
    ser.write(chr(106))
elif n == 17:
    ser.write(chr(107))

# head - a - 70
# right bicep - b - 41
# right forearm - c - 42
# left bicep - d - 25
# left forearm - e - 26
# chest - f - 22
# right thigh - g - 10
# left thigh - h - 4
# right shin - i - 11 - 14
# left shin - j - 5 - 7
# waist - k - 17

それが役立つ場合に備えて、私は基本的に Doom3 のヒット位置をシリアル経由で Arduino に書き込んで、Arduino が体の適切な位置でモーターをオンにできるようにしようとしています。ゲームのコードは C++ で、最初は C++ 用のシリアル ライブラリを使用してみましたが、それもうまくいきませんでした。

4

4 に答える 4

2

私は似たようなものに出くわしました。ここで重要なのは、IDE から arduino と通信するときに機能し、他のシリアル プログラムを使用すると失敗することです。あなたはその機能に夢中になっていauto-reset ます

Arduino Playground のこのリンクをチェックして、何が起こっているのか、それに対して何をすべきかについての詳細な説明を確認してください。このサイトでは、スキルと快適さのレベルに応じていくつかのソリューションを提供しています。

このサイトの回避策の 1 つを実装すると、C++ コードが機能することを期待しています。

于 2012-06-07T17:52:53.227 に答える
1

物理的なセットアップを正しく理解していれば、Arudino IDE と python の間に競合があるようです。デフォルトでは、一度に 1 つのプログラムのみがシリアル ポートを開くことができます (排他的な書き込み用にファイルを開くなど)。Pythonスクリプトを使用するだけの場合は、arduino IDEを起動せず、ardiunoがメッセージを受け取ったときにLEDをオンにするように変更してください。これは機能するはずです(シリアルポートの割り当てが正しい場合)。arduino の診断 LED は通常のシリアル トラフィックで点滅するはずですが、1 つのメッセージの場合、短い点滅を見逃す可能性があります。

IDE 間と Arduino 間のシリアル ポートの使用にも競合があるようです。(複数の Arduino を使用する理由がわかりません。) 各シリアル通信ペアは一意である必要があります。Arduino の SoftwareSerial ライブラリを使用して、現在 FTDI チップが IDE と通信するために使用している d0/d1 ピンではなく、別のデジタル ピンのペアを使用して arduino 間の通信を行います。

シリアル ポートを開いたり通信したりできない場合は、python スクリプトにいくつかの診断メッセージを含めることもできます。

于 2012-05-18T11:47:28.167 に答える
0

シリアル通信にも問題がありました。Arduinoのシリアルモニターを閉じることで解決できました。プログラムを実行するときに開くかどうかはわかりませんが、開くと問題になる可能性があります。

于 2013-03-07T04:39:36.020 に答える