2016-05-14 13 views
1

私はIRremoteとSSD1306ライブラリをカスタマイズしたAttiny85をコーディングしています。Arduino unsigned long int to char *

IRデータを受信すると、その結果がこのように記憶されている:

unsigned long     value  // Decoded value, max 32 bits 
volatile unsigned int   *rawbuf // Raw interval in 50uS ticks 
int       rawlen // Number of records in rawbuf 

OLEDディスプレイ関連の機能は、次のとおり

void printChar    (char ch) 
void printString    (char* pText) 

Iは、OLED SSD1306画面に受信したIR値を印刷に苦しんでいます。ユーザーは受信したコードを見直してEEPROMに保存することができます。したがって、すべての異なる変換を試しましたが、受信したHEXコードを表示するようにresults.valueを画面に表示できません(たとえば0xE0E040BFはSamsungテレビの電源を入れる)。

attiny85のシリアルの遅れのため、私はこれをどのようにデバッグして動作させることができないのか分かりません。どんな助け?

EDIT(相対コードを追加):

#include "SSD1306.h" 
#include "IRremote.h" 
... 
if (irrecv.decode(&results)) { 
    dumpCode(&results);   
    irsend.sendRaw(buff, results.rawlen, 38); 
    oled.printString("Received IR"); 
    // Print received hexadecimal IR code to the OLED screen 
    irrecv.enableIRIn();  
    irrecv.resume(); 
} 
+0

欲しいものは何ですか? 'volatile'を使います。 –

+0

固定タイプミス、揮発性(揮発性ではない) – iGoinify

+0

関連コードを含むスニペットを表示する必要があります。それであなたの問題がどこにあるのか正確に見ることができます。定義上、組み込みマイクロコントローラのような外部プロセスとして結びついており、いつでも変更することができるので、「揮発性」タイプの特性に関連する可能性が高い。 – ryyker

答えて

1

私はそれを正しく理解していれば、あなたがちょうどあなたがこの目的(ideone)のためsprintfを使用することができ、16進文字列にunsigned long値を変換したい:

const unsigned int BUFFER_LENGTH = 16; 
char buffer[BUFFER_LENGTH]; 
unsigned long value = 0xE0E040BF; 
sprintf(buffer, "0x%08X", value); 
printf("%s\n", buffer); // printString(buffer) 

bufferを、oled画面のprintStringメソッドに渡すことができます。

フォーマット指定子%08Xは、printfにformatという値を16進数で指定します。大文字では常に4バイトの8進値がすべて表示され、0で埋められます。

+0

これは印刷のトリックを行うように見えますが、何らかの理由でデータが一致していないか、形式が異なるか、または長さが異なる必要があります。受信したIRコードはsendRaw(powers tv on)で再送信できますが、OLEDの印刷値は期待値ではありません。 – iGoinify

+0

エンディアンに関連するかもしれませんか?これをチェックしてください:https://en.wikipedia.org/wiki/Endianness – Jack

+0

あなたの実装では長さを正確に処理するために長さ修飾子 'l'が必要です。つまり、「0x%08lx」 – semaj

0

あなたはこれを行うことができます:

int IR; 
char hexadec_s[11]; 
sprintf(hexadec_s,"0x%08x",IR); 
printString(hexadec_s); 

は、私は、これはトリックを行うべきだと考えています。それが働いたら教えてください。

+0

と表示されます。 –

+0

これは印刷のトリックを行うように見えますが、何らかの理由でデータが不一致でなければならず、形式や長さが異なる必要があります。受信したIRコードはsendRaw(powers tv on)で再送信できますが、OLEDの印刷値は期待値ではありません。 – iGoinify

+0

これは、 'printString'がうまく実装されている場合に有効です。 –

関連する問題