シリアルデバイスに単一の文字を渡そうとしています

良い一日、 私はハイパーターミナルを介して接続されているときに私が文字 'd'を押してもステータス・レポートを出すことができない、または文字dだけを必要とする何かを入力するシリアル・デバイスを持っています。また、Ctrl-tを押すとルーティング情報が表示されます。

私はarduinoに接続されたボタンを押してシリアルデバイスにbを送り、ステータス情報をそこから表示したいと思います。

この時点で、シリアルデバイスがarduinoに接続されていて、そこからメッセージを見ることができますが、ピン2に接続されたスイッチを押すと、シリアルデバイスは期待通りの状態出力を直接送信せず、ハイパーターミナルでコンピュータに接続します。

誰かがこれに関する経験や意見を持っていますか?

#include 
// software serial #1: TX = digital pin 10, RX = digital pin 11
 SoftwareSerial portOne(10, 11);
 const int buttonPin = 2;    //the number of the pushbutton pin
 const int button1Pin = 4;
 const int ledPin =  13;     //the number of the LED pin
//define char to send to serial

char stat = 'd';
char route = '\x14';
// variables will change:
int buttonState = 0;        //variable for reading the pushbutton status
int button1State = 0;

// the setup function runs once when you press reset or power the board
void setup() {
 //initialize digital pin 13 as an output.
                pinMode(ledPin, OUTPUT);
                pinMode(buttonPin, INPUT);
                pinMode(button1Pin, INPUT);
                Serial.begin(4800);
                while (!Serial) {;//wait for serial port to connect. Needed for native USB port only
                }
               //Start each software serial port
                portOne.begin(4800);
                while (!portOne) {;//wait for serial port to connect. Needed for native USB port only
                }
              }

// the loop function runs over and over again forever
void loop() {
            static int Once = 0;
            static int Once1 = 0;
            buttonState = digitalRead(buttonPin);
            button1State = digitalRead(button1Pin);
 //check if the pushbutton is pressed.
 //if it is, the buttonState is HIGH:
            if (buttonState == HIGH ) { 
                                      if (Once == 0) {
                                                        Once = 1;
                                                       //turn LED on so I can tell the button is working
                                                        digitalWrite(ledPin, HIGH);
                                                       //send d to Radio
                                                        portOne.write(stat);
                                                       //send d to serial monitor so I can see the charector
                                                        Serial.print(stat);
                                      }
                                      }


if (buttonState == LOW) {
                         //turn LED off:
                          Once = 0;
                          digitalWrite(ledPin, LOW);

                          }


 //check if the other pushbutton is pressed.
 //if it is, the buttonState is HIGH:
  if (button1State == HIGH) {
    if (Once1 == 0) {
          Once1 = 1;
   //turn LED on:
  //digitalWrite(ledPin, HIGH);
   //send ctrl-t to radio
    portOne.write(route);
    } 
  }
  if (button1State == LOW) {
   //turn LED off:
    //digitalWrite(ledPin, LOW);
    Once1 = 0;
  }
    portOne.listen();
     //read data from the Software Serial portOne
  //and send to the hardware serial port:
   while (portOne.available() > 0) {
     char inByte = portOne.read();
     Serial.print(inByte);
   }
}

Breadboard

1
あなたのイントロでは、「私が文字「b」を押すとステータスレポートを送ってくれます」と書きました。コードでは、//send d to Radio と書いています(コードは実際にそれを行うように見えます)。これは正しいですか、それはあなたのエラーの原因になる可能性がありますか?
追加された 著者 caryden,
あなたの質問から完全にはっきりしませんでしたが、シリアルデバイスの信号電圧と極性がArduinoと互換性があることを確認しましたか?従来のシリアルインターフェイス(RS232など)ではなく、Arduinoとインターフェイスするために反転レベルトランスレータが必要です。
追加された 著者 rossp,
あなたがそれを理解してうれしいです。このような電圧にさらされると、Arduinoが永久に損傷する可能性があることに注意してください。それがどのように機能するかについては、ハードウェアのUARTよりも、ソフトウェアのシリアル実装が(意図的にまたは偶発的に)より極性に依存しない可能性があると私は考えています。多くの場合、RS232レシーバは、必要な極性に反転されて増幅されないロジックレベルの信号で駆動され、抵抗/ダイオードネットワークで受信しようとすると想像することができます。
追加された 著者 rossp,
我々は、デバイスにアース線が接続されているのを見ているは​​ずです。コンベンションとして、ブレッドボードの赤い線に5V、青にGndを接続します。それを逆にするのは混乱します。いくつかのデバッグ画面を追加してください。 Serial.println( "デバイスに送信する"); - スイッチ検出の問題か、通信の問題かを知ることができます。
追加された 著者 Nick Gammon,
たぶん、しばらく(Serial.available())portOne.print(Serial.read());を追加してください。シリアルモニタの文字をデバイスに挿入することができます。次に、バウンス/デバウンスの潜在的な問題を回避することができます。
追加された 著者 Dave X,
私はあなたの言うことを参照してくださいしかし、私は、シリアルデバイスに渡されたチャーを取得する問題の詳細を考える。あなたは私がcharのstatを 'd'から 'c'に変更するかどうかを確認しますが、これは "すべてを有効にする"べきですが、これは起こらないので、charがデバイスに届かないか、 ..
追加された 著者 DormoTheNord,
わかりました、私のブレッドボードは左側が青、右側が赤ですので、私はブレッドボードと一致するように回路図を作成し、フリッティングの画像に合わせて変更しませんでした。私は自分のコードでSerial.printlnを持っていて、ボタンを押すたびにその指示を見ました。私は時にはデバイスからarduinoに接続された地面もありました。私はそれらの変更を行い、あなたに戻ってきます。
追加された 著者 DormoTheNord,
jrobertこれに気付いてくれてありがとう、何らかの理由でこれをタイプしている間に私は 'b'を入れたが、 'd'は正しい。ニック私は変化なしで地面を追加し、ブレッドボードの変更に伴う電源/グラウンドを反映するように画像を更新しました。上記の私のコードでも、 //ラジオのportOne.write(stat)にdを送ってください。//dをシリアルモニタに送って、Charector Serial.print(stat);を見ることができます。
追加された 著者 DormoTheNord,
@ChrisStratton私はデバイスからシリアル接続を測定したとき、私はTXラインが-9.2vであることを発見しました。あなたの提案に基づいて私はいくつかの調査を行い、この sparkfun.com/tutorials/215 に基づいています私は本当にMAX3323チップ(または同様のもの)を実行する必要があるように見えます。私の驚くべきことに、デバイスからデータを取得してarduinoに表示することができ、間違いなく私の混乱に加わりました。
追加された 著者 DormoTheNord,

答えはありません

0