Перевод INT в const void *

forfrends
Offline
Зарегистрирован: 24.02.2015

Всем привет! Имеется 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);
}

Можете что-то подсказать?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

itoa тебя спасет, или sprintf

forfrends
Offline
Зарегистрирован: 24.02.2015

По сути вопрос в чем: как правильно собирать строку для вывода? На пример есть строки и переменные:

"Curent Tme:"
char H[] = "19"
int M = 45

как из этого собрать строку "Curent Tme: 19:45" в таком виде чтобы ее приняла библиотека?

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

char H = "19"

Что за бред ???

Библиотеке нужен адрес буфера со строкой !

forfrends
Offline
Зарегистрирован: 24.02.2015

Не бред, а лишь пример. Так как некоторые библиотеки возвращают строчные переменные, а некоторые числовые. Вот я и ломаю голову над тем как теперь все это вывести на дисплей...

Можете привести пример?

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

char это один символ !!!

forfrends
Offline
Зарегистрирован: 24.02.2015

Не обязательно (просто я забыл скобки добавить). Это может быть массив: http://arduino.ru/Reference/String

пример:
char myString[] = "This is the first line"

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

где у вас скобки ?

negavoid
Offline
Зарегистрирован: 09.07.2016

:)))

[] это массив char-ов, а char - это один символ.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017
#include <alloca.h>
.
.
.

char *buf = alloca(20);

int hours=21;
int minutes = 31;

sprintf(buf,"Time: %02d:%02d", hours, minutes);

твоябиблиотека.printString(buf, X, Y);

 

forfrends
Offline
Зарегистрирован: 24.02.2015

Спасибо! Так работает!

forfrends
Offline
Зарегистрирован: 24.02.2015

:)

А если нужно объединить разнотипные данные? Как в моем примере выше, где некоторые переменные имеют текстовый формат.

negavoid
Offline
Зарегистрирован: 09.07.2016

%s

forfrends
Offline
Зарегистрирован: 24.02.2015

Спасибо! Раньше с такой заморочкой преобразования / объединения данных не сталкивался. Сижу, изучаю.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

гугаль: "Спецификаторы форматов printf"

forfrends
Offline
Зарегистрирован: 24.02.2015
sadman41
Offline
Зарегистрирован: 19.10.2016

snprintf() безопасней.