Как отобразить текст в матрицу 8x8 с 64-разрядными целыми числами?
У меня есть массив 64-разрядных целых чисел для отображения на светодиодной матрице 8x8
const int LEN1 = sizeof(Hours);
const uint64_t Hours[] = {
0x00043c3c3c3c3c00,
0x000c3c3c3c3c3c00,
0x001c3c3c3c3c3c00,
0x0000001818000000,
0x0000001818100000,
0x0000001818180000,
0x00000018181c0000,
0x000000181c1c0000,
0x0000001c1c1c0000,
0x0000041c1c1c0000,
0x00000c1c1c1c0000
};
и вот у меня есть цикл для его отображения:
void displayImage(uint64_t image) {
for (int i = 0; i < 8; i++) {
byte row = (image >> i * 8) & 0xFF;
for (int j = 0; j < 8; j++) {
lc.setLed(0, i, j, bitRead(row, j));
}
}
}
но я не могу использовать цикл таким образом, и я тоже не разбираюсь в принципах переключения байтов.
не могли бы вы, пожалуйста, объяснить, как работает описанный выше цикл, или помочь мне написать этот цикл следующим образом
const int LEN1 = sizeof(Hours);
void displayImage(Hours[]) {
for (int i = 0; i < LEN1; i++) {
//display Hours
}
}
@gio xanchkava, 👍1
Обсуждение1 ответ
Лучший ответ:
хорошо, но есть некоторые вещи, которых я не знаю о вашем коде и оборудовании, например, может ли библиотека LCD обрабатывать типы данных uint64_t. Я знаю, что функция Serial.print() может обрабатывать только до unit32_t, поэтому я использую ее.
Я думаю, что ваша переменная длины может быть неправильной длины, возможно, вы захотите добавить проверку на это в свой код. Большая часть кода Arduino составляет 8 бит.
void setup() {
Serial.begin(9600);
uint32_t b = 0x0;
const uint64_t Hours[] = {
0x00043c3c3c3c3c00,
0x000c3c3c3c3c3c00,
0x001c3c3c3c3c3c00,
0x0000001818000000,
0x0000001818100000,
0x0000001818180000,
0x00000018181c0000,
0x000000181c1c0000,
0x0000001c1c1c0000,
0x0000041c1c1c0000,
0x00000c1c1c1c0000
};
//const int LEN1 = sizeof(Hours[0]);
const int LEN1 = sizeof(Hours)/sizeof(uint64_t);
Serial.print("Length: ");
Serial.println(LEN1);
for (int i = 0; i < LEN1; i++) {
b=Hours[i]>>16;
Serial.println(b,HEX);
}
}
void loop() {
}
Я думаю, что этот код будет делать то, что вы хотите, по крайней мере, так, как я его понимаю. остерегайтесь типов данных, с которыми может работать ваша библиотека ЖК-дисплеев.
ладно, я вижу, где я набрал этот код, но я устал и нервничаю, и мне пора домой. Но я все равно думаю, что это приблизит вас к тому, где вы хотите быть, @j0h
- Как использовать SPI на Arduino?
- Подключение HX711 к трехпроводному датчику нагрузки
- Правильное использование * и & при передаче объектов в методах.
- Путаница между SPI и I2C для SSD1306 OLED
- ISO C++ запрещает принимать адрес неквалифицированной или заключенной в скобки нестатической функции-члена для формирования указателя на функцию-член
- Разница между массивом char и массивом unsigned char
- Печать содержимого файла SD - карты на ЖК-дисплее
- Отправка строки из RPi в Arduino - Рабочий код
речь идет о отображении текста на светодиодной матрице 8x8 с помощью arduino/, @gio xanchkava
на самом деле речь идет не о циклах в c++, было бы полезно более подробно рассказать об оборудовании, платформе и используемых библиотеках. Типы данных и библиотеки, по-видимому, являются основными проблемами здесь., @j0h
@jsotola, это вопрос для Arduino. речь идет об использовании функции Arduino " Print.print(num, HEX)", которая не имеет версии для типа uint64_t, поэтому ее необходимо заменить как минимум двумя печатями, а начальный 0 должен быть обработан, @Juraj
@Juraj тогда я, наверное, что-то упускаю ... я не вижу серийного кода.print в списке OP ... удалил мои комментарии, @jsotola
@jsotola, извините, некоторые библиотеки отображения реализуют печать базового класса, и ответ j0h смутил меня, заставив подумать, что это так в этом вопросе, @Juraj