Преобразование int в unsigned char для отображения на Nokia 5110
Я работал над небольшим проектом, получая некоторые изображения, отображаемые на экране Nokia 5110 через Arduino. Я получаю его работу, но одна из проблем, которые у меня есть, заключается в том, что я хотел бы иметь список целых чисел и преобразовать этот массив беззнаковых символов, который требуется для отображения. Вообще у меня есть что-то вроде этого, что работает из коробки.
unsigned char src [] PROGMEM = {0x00, 0x00}
Удивительно, но я обнаружил, что это также работает
unsigned char src [] PROGMEM = {255, 255}
Но когда у меня есть такой список
int src [] = {255,255}
и попробуйте преобразовать его в массив беззнаковых символов, вещи не отображаются правильно
unsigned char new_src[2];
for (int i=0; i<2; i++){
new_src[i] = (unsigned char) src[i];
}
Когда я пытаюсь показать это, оно явно сломано. Я думал, что достаточно просто бросить int
в unsigned char
(он не работает, даже если я его не бросаю).
Вот как я отображаю массив (для 84x48 вышеуказанные массивы были просто примером) :
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
display.drawBitmap(0, 0, src, 2, 48, BLACK);
display.display();
На более заметке:
В конце игры должен быть файл со списком int. Затем я бы прочитал этот список int в массив и преобразовал его в массив беззнаковых символов, а затем отобразил его.
@Snuh, 👍-2
Обсуждение1 ответ
Идея заключается в том, что я прочитал бы список int из файла ( у меня есть несколько файлов, которые я бы перебрал) и преобразовал бы этот список в массив беззнаковых символов на каждой итерации цикла.
Файл может быть как потоком байтов, так и потоком ints (или uints). Если бы это было так, преобразование не нужно было бы делать - просто прочитайте байт и сохраните его, прочитайте байт и сохраните его .... Если вместо этого это символьное представление значений, "37, 150, 8, ...", снова прочитайте символы одного значения, преобразуйте их в int8_t
или uint8_t
и сохраните их в своем байтовом массиве. Найдите функции atoi() или sscanf (), чтобы выполнить преобразование.
- Wire.write недопустимое преобразование из 'char*' в 'const uint8_t*
- Хранить целочисленное значение денег на RFID-метке
- Преобразование int или float в массив байтов в ардуино
- Не выводится на serial monitor, отправляя строку на serial.print
- Типы данных Arduino
- результат арифметической операции отличается от ожидаемого результата
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
Как вы отображаете " src`?, @Edgar Bonet
@EdgarBonet отредактировано в исходном сообщении, @Snuh
1. Что вы подразумеваете под "_работами"? 2. Почему массивы длины 2? Для растрового изображения 84×48 вам нужен массив размером 528 байт. 3. По-прежнему ли это работает, если массивы "PROGMEM" являются "const"? 4. Зачем вам нужен список " int`? Кроме пустой траты оперативной памяти, что это дает вам такого, чего нет в списке "uint8_t"?, @Edgar Bonet
1. "работает", как при правильном отображении изображения. 2. Это был просто пример для простоты. 3. Да, это все еще работает. 4. Потому что я считываю целочисленные значения из файла. 4. Мои навыки C не так остры, как ваши, поэтому мне жаль, что я трачу ОЗУ впустую. @EdgarBonet, @Snuh
Помимо упоминания об этом, я не думаю, что @EdgarBonet имел в виду дополнительную оперативную память (или флэш - память), но тот факт, что хранение ваших данных в качестве 'unsigned char src [] PROGMEM' работает для вас-почему бы не использовать это?, @JRobert
@JRobert Я не могу поместить их в код Arduino во время компиляции. Идея заключается в том, что я бы прочитал список int из файла ( у меня есть несколько файлов, которые я бы пересмотрел) и преобразовал этот список в массив символов без знака на каждой итерации цикла. Если есть способ сохранить массив символов без знака в файле и прочитать его напрямую, я с таким же успехом мог бы это сделать. Я пытаюсь автоматизировать процесс перехода на веб-сайт, чтобы преобразовать свое растровое изображение, а затем скопировать результат в свой код Arduino. У меня есть часть преобразования, выполненная с помощью скрипта Python, и теперь я пытаюсь передать ее в Arduino., @Snuh