簡體   English   中英

Arduino unsigned long int to char*

[英]Arduino unsigned long int to char*

我正在使用定制的 IRremote 和 SSD1306 庫在 Attiny85 上編碼。

接收 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)

我正在努力將接收到的 IR 值打印到 OLED SSD1306 屏幕。 用戶能夠查看接收到的代碼並將其保存到 EEPROM,因此我嘗試了所有不同的轉換,但我無法以顯示接收到的十六進制代碼的方式將 results.value 打印到屏幕上(例如 0xE0E040BF,它是在三星電視上開機)。

由於 Serial 在 attiny85 中的滯后,我不知道如何調試它並使其工作。 有什么幫助嗎?

編輯(添加相關代碼):

#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();   
}

如果我理解正確,您只想將unsigned long值轉換為十六進制字符串,您可以為此使用sprintf ( ideone ):

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 將值格式化為十六進制數,大寫字母始終顯示 4 個字節的所有 8 個十六進制值,並用 0 填充它。

你可以這樣做:

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

我相信這應該可以解決問題。 讓我知道它是否有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM