Смещение данных в массиве и добавление данных

ardo
Offline
Зарегистрирован: 23.11.2016

Помогите пожалуйста.

Вывожу на дисплей значение, как правильно сделать чтобы сдвинуть значение на 1 записать 0x00 для заполнения пустотой первого разряда диспелея

if(SetHotAirT<100){itoa(SetHotAirT,buf[i<<1],10);} //если значение менее 100градусов
else itoa(SetHotAirT,buf,10);  //значение и более градусов
 lcd_PutStr16x12(buf,50,25);

 

b707
Offline
Зарегистрирован: 26.05.2017

4 раза написал - а в чем суть проблемы -  все равно не понятно. Не умеете вывести ноль на дисплей? Или не знаете как вывести в конкретную позицию? или еще что...

sadman41
Offline
Зарегистрирован: 19.10.2016
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А что это й Вас во втором параметре itoa в первой строке?

Вы не могли бы выкладывать код полностью?

ardo
Offline
Зарегистрирован: 23.11.2016

Это я пытался сдвинуть данные но для массивов такой метод не катит. 

Это и есть код. типы данных  char buf[16];  int SetHotAirT;

В SetHotAirT попадает значение с задания энкодера  от 50 до 450 градусов

вот мне и нужно чтобы в buf записывались значения если менее 100градусов в первый элемент масива 0x00 пустое значение, а в следующие два значения от 50 до 99градусов.

 

ardo
Offline
Зарегистрирован: 23.11.2016

Пробовал я sprintf изначально, но почему то у меня начинает дисплей зависать и появлятся черный фон (дисплей работает по SPI).

b707
Offline
Зарегистрирован: 26.05.2017

разберитесь со строками, учебник почитайте, в конце концов. Весь ваш код - чушь полная.

Например. чтобы строка начиналась с "пустого места" - в ее первую позицию надо записывать не ноль (0х00), а код символа пробела

И подумайте, возможно вам будет проще не сдвигать символы в массиве - а просто нарисовать строчку на экране чуть правее?

b707
Offline
Зарегистрирован: 26.05.2017

ardo пишет:

Пробовал я sprintf изначально, но почему то у меня начинает дисплей зависать

да все потому же - что вы не понимаете, что делаете. Я нашел в инете ваш вопрос про "зависает LCD дисплей", оно?

https://www.cyberforum.ru/arduino/thread2571760.html

посмотрите, сколько вы места отводите в буфере ? - 3 символа? так как же программе не виснуть. если вы потом в этот буфер запихиваете строчки аж до 6-7 символов?

Вообще, с января можно было учебник Кернигана-ричи наизусть выучить, а вы все ходите по форумам с таким же бредовым кодом и такими же детскими вопросами

ardo
Offline
Зарегистрирован: 23.11.2016

Зачем мне учить весь учебник? если мне нужно всего лишь решить одну задачу.

b707
Offline
Зарегистрирован: 26.05.2017

ardo пишет:

Зачем мне учить весь учебник? если мне нужно всего лишь решить одну задачу.

ну хотя бы затем. чтобы не сидеть над одной строчкой по полгода.

 

Думаю, на этом ветку можно закрыть. По правилам форума здесь помогают тем, кто хочет чему-то научится сам.  Кому "нужно решить одну задачу" - заказывают работу в платном разделе.

 

ardo
Offline
Зарегистрирован: 23.11.2016

Да конечно можно закрывать.

b707
Offline
Зарегистрирован: 26.05.2017

ardo. вы с 16-года "решаете одну задачу" -  "как правильно вывести число на индикатор".

http://arduino.ru/forum/programmirovanie/arduinods18b20max7219-nuzhno-razobratsya

Не надоело дурнем ходить? Неужели за 3 года так и не прищло понимание. что программирование "методом тыка" не освоишь?

ardo
Offline
Зарегистрирован: 23.11.2016

Давай без оскорблений! Сам по форумам шаришся, скажи ещё что сам никогда ничего ни у кого не спрашивал. Моё хобби электроника , с программированием практически не сталкиваюсь, попросил людей помочь, и тут уже 20 постов не по существу.

b707
Offline
Зарегистрирован: 26.05.2017

ardo пишет:

попросил людей помочь, и тут уже 20 постов не по существу.

как тебе помочь, когда ты ответов не понимаешь

Ответы в сообщении #2 - разбирайся

ardo
Offline
Зарегистрирован: 23.11.2016

Я не просто так спросил за смещение и записи в первый элемент массива, потому что при смещении через функцию дисплея значение остается в памяти дисплея, и чтобы его отчистить нужно новое значение в моем случае пустое(пробел).

const unsigned char LCD_FONT12_16[][24] PROGMEM = 
{   
 { 0x00, 0xf8, 0xfe, 0x06, 0x03, 0x83, 0xc3, 0x63, 0x33, 0x1e, 0xfe, 0xf8,
   0x00, 0x07, 0x1f, 0x1e, 0x33, 0x31, 0x30, 0x30, 0x30, 0x18, 0x1f, 0x07},  // code 48 (0)
 { 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x0e, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x3f, 0x3f, 0x30, 0x30, 0x30, 0x00},  // code 49 (1)
 { 0x00, 0x1c, 0x1e, 0x07, 0x03, 0x03, 0x83, 0xc3, 0xe3, 0x77, 0x3e, 0x1c,
   0x00, 0x30, 0x38, 0x3c, 0x3e, 0x37, 0x33, 0x31, 0x30, 0x30, 0x30, 0x30},  // code 50 (2)
 { 0x00, 0x0c, 0x0e, 0x07, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xe7, 0x7e, 0x3c,
   0x00, 0x0c, 0x1c, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x1f, 0x0e},  // code 51 (3)
 { 0x00, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x07, 0xff, 0xff, 0x00, 0x00,
   0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x3f, 0x3f, 0x03, 0x03},  // code 52 (4)
 { 0x00, 0x3f, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0xe3, 0xc3, 0x83,
   0x00, 0x0c, 0x1c, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x1f, 0x0f},  // code 53 (5)
 { 0x00, 0xc0, 0xf0, 0xf8, 0xdc, 0xce, 0xc7, 0xc3, 0xc3, 0xc3, 0x80, 0x00,
   0x00, 0x0f, 0x1f, 0x39, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x1f, 0x0f},  // code 54 (6)
 { 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xc3, 0xf3, 0x3f, 0x0f, 0x03,
   0x00, 0x00, 0x00, 0x00, 0x30, 0x3c, 0x0f, 0x03, 0x00, 0x00, 0x00, 0x00},  // code 55 (7)
 { 0x00, 0x00, 0xbc, 0xfe, 0xe7, 0xc3, 0xc3, 0xc3, 0xe7, 0xfe, 0xbc, 0x00,
   0x00, 0x0f, 0x1f, 0x39, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x1f, 0x0f},  // code 56 (8)
 { 0x00, 0x3c, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xe7, 0xfe, 0xfc,
   0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x38, 0x1c, 0x0e, 0x07, 0x03, 0x00},  // code 57 (9)
 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},   // code 58 ( ) 
{ 0x00, 0x00, 0x07, 0x05, 0x07, 0x00, 0xFF, 0xFF, 0x03, 0x03, 0x03, 0x07,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x30, 0x30, 0x30, 0x38}, 	//code 59
{ 0x00, 0x00, 0x00, 0x80, 0xE0, 0x30, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00,
  0x0C, 0x0E, 0x0F, 0x0F, 0x0F, 0x0A, 0x0F, 0x0F, 0x0F, 0x0E, 0x0C, 0x00}  // code 60 tranle
};

 

b707
Offline
Зарегистрирован: 26.05.2017

и к чему вы тут приводите массив фонта? То. что в фонте пустые пиксели кодируются нулем - не имеет ровно никакого отношения к вашей проблеме. Это снова показывает, как мало вы понимаете в вопросе.

Подумайте хотя бы о том, что в массиве фонта каждое значение означает отдельный пиксель, а вам нужно очистить место целого символа...

Повторяю, вам нужно записывать в первую позицию вашего массива пробел. а не ноль. И, на всякий случай. может вы и этого не знаете - код пробела не равен нулю. С нулем гарантировано работать не будет

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

ardo пишет:

Зачем мне учить весь учебник? если мне нужно всего лишь решить одну задачу.

Зачем мне, ради тарелки холодца, всего кабанчика колоть?! (с) ;))))) Люблю таких!

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

От sprintf будет виснуть, само-собой. Я же дал ссылку на snprintf()