Перевод INT в const void *
- Войдите на сайт для отправки комментариев
Пнд, 14/10/2019 - 17:51
Всем привет! Имеется E-Inc дисплей, подключение через сериал, Библиотека для работы с дисплеем: https://github.com/Arduinolibrary/DFRobot_E_paper/blob/master/epd.zip
Самый простой пример вывода текста:
#include <epd.h>
int i = 465;
char Buffer[] = "Hello String";
void setup(void)
{
epd_init(); // inicjalizacja
epd_wakeup(); // pobudka
epd_set_memory(MEM_NAND); // wybor pamieci NAND
delay(1000);
epd_set_color(BLACK, WHITE); // czarne litery, biale tlo
epd_clear(); // czyszczenie ekranu
epd_set_en_font(ASCII64); // uastawiamy czcionki zwykle o rozmiarze 64
epd_disp_string("ASCII64: Hello, World!", 0, 50); // wyswietlamy powitanie
epd_disp_string(Buffer, 0, 120); // wyswietlamy powitanie
epd_udpate();
}
void loop(void)
{
}
Но вот я никак не могу понять как вывести переменную. На пример i, которая имеет значение 465. На все мои попытки сделать преобразование типов я получаю ошибку типа:
error: invalid conversion from 'int' to 'const void*' [-fpermissive]
Функция принимает либо явную строку типа: "Hello String", либо массив символов:
char Buffer[] = "Hello String"; epd_disp_string(Buffer, 0, 120);
Но тоже не понятно как присвоить новое значение буферу. Не посимвольно же вводить! В библиотеке функция вывода текста на дисплей выглядит так:
void epd_disp_string(const void * p, int x0, int y0)
{
int string_size;
unsigned char * ptr = (unsigned char *)p;
string_size = strlen((const char *)ptr);
string_size += 14;
_cmd_buff[0] = FRAME_B;
_cmd_buff[1] = (string_size >> 8) & 0xFF;
_cmd_buff[2] = string_size & 0xFF;
_cmd_buff[3] = CMD_DRAW_STRING;
_cmd_buff[4] = (x0 >> 8) & 0xFF;
_cmd_buff[5] = x0 & 0xFF;
_cmd_buff[6] = (y0 >> 8) & 0xFF;
_cmd_buff[7] = y0 & 0xFF;
strcpy((char *)(&_cmd_buff[8]), (const char *)ptr);
string_size -= 5;
_cmd_buff[string_size] = FRAME_E0;
_cmd_buff[string_size + 1] = FRAME_E1;
_cmd_buff[string_size + 2] = FRAME_E2;
_cmd_buff[string_size + 3] = FRAME_E3;
_cmd_buff[string_size + 4] = _verify(_cmd_buff, string_size + 4);
_putchars(_cmd_buff, string_size + 5);
}
Можете что-то подсказать?
itoa тебя спасет, или sprintf
По сути вопрос в чем: как правильно собирать строку для вывода? На пример есть строки и переменные:
как из этого собрать строку "Curent Tme: 19:45" в таком виде чтобы ее приняла библиотека?
charH ="19"Что за бред ???
Библиотеке нужен адрес буфера со строкой !
Не бред, а лишь пример. Так как некоторые библиотеки возвращают строчные переменные, а некоторые числовые. Вот я и ломаю голову над тем как теперь все это вывести на дисплей...
Можете привести пример?
char это один символ !!!
Не обязательно (просто я забыл скобки добавить). Это может быть массив: http://arduino.ru/Reference/String
пример:
charmyString[] ="This is the first line"где у вас скобки ?
:)))
[] это массив char-ов, а char - это один символ.
Спасибо! Так работает!
:)
А если нужно объединить разнотипные данные? Как в моем примере выше, где некоторые переменные имеют текстовый формат.
%s
Спасибо! Раньше с такой заморочкой преобразования / объединения данных не сталкивался. Сижу, изучаю.
гугаль: "Спецификаторы форматов printf"
Вот, как раз читаю: http://mypractic.ru/urok-30-tekstovye-stroki-v-arduino-konvertirovanie-dannyx-v-stroki-i-naoborot-klass-string.html
snprintf() безопасней.