Вопросы по массивам строк

Nya
Offline
Зарегистрирован: 05.02.2020

1) Как преобразовать строку в имя переменной (массива)?

  uint8_t c0[] = {0,0,0,17,17,0,0,0};  
  uint8_t c1[] = {0,0,8,16,1,2,0,0};
  uint8_t c2[] = {0,0,12,0,0,6,0,0};

  for (byte i=0; i<=2; i++) {lcd.createChar(i, "c"+i);}  // надо чтобы были имена массивов как c1, c2, с3

2)  Как записать в  массив указателей на строки новую строку по указанной позиции, или заменить некоторые буквы в строке, если это не сложнее?

char* InputName[] = {"Hello", "World Smile", "abcd"} ; // это начальный массив
char MyString[] = "Arduino"; // эту строку надо записать в InputName[0] 
cahr MySymbols[] = "AB"; // эти буквы надо записать вместо двух посл. символов в inputName[1]

т.е.

2а) в InputName[0] надо записать MyString[] или любой текст, с заменой имеющейся там "Hello"

2б) в InputName[1] записать буквы "AB" вместо двух последних букв. Можно прочитать строку из массива, изменить ее, и записать целиком как в пункте 2а, но меня интересует замена конкретных букв

Итоговый массив указателей должен "выглядеть" как:

char* InputName[] = {"Arduino", "World SmiAB", "abcd"};

 

Подскажите как это лучше сделать. А то гугл явных наглядных примеров на такие "сложные" случаи не выдает ))

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

Nya пишет:

1) Как преобразовать строку в имя переменной (массива)?

  uint8_t c0[] = {0,0,0,17,17,0,0,0};  
  uint8_t c1[] = {0,0,8,16,1,2,0,0};
  uint8_t c2[] = {0,0,12,0,0,6,0,0};

  for (byte i=0; i<=2; i++) {lcd.createChar(i, "c"+i);}  // надо чтобы были имена массивов как c1, c2, с3

никак. Имена существуют только в исходном коде, после компиляции все обращения к переменным делаются не по имени, а по адресу в памяти, поэтому для компилятора строка "c1" никак не связана с переменной с1

Вместо того чтоб создавать отдельные строки с0 с1 с2 - создайте массив

uint8_t c[3][8] = {{0,0,0,17,17,0,0,0 ),
                         {0,0,8,16,1,2,0,0},
                         {0,0,12,0,0,6,0,0} };

  for (byte i=0; i<=2; i++) {lcd.createChar(i, c[i]);} 

 

 

Nya
Offline
Зарегистрирован: 05.02.2020

1) Печалька. Плохой компилятор )) 

2а) Я чёт читал про всякие strncpy(), а всё просто сработало: InputName[1] = MyString;

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

Вы знаете хороший компилятор?

Nya
Offline
Зарегистрирован: 05.02.2020

Нет. Познакомите?

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

Я на Вас надеялся. Мои компиляторы имён не оставляют.

Nya
Offline
Зарегистрирован: 05.02.2020

Продолжим день печали))

Есть плата с МК, по нажатию пимпочек изредка выводящая текст по параллели 4 bit на 1602. 

Хочется чтобы ардуино и этот МК выводили текст на один дисплей.

Можно подключится к пимпочкам МК и сделать в ардуино под них обработчик для всех возможных комбинаций, чтобы ардуино выводил текст "как у МК" + дополнительно свой, но лень.

Насколько будет геморно читать ардуиной данные, которые МК посылает на дисплей, чтобы их преобразовать в строки, и вывести ардуиной на дисплей? Или читать из дисплея то что МК записал в него (типа оба master и коммутатор на шину дисплея, ы), чтобы ардуино тоже выводил на этот дисплей?

Или принимать параллельные данные с МК ардуиной, и перенаправлять их на дисплей, а если даных нет, выводить свой текст. 

Где-то мельком прочитал, что если подключатся к выходам 4 bit на дисплей, то надо декодировать данные идущие на LCD логическим анализатором, и непонятно каким образом, гемор в общем.

Есть варианты для такой затеи попроще?

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

Nya пишет:

Есть варианты для такой затеи попроще?

конечно есть. Не жидись, купи ардуине и тому МК по дисплею

Nya
Offline
Зарегистрирован: 05.02.2020

Уже, но морда прибора не резиновая и смотрится не очень. Я бы купил какой-нить 2004 чтобы у него верхняя половина со своим интерфейсом, а нижняя со своим, два дисплея в одном, габариты меньше. Но человечество в обозримом будущем до таких нанотехнологий врядли дорастет (

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

Поставь 3-й МК, пусть проксирует стрим от первых двух.