1

問題が発生しました。最近、ArduinoUnoボードを購入しました。コンピューターからの入力を制御するような面白いものを作ろうとしました。pySerialでPythonを使用しましたが、プログラムは次のとおりです。

arduino = serial.Serial(portaCOM, 9600, timeout = 1)
... in loop ->
arduino.write(value)


  def sliderUpdate(self, event):
        pos = self.slider.GetValue()
        arduino.write(pos)
        time.sleep(.1)
        print arduino.readline()

try:
    arduino = serial.Serial(portaCOM, 9600, timeout = 1)
except:
    print "Errore di connessione alla porta seriale"

書き込み値は、USBを介して値をボードに送信する必要があります。ボードにロードされているプログラムは次のとおりです。

 const int ledPin = 11;
 byte brightness;

 void setup(){
     Serial.begin(9600);
     pinMode(ledPin, OUTPUT);
 }

 void loop(){
     while(Serial.available()){
         brightness = Serial.read();
         Serial.print(brightness);
         analogWrite(ledPin, brightness); //LED doesn't refresh the brightness
         delay(10);
     }
 }

LEDが正常に機能しています。Arduinoが提供するFadeの例を試してみましたが、機能しています。

プログラムが正しくデータを送信しているかどうかを確認しました。はい、そうです。以前に送信したものと同じものが返されます。

送信および設定された値を取得する必要がありますanalaogWriter(pin, VALUE)が、何かが間違っているか、機能していません。

この問題を解決するにはどうすればよいですか?

解決

Arduinoコード

const int ledPin = 11;
byte valoreLed;

void setup(){
    Serial.begin(9600);
    pinMode(ledPin, OUTPUT);
}

void loop(){
    while(Serial.available()){
        valoreLed = Serial.read();
        analogWrite(ledPin, valoreLed);
        delay(20);
    }
}

Pythonスクリプトコード:

pos = self.slider.GetValue()
arduino.write(chr(pos))

みなさん、ありがとうございました!! :)

4

5 に答える 5

2
  1. まず、LED が正しく接続されていることを確認します。アノード (長いピン) を PWM 11 ポートに、カソード (短いピン) をグランドに接続します。LED によっては、カソードとグランドの間に抵抗を追加する必要がある場合もあります。
  2. Python から正しいポートに書き込んでいることを確認してください (FTDI ケーブルは OS に関連付けられています)。
  3. USB コネクタ付きの FTDI ケーブルを使用していない場合は、すべてのピンが正しい入力に接続されていることを確認してください。
  4. あなたの例の値は何valueですか? 試してみてarduino.write(chr(0xFF))、LED は点灯したままですか?
于 2010-11-30T22:27:04.603 に答える
1

あなたのコメントで、LED は最初の文字で動作することがわかりますが、別の文字では変化が見られません。以前の文字とは大幅に異なる ASCII 文字を送信していることを確実に確認してください。たとえば、ASCII 0 の後に ASCII 255 を送信します。

編集: FadeLED の例が機能するとおっしゃっているので、その例を取り上げてシリアル ポート機能を追加できますか? たとえば、シリアル文字を受信した後にのみフェードします。これにより、少なくとも、シリアル ポートと LED が記述したコードで共存できることを確信できます。また、こちらの FadeLED の例を使用していると思います。その場合は、正しいピン番号を設定したことを確認してください。リファレンス コードではピン 9 が使用されていますが、サンプル コードではピン 11 が使用されています。

別の編集:あなたはArduinoから文字を正しく受け取ったと言いましたが、pySerialReadLine関数を使用しているため、改行が表示されるまでブロックされ、Arduinoコードには改行を生成するものは何も表示されません最初に送信されませんでした。問題の変数の数をなくすには、Python プログラムではなく、HyperTerminal または同様の COM ポート プログラムを使用して Arduino にバイトを送信してみてください。たとえば、スペース文字 (ASCII 32) と「}」文字 (ASCII 125) を送信できます。これらは、LED に目に見える違いを生み出すのに十分な違いがあるはずです。

于 2010-11-30T22:19:56.550 に答える
1

改行をarduino.readline()待っているのではないかと思いますが、Arduinoコードは改行を送信しません。したがって、最初の値を送信した後、Python コードは無期限にブロックされます。

于 2010-11-30T22:39:11.237 に答える
0

まず、シリアル ポートのどちら側に問題があるかを突き止めます。

まず、Arduino でハードコードされたループを使用して LED を駆動できますか。LED の明るさは期待どおりに変化しますか?

それが邪魔にならなくなったら、端末アプリ(Arduino IDEに組み込まれているアプリなど)から手動で送信するときに、Arduinoに目に見えて正しいことをさせることができますか?これには、Arduino コードの変更が必要になる場合があります。

それが機能したら、Python コードに焦点を当て、正しい COM ポートなどと通信していることを確認します。

于 2010-11-30T22:17:22.977 に答える
-1

「書き込み値は、USB 経由で値をボードに送信する必要があります」

これがタイプミスでない場合、PySerial を使用して USB ポートにアクセスすることはできません。代わりに pyUSB があり、おそらく他のものもあります。

于 2010-11-30T22:07:04.427 に答える