2016-05-14 12 views
0

私はいくつかの研究を行ったが、私の問題のための適切な解決策を見つけることができなかった。私は本当に何のアイデアからも外れているので、私が探し求めるべきことは、問題を自分で解決する方法として、私はあなたに尋ねたいと思う。Cでの配列使用

私はCを初めて使っているので、あまりにも愚かな初心者の質問ではないことを願っていますが、実際に修正する方法はわかりません。

それが起こって取得しようと、私は、次のコードに問題を区切りながら:あなたにいくつかのより多くの情報を与えるために

uint32_t possibleBaudrates[12] = 
     { 
      1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600, 1382400 
     }; 
uint8_t AT[2] = {'A', 'T'}; 

for(uint8_t i = 0; i < 12; ++i) 
{ 
    UART_SetBaudrate(&UART_0, possibleBaudrates[i], 16); 

    delay(1000000); 

    UART_Transmit(&UART_0, AT, 2); 
}  

、私はHC06モジュールのボーレートを設定しようとしています。これをテストするために、ATを私のスマートフォンのBluetermに送ります。私は最初のコードに期待するもの

uint32_t possibleBaudrates[12] = 
     { 
      1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600, 1382400 
     }; 
uint8_t AT[2] = {'A', 'T'}; 

for(uint8_t i = 0; i < 12; ++i) 
{ 
    UART_SetBaudrate(&UART_0, 9600, 16); 

    delay(1000000); 

    UART_Transmit(&UART_0, AT, 2); 
} 

はBlueterm上の単一のATですが、私はやった:次のコードは、(それが私のスマートフォンにBluetermに12倍ATを書き込み)うまく機能しているため、問題は、配列でなければなりません少なくとも1つの間違い。

編集:私はあまりにも少ない情報を与えたと思います。 最初のコード例の動作は、Bluetermに何も印刷されていないことです。 「AT」は1回でなければなりません(HC06モジュールのボーレートは9600に設定され、アレイを通過する場合は9600になるはずです)

Edit2:問題のあるセクションのみが後で表示されます私がBluetermに接続していない場合、 "AT"はモジュールを "OK"で答えさせますが、配列を通ることは間違っているようです。) さらに、Baudrateが9600でない場合、Blueterm(テスト済み)には何も印刷されていません。

Edit3:私のコードに別の問題が見つかりました。誤解のようですDave4のUART_SetBaudrateメソッドのうち、一度使用した後に設定されるようだから、

UART_SetBaudrate(&UART_0, 2400, 16); 
delay(10000000); 
UART_Transmit(&UART_0, AT, 2); 
UART_SetBaudrate(&UART_0, 9600, 16); 
delay(10000000); 
UART_Transmit(&UART_0, AT, 2); 
UART_SetBaudrate(&UART_0, 9600, 16); 
delay(10000000); 
UART_Transmit(&UART_0, AT, 2); 

文句を言わない

UART_SetBaudrate(&UART_0, 9400, 16); 
delay(10000000); 
UART_Transmit(&UART_0, AT, 2); 
UART_SetBaudrate(&UART_0, 2400, 16); 
delay(10000000); 
UART_Transmit(&UART_0, AT, 2); 
UART_SetBaudrate(&UART_0, 4800, 16); 
delay(10000000); 
UART_Transmit(&UART_0, AT, 2); 

は事前にblueterm

Thxを上 "AT" 3X印刷されている間、私は今、どこの世話をする(上に行く方法を知っている、bluetermに何かを印刷します誤解を招くような質問のために悲しい。

今すぐこの質問を終了するか、または何かを削除する必要がありますか?

+0

デバッグのヘルプ( "**なぜこのコードは動作しないのですか?**")には、問題の内容、特定の問題またはエラー、およびそれを再現するのに必要な最短コードが含まれている必要があります** 。 **明確な問題文**のない質問は他の読者には役に立たない。参照:[最小限で完全で検証可能なサンプルの作成方法](http://stackoverflow.com/help/mcve) – Biffen

+0

9600以外の値を試してみましたか? –

+0

私は自分の質問を編集する方法を知らない。動作を明確にするために、最初のコード例を実行するとBluetermに何も印刷されません。しかし、示されているように、2番目のコード例ではBluetermに12x "AT"を印刷しています(Baudrateが9600の場合はそれを印刷する必要があります) – Weiter

答えて

2

私が間違っている場合は、私を修正してください。サイクルを実行して、すべての可能なボーレートでメッセージを送信しようとしていますか?

これがそうであれば、端末のボーレートではなくボーレートで送信するたびに、端末でガベージ文字を受信します。

プログラムは、指定したボーレートで動作するように設定するか、プログラムの先頭で動作させるボーレートを選択する必要があります。

関連する問題