我在本网站上看到这个字节数组转换为uint64_t转换为绘制字母 A ;
我认为这个字节数组进入uint64_t转换是减少代码大小并保存arduino IC代码存储空间。
字节数组:
const byte IMAGES[][8] = {
{
B00011000,
B00100100,
B01000010,
B01111110,
B01000010,
B01000010,
B01000010,
B00000000
}};
uint64_t数组:
const uint64_t IMAGES[] = {
0x004242427e422418
};
如何通过查看上面的led矩阵图像,将上面显示的字节数组转换为uint64_t而不使用像this website这样的工具?
答案 0 :(得分:0)
如果是小端
uint64_t IMAGE = 0;
for (int i = 0; i < (sizeof(byte) * 8); i++)
{
IMAGE += ((uint64_t) byteIMAGE[i] & 0xffL) << (8 * i);
}
如果是大端
uint64_t IMAGE = 0;
for (int i = 0; i < (sizeof(byte) * 8); i++)
{
IMAGE = (IMAGE << 8) + (byteIMAGE[i] & 0xff);
}
答案 1 :(得分:0)
希望这个例子可以帮助你,转换的主要功能是
void displayImage(uint64_t image)
// ARDUINO NANO
#include "LedControl.h"
LedControl lc = LedControl(4, 3, 2, 1);
const uint64_t IMAGES[] = {
0x6666667e66663c00, // A
0x3e66663e66663e00, // B
0x3c66060606663c00 // C
};
const int IMAGES_LEN = sizeof(IMAGES) / sizeof(uint64_t);
void setup() {
Serial.begin(9600);
lc.shutdown(0, false);
lc.setIntensity(0, 8);
lc.clearDisplay(0);
}
void loop() {
for (int i = 0; i < IMAGES_LEN; i++) {
displayImage(IMAGES[i]);
delay(1000);
}
}
void displayImage(uint64_t image) {
for (int i = 0; i < 8; i++) {
byte row = (image >> i * 8) & 0xFF;
Serial.println(row); // <- SHOW
for (int j = 0; j < 8; j++) {
lc.setLed(0, i, j, bitRead(row, j));
}
}
Serial.println("---");
}
0x8040201008040201
等于
B10000000, // 1
B01000000, // 2
B00100000, // 4
B00010000, // 8
B00001000, // 16
B00000100, // 32
B00000010, // 64
B00000001 // 128
函数 i 中的是行 j 是列bitRead(x,n)
告诉你是位置(i,j)必须是ON或OFF
// ex. for the value 128 on a generic row
for (int j = 0; j < 8; j++) {
Serial.println( bitRead(128, j));
}