2

シリアル通信をパリティなし、1つのスタートビットと2つのストップビットを持つように構成したいと思います。州のドキュメントSerial.begin(speed, config)

(...)オプションの2番目の引数は、データ、パリティ、およびストップビットを構成します。デフォルトは8データビット、パリティなし、1ストップビットです。

ドキュメントには、可能な構成値もリストされています。私の(限られた)理解によれば、要件を満たすにはSERIAL_7N2またはSERIAL_8N2が必要です。(データビットが必要な1スタートビットとどのように関連しているかはわかりません。)

ただし、beginメソッドにその構成値を提供する方法がわからないため、コンパイルすらできません。(私はArduino / C ++の経験があまりありません)。

私のコードでは、次の2つのバリアントを試しました。

Serial.begin(9600, SERIAL_8N2);
Serial.begin(9600, "SERIAL_8N2");

私は何かが足りないのですか?

追加情報:

Serial.begin(speed, config)最新のArduino1.0.2IDEバージョンで導入されました。

beginメソッドを定義/実装するコードは次のとおりです。


編集:

PeterJとborgesからの回答によると、次の変種は正しいです。

Serial.begin(9600, SERIAL_8N2); 

ただし、まだ機能していません。

設定したボードをArduinoLeonardoからArduinoUnoに変更しても、コンパイルエラーは発生しないことがわかりました。

したがって、ボードのサブセットでのみ発生するバグである可能性があります...またはサポートされていない可能性がありますか?!


編集2:

これで解決しました:)ボルヘスの答えは、私に正しい解決策を示しました!

4

2 に答える 2

5

あなたはコメントで言及しました:(編集:そして今はタイトルにあります)

ボードを「ArduinoLeonardo」から「ArduinoUno」に変更しても、コンパイルエラーは発生しません。

Arduino Leonardoには、シリアル通信に関していくつかの特徴があります。

  1. Leonardoには、ネイティブUSB通信を備えたマイクロコントローラー(ATmega32U4 )があります。エコシステム全体がすでに確立されているため、互換性を維持するために、LeonardoはUSBを介したシリアル通信を仮想化します。コードを使用して、この通信にアクセスできSerialます。物理的には、USBプラグを介してその通信にアクセスできます。

  2. 「実際の」シリアル通信(別名シリアルTTL)を使用するには、ピン0(RX)とピン1(TX)を使用する必要があります。使用するコードでSerial1(番号1に注意してください!)。

例:

void setup() {
    Serial1.begin(9600, SERIAL_8N2);
    Serial1.println("Hello?");
}

void loop() {
}

詳細情報(推奨):

于 2012-12-08T03:40:25.637 に答える
1

最初の方法は問題ないはずなので、コンパイラー構成があるか、問題が含まれています。ファイルの先頭に次のインクルードがあることを確認してください。

#include <HardwareSerial.h>

また、SERIAL_8N2は有効ですが、めったに使用されない奇妙な設定です。ほとんどの場合、SERIAL_8N1が必要になります。

于 2012-12-08T02:48:12.307 に答える