Liquidcrystal & wire

Тема в разделе "Arduino & Shields", создана пользователем Temyxxa, 18 апр 2020.

  1. Temyxxa

    Temyxxa Нуб

    Всем привет, я пришёл к тупику.
    Упростил свою проблему до кода из примера.
    Пример из LiquidCrystal-->Hello World.
    Удалил для удобства комментарии и добавил "проблемный" код на строках 0 и 5 (объявление "#include <Wire.h>" и подключение к шине I2C в качестве ведомого устройства "Wire.begin(0x27);" )

    Код (C++):
    #include <Wire.h>
    #include <LiquidCrystal.h>
    const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
    LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
    void setup() {
        Wire.begin(0x27);
      lcd.begin(16, 2);
      lcd.print("hello, world!");
    }
    void loop() {
      lcd.setCursor(0, 1);
      lcd.print(millis() / 1000);
    }
     
    Ведущий видит устройство, но никакие надписи на дисплей не выводятся.
    Сама ардрунка работает, проверял на мигающем светодиоде, не выводится именно текст.
    Тестировал на версиях Arduino IDE 1.6.5 и 1.8.12

    Идея в том, чтобы одна ардуинка могла показывать некие буквы на экране получая их от ведущей. Мною был выбран протокол I2C как самый малозатратный по проводам и пониманию.
    Буду рад любым идеям =)
     
  2. NikitOS

    NikitOS Король шутов Администратор

    Ну так-то у Вас на четверной строке дисплей инициализируется не на I²C. Для работы по I²C отдельная библиотека есть.
     
  3. Temyxxa

    Temyxxa Нуб

    Я же не писал что у меня дисплей I²C. Дисплей обычный, поэтому и инициализируется как обычный =)
    Без "Wire.begin(0x27);" он отлично работает.
     
  4. NikitOS

    NikitOS Король шутов Администратор

    Плата какая?
     
  5. Temyxxa

    Temyxxa Нуб

    Pro mini 5V 16MHz на MEGA328P AU
     
    Последнее редактирование: 18 апр 2020
  6. Temyxxa

    Temyxxa Нуб

    [​IMG]

    Бросил на 10-ть минут с кодом:
    Код (C++):
    void setup() {
      pinMode(13,OUTPUT);
        Wire.begin(0x27);
      lcd.begin(16, 2);
      lcd.print("hello, world!");
        digitalWrite(13,HIGH);
     
    }
    void loop(){
      digitalWrite(13,HIGH);
      delay(1000);
       digitalWrite(13,LOW);
      delay(1000);
      }
     
  7. Navigator

    Navigator Нуб

    А где у вас в коде реализована функция чтения данных с интерфейса i2c
    Код (C++):
    #include <Wire.h>
    void setup()
    {
      Wire.begin(8);                // подключиться к i2c шине с адресом #8
      Wire.onReceive(receiveEvent); // зарегистрировать обработчик события
      Serial.begin(9600);           // настроить последовательный порт для вывода
    }
    void loop()
    {
      delay(100);
    }
    //   функция, которая будет выполняться всякий раз, когда от мастера принимаются данные
    //   данная функция регистрируется как обработчик события, смотрите setup()
    void receiveEvent(int howMany)
    {
      while (Wire.available()) {
        char c = Wire.read();    // принять байт как символ
        Serial.print(c);         // напечатать символ
      }
    }
    Пример из описания библиотеки, думаю тут есть всё что нужно для решения.