Странный символ на lcd-дисплее 20X4
Я пытаюсь сделать радиоуправляемый контроллер.
У меня проблема с моим ЖК-дисплеем.
Я уже дважды проверил проводку, и соединения отличные.
Я сделал печатную плату с помощью Kicad и заказал ее в JLCPCB. У меня какая-то ошибка, видно припаянный провод.
Перед печатной платой я сделал свой проект с макетом, и он отлично работал.
const String menuElem[4] = {"Models", "Trims", "Reverse command", "Channel"};
const int rs = 3, en = 4, d4 = 5, d5 = 6, d6 = 7, d7 = 8;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void menu() {
lcd.clear();
//lcd.setCursor(0,0);
//byte pos = 0;
//int sizeOfanArray = *(&array + 1) - array;
byte menuElemLength = *(&menuElem + 1) - menuElem;
for (byte i = 0; i < menuElemLength; i++) {
lcd.setCursor(2, i);
lcd.println(menuElem[i]);
}
showMenuNav(currentMenuPos);
}
@2CoB9, 👍0
Обсуждение1 ответ
Лучший ответ:
Ваш код для вычисления длины строки
s не имеет смысла. Строковый
тип - это тип объекта. Адреса ваших строковых объектов не будут соответствовать длине символов в этих строках. Вы должны использовать массив строк C, как предложил Juraj, а затем использовать strlen ()
, чтобы получить длину этих строк (строки C имеют нулевой завершающий байт, и strlen()
использует этот нуль для вычисления длины. Обратите внимание, что строки C не могут обрабатывать Unicode.)
В любом случае строкового типа лучше избегать на Arduino, так как строковые объекты имеют тенденцию фрагментировать чрезвычайно ограниченную память кучи на устройствах Arduino и вызывать сбои из-за нехватки памяти.
Да, моя ошибка заключается в использовании строкового объекта, такого как указатель char *
.
Я бы использовал указатель `char *" вместо объекта "String" в моем будущем коде.
Спасибо за ваш ответ!, @2CoB9
- Печать string and integer LCD
- Как отобразить символ º на ЖК-дисплее?
- Отправка значения с одного Arduino на другой
- Черные квадраты дисплея Arduino 16x2
- NodeMCU с RFID RC522 и LCD-модулем интерфейса I2C вместе
- ЖК-дисплей I2C отображает странные символы
- Экран LCD 16*02 I2C показывает только первый напечатанный символ
- Потенциометр 10 кОм против резистора 10 кОм на ЖК-дисплее
попробуйте
const char* menuElem[4] = {"Models", "Trims", "Reverse command", "Channel"};
, @JurajФотографии вашей пользовательской платы и проводки на самом деле нам ничего не говорят. Мне кажется, что у вас есть ошибка в коде. Вы получаете НЕКОТОРЫЕ символы из ваших строк, что говорит мне о том, что ЖК-дисплей работает. Мне кажется, что ваши строки отправляются с неправильной длиной., @Duncan C
Спасибо @Juraj это решает проблему. Я понимаю свою ошибку. Я заменил String на char* в своем коде и в каждом классе. Я использую
strcat
для объединения моего char *, но я не знаю, является ли это лучшим решением. @DuncanC Да, сначала я считал, что у меня плохая связь или что-то в этом роде., @2CoB9