#1 Re: Програмування Arduino » Как изменить подключение 1602 на шину I2C ? » 2021-11-08 14:13:17

Ура, заработало !!! 
закомментировал строку и все Ок.
// lcd.begin(16, 2);

г0сть,  спасибо за помощь !!!

#2 Re: Програмування Arduino » Как изменить подключение 1602 на шину I2C ? » 2021-11-08 14:06:38

г0сть пише:

Эта што?

Напрямую загрузить сюда не дает, только в архиве. Это скетч - исходник, где надо заменить вывод на 1602 с I2C

Я добавил строки библиотеку
#include "src/LiquidCrystal_I2C.h"
// LiquidCrystal lcd(10, 11, 12, 13, A0, A1);  // RS,E,D4,D5,D6,D7
LiquidCrystal_I2C lcd(0x3F, 16, 2);     // LCD I2C
Выдает ошибку. Исходник загружается нормально, но информации на дисплее нет.

#4 Re: Програмування Arduino » Как изменить подключение 1602 на шину I2C ? » 2021-11-08 13:41:04

г0сть пише:
Константин М пише:

Предполагаю, что этого мало ?

Чего мало? Совета взять библиотеку с і2с? Тогда еще один совет - открыть идущие с библиотекой примеры

Библиотеку установил,
Посветило строку  lcd.begin(16, 2); и выдало ошибку:
no matching function for call to 'LiquidCrystal_I2C::begin(int, int)'

А сюда скетч можно вставить ?

#5 Re: Програмування Arduino » Как изменить подключение 1602 на шину I2C ? » 2021-11-08 13:28:31

г0сть пише:
Константин М пише:

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

Помогите вот с таким вопросом. Есть программа с выводом на дисплей 1602 без контроллера I2C.
в ней такие строки - LiquidCrystal lcd(10, 11, 12, 13, A0, A1);  // RS,E,D4,D5,D6,D7
А у меня дисплей с контролером I2C. Как изменить код для вывода информации ? Это сложно ?

Взять библиотеку с і2с

Предполагаю, что этого мало ? Хотя, попробую.

Попробовал, ругнулось на этой строке - lcd.begin(16, 2);

#6 Програмування Arduino » Как изменить подключение 1602 на шину I2C ? » 2021-11-08 12:51:48

Константин М
відповідей: 11

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

Помогите вот с таким вопросом. Есть программа с выводом на дисплей 1602 без контроллера I2C.
в ней такие строки - LiquidCrystal lcd(10, 11, 12, 13, A0, A1);  // RS,E,D4,D5,D6,D7
А у меня дисплей с контролером I2C. Как изменить код для вывода информации ? Это сложно ?

#7 Re: Апаратні питання » Где купить алюминиевый профиль » 2019-03-19 02:02:17

pops0417 пише:

вот отличный магазинчик
http://diyshop.com.ua/index.php?route=product/category&path=60_105&page=2
сам там брал. доволен smile

Спасибо !!!
Только вчера искал в продаже на вот такой станочек - https://www.youtube.com/watch?v=0rfhMnnnVhw
А еще направляющие для точилки для ножей типа Apex pro.

#8 Re: Апаратні питання » Энкодер отрабатывает только каждый второй сигнал ?? » 2019-02-19 15:14:03

Накормил внука и уложил спать, есть время продолжить. wink
Еще раз ( десятый ) перепроверил подключение. Запустил скетч ( очередной проверочный )

/*
    Rotary Encoder - Interrupt Example
   
    The circuit:
    * encoder pin A to Arduino pin 2
    * encoder pin B to Arduino pin 3
    * encoder ground pin to ground (GND)
*/

#include "Rotary.h"

Rotary r = Rotary(2, 3);

void setup() {
  Serial.begin(57600);
  r.begin();
  PCICR |= (1 << PCIE2);
  PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);
  sei();
}

void loop() {

}

ISR(PCINT2_vect) {
  unsigned char result = r.process();
  if (result == DIR_NONE) {
    // do nothing
  }
  else if (result == DIR_CW) {
    Serial.println("ClockWise");
  }
  else if (result == DIR_CCW) {
    Serial.println("CounterClockWise");
  }
}
Если меняю CLK и DT местами, меняется
ClockWise
CounterClockWise

Без подключения + не работает совсем.
Подключение кнопки ( CW )  в данном варианте ни на что не влияет.

В другом скетче кнопкой можно обнулять показания. Обнуляет.
#define pin_CLK 2
#define pin_DT  3
#define pin_Btn 4

unsigned long CurrentTime, LastTime;
enum eEncoderState {eNone, eLeft, eRight, eButton};
int EncoderA, EncoderB, EncoderAPrev, counter;
bool ButtonPrev;

eEncoderState GetEncoderState() {
  // Считываем состояние энкодера
  eEncoderState Result = eNone;
  CurrentTime = millis();
  if (CurrentTime >= (LastTime + 5)) {
    // Считываем не чаще 1 раза в 5 мс для уменьшения ложных срабатываний
    LastTime = CurrentTime;
    if (digitalRead(pin_Btn) == LOW ) {
      if (ButtonPrev) {
        Result = eButton; // Нажата кнопка
        ButtonPrev = 0;
      }
    }
    else {
      ButtonPrev = 1;
      EncoderA = digitalRead(pin_DT);
      EncoderB = digitalRead(pin_CLK);
      if ((!EncoderA) && (EncoderAPrev)) { // Сигнал A изменился с 1 на 0
        if (EncoderB) Result = eRight;     // B=1 => энкодер вращается по часовой
        else          Result = eLeft;      // B=0 => энкодер вращается против часовой
      }
      EncoderAPrev = EncoderA; // запомним текущее состояние сигнала A
    }
  }
  return Result;
}

void setup() {
  pinMode(pin_DT,  INPUT);
  pinMode(pin_CLK, INPUT);
   pinMode(pin_Btn, INPUT_PULLUP); // Кнопка не подтянута к +5 поэтому задействуем внутренний pull-up резистор
  Serial.begin(115200);
  counter = 0;
}

void loop() {
  switch (GetEncoderState()) {
    case eNone: return;
    case eLeft: {
        counter--;
        break;
      }
    case eRight: {
        counter++;
        break;
      }
    case eButton: {
        counter = 0;
        break;
      }
  }
  Serial.println(counter);
}

Но во всех вариантах показания меняются только на каждом втором повороте энкодера.
На Ардуино еще по шине I2C подключен дисплей 1602 и синтезатор.
Все.

#9 Апаратні питання » Энкодер отрабатывает только каждый второй сигнал ?? » 2019-02-19 10:12:21

Константин М
відповідей: 8

Собрал синтезатор на Si5351A + Ардуино Уно+ энкодер KY-040 + дисплей.
Подключил, прошил, все заработало, НО ! Повернул энкодер на один шаг - ничего, на второй шаг - данные изменились. И так все время. Что вправо, что влево. Показания изменяются только на каждый второй поворот энкодера.
Я обратился к автору программы, он ответил, что у него и у всех, кто повторял эту схему, все работает. Прислал мне несколько программ для проверки энкодера - на всех их энкодер работает точно также. Я заменил энкодер на точно такой же ( купил их 3 штуки ) - ничего не поменялось. Все работает четко, не сбоит, нет ложных срабатываний, но показания изменяются только на каждый второй поворот энкодера.
Можете чем-то помочь ?

Підвал форуму