2017-07-21 18 views
0

最近、送受信時にデータをASCII小数点以下(A = 65)にフォーマットする新しいLoRaトランシーバが追加されました。このようなループのために少しで...ASCII小数点から文字列へ(C言語のArduino上)

84 114 97 110 115 109 105 115 115 105 111 110 32 99 97 112 97 98 105 108 105 116 121 32 100 101 109 111 110 115 116 114 97 116 105 111 110 46 46 46 

::私は40バイトのペイロード送信した場合、「伝送能力のデモンストレーションを...」だから、それはとして受信側に出力することでしょう

for(int i = 0; i < 40; i++) { 
    Serial.print(trx.read()); 
    Serial.print(" "); 
    delay(1); 
} 

Arduinoプラットフォームでデータ型変換が新しくなりました(私はASCIIを扱う経験がありません)、この出力をC/C++の文字列に変換する簡単な方法を見つけることができませんでした。私は完全なペイロードを配列に入れ、ASCIIハッシュマップを使ってそれらを1つずつ変換することを考えましたが、簡単な方法があると思います。

更新:私はjacoblawの答えを使用して終了し、少しクリーナー出力のためにそれを修正。ある時点で、キャストする要素を宣言せずに配列にcharキャストを使用しようとしました。そのため、バイトをcharにキャストできないと思っていました。私はそのような配列を使用していないわけではない、メソッドは動作します。ヘルプ@jacoblawと@Grooをありがとう。ここで私が今使っているものです:

for(int i = 0; i < 40; i++) { 
     Serial.print((char)trx.read()); 
     delay(1); 
    } 

あなたがこれを再利用するつもりなら、あなたはあなたのペイロード長が何であれに条件「のための」第二を変更する必要がありますので注意してください。再度、感謝します!

+2

'trx.read()'が返すのはどんなタイプですか? 'char'?ちょうど一般的に、私には、あなたが 'i = 0;私は<40'を使用しますが、ループの本体では 'i'を使用しません。毎回40バイトが保証されていますか? 'trx.read()'はブロックされますか? – yano

+0

それでは、以下の10進値を持つascii文字列を取得しますか? '84 114 97 110 115 109 105 115 115 105 111 110 32 99 97 112 97 98 105 108 105 116 121 32 100 101 109 111 110 115 116 114 97 116 105 111 110 46 46 46' – jacoblaw

+1

問題をよりよく説明する必要があります。あなたの問題が何であるかは明確ではありません。トランシーバは「ASCII小数点以下のデータをフォーマットしません」とは、そのフレーズは意味をなさない。 ['Serial.print'](https://www.arduino.cc/en/Serial/Print)の特定のオーバーロードを呼び出すと、あなたは' trx.read() 'の結果を数値として送ります。たとえば、 'Serial.print(char)x)'を使って実際の文字を出力したり、単純に 'Serial.write(buffer、len)'を使って配列を送ることができます。 – Groo

答えて

2

私はあなたが欲しいものについて完全にはっきりしていません。トランシーバーから受け取ったものの文字がほしいと思うものから

char rcv_str[40]; // Make sure this is large enough! 
int temp; // From yuor example, it looks like trx.read() outputs ints 
for(int i = 0; i < 40; i++) { 
    temp = trx.read(); 
    rcv_str[i] = (char)temp; 

    Serial.print(temp); 
    Serial.print(" "); 
    delay(1); 
} 
関連する問題