Arduino unsigned long int 到 char*
Arduino unsigned long int to char*
我正在使用定制的 IRremote 和 SSD1306 库在 Attiny85 上编码。
接收红外数据时,结果以这种方式存储:
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这是三星电视中的电源。
由于 attiny85 中 Serial 的滞后,我不知道如何调试它并使其正常工作。有帮助吗?
编辑(添加相关代码):
#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 format 十六进制数的值,大写字母始终显示 4 个字节的所有 8 个十六进制值并用 0 填充。
你可以这样做:
int IR;
char hexadec_s[11];
sprintf(hexadec_s,"0x%08x",IR);
printString(hexadec_s);
我相信这应该可以解决问题。让我知道它是否有效。
我正在使用定制的 IRremote 和 SSD1306 库在 Attiny85 上编码。
接收红外数据时,结果以这种方式存储:
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这是三星电视中的电源。
由于 attiny85 中 Serial 的滞后,我不知道如何调试它并使其正常工作。有帮助吗?
编辑(添加相关代码):
#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 format 十六进制数的值,大写字母始终显示 4 个字节的所有 8 个十六进制值并用 0 填充。
你可以这样做:
int IR;
char hexadec_s[11];
sprintf(hexadec_s,"0x%08x",IR);
printString(hexadec_s);
我相信这应该可以解决问题。让我知道它是否有效。