Вопрос по строкам.

Вопросы программирования в системе Ардуино
Аватара пользователя
БлудныйКот
Сообщения: 45
Зарегистрирован: 29 дек 2016, 16:19

Вопрос по строкам.

Сообщение БлудныйКот » 23 май 2017, 22:53

Добрый вечер,
Решил тут старый проект под менюшку переделать.
Создаю массив с пунктами меню.

char* strMainMenu1[4][16] = {" MAIN MENU ",
" CAPACITY ",
" TIME ",
" RESET TIME "};
//Display Menu Option based on Index.
void displayMenu(int x) {

for(uint8_t i = 0; i<LCD_LINES; i++)
{
lcd.setCursor(0, i);
lcd.print(strMainMenu1[i][0]);
}
}

выводится правильно только первая строка... Подскажите, что здесь не правильно?


Эдуард
Администратор
Сообщения: 484
Зарегистрирован: 30 окт 2016, 20:53

Re: Вопрос по строкам.

Сообщение Эдуард » 24 май 2017, 00:30

Здравствуйте!

char* strMainMenu1 это массив указателей на строки. 4 строки значит 4 указателя, значит 4 элемента массива. Зачем здесь двумерный массив.

Код: Выделить всё

char* strMainMenu1[4] = {" MAIN MENU ",
" CAPACITY ",
" TIME ",
" RESET TIME "};
//Display Menu Option based on Index.
void displayMenu(int x) {

for(uint8_t i = 0; i<LCD_LINES; i++)
{
lcd.setCursor(0, i);
lcd.print(strMainMenu1[i]);
}
}


Если оставить двумерный массив, то так, но большая часть его останется пустым.

Код: Выделить всё

lcd.print(strMainMenu1[0][i]);


Массивы строк объявляют как массив указателей. Это связано с тем, что строки могут иметь разную длину, и приходится резервировать двумерный массив данных, рассчитанный на самую длинную строку. А указатели требуют одинаковое количество ячеек памяти.

Аватара пользователя
БлудныйКот
Сообщения: 45
Зарегистрирован: 29 дек 2016, 16:19

Re: Вопрос по строкам.

Сообщение БлудныйКот » 24 май 2017, 07:49

Спасибо, теперь понял и всё работает.
Я думал, что я объявил массив на 4 строки и каждая по 16 символов. Как раз для дисплея 1602 или 1604.


Вернуться в «Программирование Ардуино»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя