5

私は処理とシリアル通信に不慣れで、私の問題は非常に初歩的なようです。Processing から Arduino にデータを送信しようとしていますが、変換中に何かが失われるようです。

Arduino では、この非常に単純なスケッチを実行しています。

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available() > 0) Serial.println(Serial.read());
}

シリアルからバイトを読み取り、すぐに書き戻して、何が起こっているかを確認できるようにすることを目的としています。付属のシリアル モニタでこれをテストすると、期待どおりに動作します。「0」と入力すると「48」が返されます。ここまでは順調ですね。

この処理スケッチを実行すると、問題が発生し始めます。

import processing.serial.*;
Serial myPort;

void setup()
{
  //frameRate(10);
  myPort = new Serial(this, Serial.list()[4], 9600);
}

void draw()
{
  myPort.write("0");
}

このコードは、デフォルトのフレーム レートであることを理解しているため、1 秒あたり 10 エントリのレートで「48」のエンドレス ストリームを返すことを期待します。実際に何が起こるかは、次のようなものです。

48
48
488
48
48
48
48
48
48
48
48
48
48

488
48
48
48

10 バイトごとに (ギブまたはテイク数)、めちゃくちゃになるという良い変化があるようです。"48" の代わりに、" "、"488"、"4848"、"488" のようなものが返されます。さらに興味深いのは、frameRate(10); のコメントを外した場合です。10 から 10 までの fps を設定しているので、Processing スクリプトの次の行には何も起こらないと思います。代わりに、次のようなものを見始めます。

4
44
4848844
444448444844
4
44444444
844
444
844444
8
88
8
4488
84
48
4448444844
444

つまり、基本的に数字はもはや理にかなっています。

問題をこのシリアル通信に絞り込むのにかなりの時間がかかり、関連するトピックについて数時間グーグルで検索しても、何が起こっているのかについてのヒントは得られませんでした. さらに読むことや試してみることへの指針は大歓迎です。

今日ダウンロードした最新バージョンの Processing を使用しています。私のシステムは、すべてのアップデートがインストールされた Mountain Lion を実行している MBP です。

4

3 に答える 3

1

さらにテストを行った結果、Processing からバイトを送信しているときにシリアル モニタをオンにすると、原因は不明ですが、両方が台無しになるようです。シリアルバスの優先度をめぐって何らかの争いがあり、データが壊れてしまうと思います。

解決策: 複数のプログラムを使用してシリアル データを同時に読み取ろうとしないでください。

于 2012-11-18T12:09:41.833 に答える
0

置き換えてみてください:

myPort.write("0");

と:

myPort.write("0")-'0';

なぜなら

アスキー 0 --> 48
アスキー 1 --> 49
.
.
.

于 2013-03-28T16:23:28.693 に答える
0

お分かりのように、複数のプログラムがシリアルからデータを読み取ろうとすると、このような問題が発生する可能性があります。

また、任意のピンをシリアル ピンとして使用できるソフトウェア シリアル Arduino ライブラリを試すこともできます。

于 2012-11-20T09:50:19.787 に答える