-2

数列をマイクロコントローラーに送信する必要があります。これが私の機能です:

void DriveForward()
{       
      printf("137 0 0 128 0");          
}

関数が ASCII として送信している間、micro は ASCII を受け入れません。その ASCII 文字列を として送信する必要がありますuint8。どのように変換を行うことができますか?

この場合、printf画面には印刷されませんが、シリアル ポートに直接送信されます。シリアルポートに送信する唯一のコマンドなので、事前に変換を行う必要があります。

4

2 に答える 2

4

私はあなたの質問に混乱するかもしれませんが、次のようなことを試すことができます (このケースをテストするためだけに):

  printf("%c%c%c%c%c", 137, 0, 0, 128, 0);

これにより、ASCII でエンコードされた 4 文字と、後で入力した数値が送信されます。

また、使用する必要があることを示すほとんどの技術文書はuint8、完全な 8 ビット値をケーブルに送信することを参照しています (ここで文字または ASCII について話すと、適用されません。それらは、表現できる 8 ビットの値にすぎません)。を使用してunit8)。

これは通常write、 のバッファを送信できるなどの低レベル関数を使用して行われるuint8ため、その値を送信する必要がある場合は、次のようなバッファを使用できます。

uint8 send_buffer[] = {137, 0, 0, 128, 0};

その後:

write (send_buffer, 5, output_file_or_serial_conn);
于 2012-12-17T00:33:56.013 に答える
0

関数を変更できない場合はscanf、 で受信してみてください。これは の逆ですprintf。したがって、コードが次のようになっている場合:

printf("%i %i %i", value1, value2, value3);

次に、次のようなもので受け取ります。

char value1, value2, value3;
sscanf(received_string, "%i %i %i", &value1, &value2, &value3);

編集: 2 年後、私はこの答えを再検討しscanfますprintf。歴史的な理由から、この回答を削除していません。

于 2012-12-17T00:36:44.090 に答える