Создание символов на lcd

Тема в разделе "Arduino & Shields", создана пользователем Ye11ow, 26 сен 2018.

  1. Ye11ow

    Ye11ow Нерд

    Друзья, приветствую.
    Помогите, не могу понять в чем дело. Не получается создать собственный символ на LCD 1602.
    После компиляции экран пустой, т.е. никаких символов не отображено. Правильность подключения и работоспособность ЖКИ проверил на другом коде - все исправно.

    Вот код с моим символом:
    Код (C++):
    #include <LiquidCrystal.h>

    LiquidCrystal lcd (4, 5, 6, 7, 8, 9); // k vivodam na lcd
    byte a[8] = { B00100, B01010, B01010, B01010, B10001, B10001,B01110, B00000 };
    void setup() {
      lcd.begin (16, 2);
      lcd.createChar(1, a);
    }

    void loop() {
       lcd.write (byte(0));
    }
     
  2. lcd.write (byte(0)); в сетап или после задержку чтобы не слать постоянно.
     
    arkadyf нравится это.
  3. Ye11ow

    Ye11ow Нерд

    Дело в другом...к сожалению.
     
  4. Ye11ow

    Ye11ow Нерд

    нашел косяк в коде:
    Код (C++):
    lcd.createChar(1, a[8]);

    lcd.write (byte(0));
     
    Но дело не в этом. Это я пытался экспериментировать.
     
    Пушной звер нравится это.
  5. Daniil

    Daniil Гуру

    А когда создается символ что означает 1?
    А что вызывается при byte(0)?
     
  6. Daniil

    Daniil Гуру

    кажется это и есть ответ на мой вопрос выше.
    Но всё равно не работает?
     
  7. Ye11ow

    Ye11ow Нерд

    Народ, как такое может быть при таком коде? Как думаете, что не так?
    Код (C++):
    #include <LiquidCrystal.h>

    LiquidCrystal lcd (4, 5, 6, 7, 8, 9); // k vivodam na lcd
    byte a[8] = { B00100,
                  B00100,
                  B11111,
                  B00100,
                  B00000,
                  B00000,
                  B00000,
                  B00000 };
    void setup() {
      lcd.createChar(0, a[8]);
      lcd.begin (16, 2);
    }

    void loop() {
       lcd.write (byte(0));
    }
    u46K1-HsRdU.jpg
     
  8. Ye11ow

    Ye11ow Нерд

    byte 0 вызывает символ, который я указал в массиве.
    Теперь работает так, как я выше написал. ХА-ХА
     
  9. DIYMan

    DIYMan Guest

    Не так тот факт, что ты в loop с охренительной частотой фигачишь в экран. Перенеси из loop строчку кода в конец setup и посмотри - будут изменения?
     
  10. ZAZ-965

    ZAZ-965 Гуру

    Код (C++):
    byte a[8] = { B00100,
                  B00100,
                  B11111,
                  B00100,
                  B00000,
                  B00000,
                  B00000,
                  B00000 };

      lcd.createChar(0, a[8]); //Вылез за пределы массива
     
    Вышел за пределы массива и слепил символ из того что было.
     
    Ye11ow, Mitrandir и DIYMan нравится это.
  11. Ye11ow

    Ye11ow Нерд

    В этом случае у меня будет заполнена одна клетка, а если в loop поставить lcd.write, то у меня заполнятся все клетки.
     
  12. Ye11ow

    Ye11ow Нерд

    Все заработало. Спасибо всем.
    Очень странно то, что изначально такой же код прописывал, а он мне какую-то х***ю показывал на ЖКИ.
     
  13. Ye11ow

    Ye11ow Нерд

    Кому интересно, вот исправный код, при котором ЖКИ полностью будет заполнен моим символом.
    Код (C++):
    #include <LiquidCrystal.h>

    LiquidCrystal lcd (4, 5, 6, 7, 8, 9); // k vivodam na lcd
    byte a[8] = { B00100,
                  B00100,
                  B01010,
                  B01010,
                  B01010,
                  B10001,
                  B10101,
                  B01110 };
    void setup() {
      lcd.createChar(0, a);
      lcd.begin (16, 2);
    }
    void loop() {
    lcd.write (byte(0));
    }
     
  14. b707

    b707 Гуру

    не такой же.
    Изначально ты создавал символ номер 1, а выводил на экран символ 0 - так что не удивительно
     
  15. Ye11ow

    Ye11ow Нерд

    Дорогой, изначально было 0 и 0, я некорректно скопировал сюда просто после того, как экспериментировал с этими цифрами, вот и все.
     
  16. b707

    b707 Гуру

    ну если ты "экспериментировал", будет ли выводится символ 1, если его описать как символ 0 - то тем более неудивительно, что не работало :)
    это как эксперимеентировать, не заработает ли сломаный холодильник, если втыкать в розетку вилку от торшера :)
     
  17. Ye11ow

    Ye11ow Нерд

    Экспериментировал это было в процессе, я хотел вместо 0 поставить 1 и не успел. Да короче, какая разница вообще. Суть в том,что дело совершенно не в этом было