ARDUINO Наливатор. Обсуждение проекта

Drongo783

✩✩✩✩✩✩✩
3 Авг 2020
73
7
З повагою всіх учасників.
Це мій варіант "Дозатор напоїв"

хочу спросить... как работают датчики 223... стабильно... адекватно.. а то я пробовал 229... голову сломал... не хотят работать... глючат .. а 223 вроде отключаются минут через 5-6... как они ведут себя.... нормально?
 

Sirotopov

✩✩✩✩✩✩✩
13 Ноя 2020
10
0
Всем доброго времени суток. Прошу совета.
Собрал наливатор по схеме Алекса , но энкодер работает некорректно. Нажатие на него работает хорошо, но когда крутишь он в обе стороны повышает показание, но не понижает. Когда я поставил прошивку 1.3 и если палец прижать снизу энкодер, он начинал работать нормально. С прошивкой 1.5 уже такой трюк не работает.

На форуме нашел совет:

По энкодеру.
1. Посмотрите подтяжку пинов для энкодера. Я сделал. Возможно для вашего случая это мешает

Цитата:
Обычный энкодер не работал. Добавил в мини классе энкодера подтяжку пинов. Все заработало))
pinMode (_clk, INPUT_PULLUP);
pinMode (_dt, INPUT_PULLUP);"

2. Попробуйте изменить тип энкодера в настройках:

// пин clk, пин dt, пин sw, направление (0/1), тип (0/1)
encMinim enc(ENC_CLK, ENC_DT, ENC_SW, 0, 1);

Первый пункт сделал, не помог( возможно после него палец перестал помогать, а не из-за прошивки), а второй совет не понял как сделать.

У меня ещё помпа и светодиоды не приехали, может ли их отсутствие влиять?
Буду благодарен за советы.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,266
1,303
Москва
Второй пункт самый важный.
encMinim enc(ENC_CLK, ENC_DT, ENC_SW, 0, 1);
ENC_CLK, ENC_DT, ENC_SW - это пины
0 - Это направление
1 - это типы , сменить на 0

Обычный энкодер, голый, идет без обвязки и ему надо подтяжку, а те. что на платах идут уже с подтяжкой и как правило с аппаратным антидребезгом
 

Sirotopov

✩✩✩✩✩✩✩
13 Ноя 2020
10
0
Второй пункт самый важный.
encMinim enc(ENC_CLK, ENC_DT, ENC_SW, 0, 1);
ENC_CLK, ENC_DT, ENC_SW - это пины
0 - Это направление
1 - это типы , сменить на 0

Обычный энкодер, голый, идет без обвязки и ему надо подтяжку, а те. что на платах идут уже с подтяжкой и как правило с аппаратным антидребезгом
Спасибо, я так понял надо это менять в файле encUniversalMinim.h ?
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,266
1,303
Москва
Тогда делаете вот что. Берете голую плату, подключаете к ней энкодер так же как в наливторе, на те же самые пины, идете на сайт гайвера, вот сюда: https://alexgyver.ru/encoder/. Тут качаете последнюю версию с примерами и пробуете их. Там четко описано куда что подключить и что где поменять для разных типов. Как только добъетесь, что энкодер верно работает - возвращаетесь к наливатору.
 

Sirotopov

✩✩✩✩✩✩✩
13 Ноя 2020
10
0
Тогда делаете вот что. Берете голую плату, подключаете к ней энкодер так же как в наливторе, на те же самые пины, идете на сайт гайвера, вот сюда: https://alexgyver.ru/encoder/. Тут качаете последнюю версию с примерами и пробуете их. Там четко описано куда что подключить и что где поменять для разных типов. Как только добъетесь, что энкодер верно работает - возвращаетесь к наливатору.
Спасибо, буду делать
 

VICLER

★★★★★★✩
9 Дек 2019
801
662
Hamburg
@Sirotopov, возможно, что проблема в самом энкодере. Он должен работать при любом типе, выбранном в прошивке. Если всегда работает только в одну сторону, то либо плохое соединение одного из контактов (CLK или DT), либо дефект в механике.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,266
1,303
Москва
Если выбрать энкодер не того типа, то он меняет значение только в одну сторону. А тут либо только в одно, либо не работает.
 

Sirotopov

✩✩✩✩✩✩✩
13 Ноя 2020
10
0
@Sirotopov, возможно, что проблема в самом энкодере. Он должен работать при любом типе, выбранном в прошивке. Если всегда работает только в одну сторону, то либо плохое соединение одного из контактов (CLK или DT), либо дефект в механике.
Я вот тоже склоняюсь что сам энкодер с браком. Я сейчас по совету загружу простое меню и посмотрю как он там будет себя вести
 

VICLER

★★★★★★✩
9 Дек 2019
801
662
Hamburg
Если выбрать энкодер не того типа, то он меняет значение только в одну сторону. А тут либо только в одно, либо не работает.
Не совсем. Тип энкодера задаёт количество импульсов на один шаг поворота энкодера. Если выбран не правильный тип, то при повороте на одно деление, значение объёма либо изменится на 2 единицы, либо при повороте на два деления, объём изменится на одну единицу.
C++:
_state = digitalRead(_clk);
  _swState = digitalRead(_sw);

  if (_state != _lastState) {
    _turnState = true;
    _turnFlag = !_turnFlag;
    if (_turnFlag || !_type) {
      if (digitalRead(_dt) != _lastState) {
        if (_swState) _encState = 1;
        else _encState = 3;
      } else {
        if (_swState) _encState = 2;
        else _encState = 4;
      }
    }
    _lastState = _state;
  }
А вращение постоянно в одну сторону может быть если всегда digitalRead(_dt) != _lastState, либо всегда digitalRead(_dt) == _lastState, что говорит о том, что сигнал на _dt не изменяется вообще.

@Sirotopov, исправность можете также проверить изменив направление вращения либо в прошивке, либо физически перепаять пины CLK и DT. По идее, если один из них неисправен, изменение направления вращения приведёт к тому, что при прокрутке вообще ничего не будет изменяться.
 
Изменено:

Sirotopov

✩✩✩✩✩✩✩
13 Ноя 2020
10
0
Если я пины s2 и кеу меняю местами то начинает вверх поднимать только. И что самое интересное, я вернул как было, перезагрузил, он продолжил вверх поднимать, ещё раз перезагрузил и вниз начал.

И при загрузке прошивки выдает такое, оэто норма?

C:\Users\Zver\Desktop\GyverDrink-master\firmware\GyverDrink_v1.5\GyverDrink_v1.5.ino:76:0: warning: "COLOR_DEBTH" redefined
#define COLOR_DEBTH 2 // цветовая глубина: 1, 2, 3 (в байтах)

In file included from C:\Program Files (x86)\Arduino\libraries\microLED/microLED.h:40:0,
from C:\Users\Zver\Desktop\GyverDrink-master\firmware\GyverDrink_v1.5\GyverDrink_v1.5.ino:69:
C:\Program Files (x86)\Arduino\libraries\microLED/ws2812_send.h:37:0: note: this is the location of the previous definition
#define COLOR_DEBTH 3

In file included from C:\Users\Zver\Desktop\GyverDrink-master\firmware\GyverDrink_v1.5\GyverDrink_v1.5.ino:69:0:
C:\Program Files (x86)\Arduino\libraries\microLED/microLED.h:58:1: warning: 'typedef' was ignored in this declaration
typedef struct LEDdata {
^~~~~~~
C:\Users\Zver\Desktop\GyverDrink-master\firmware\GyverDrink_v1.5\c_func.ino: In function 'void serviceMode()':
C:\Users\Zver\Desktop\GyverDrink-master\firmware\GyverDrink_v1.5\c_func.ino:6:61: warning: invalid conversion from 'byte* {aka unsigned char*}' to 'int8_t* {aka signed char*}' [-fpermissive]
disp.runningString(serviceText, sizeof(serviceText), 150);
^
In file included from C:\Users\Zver\Desktop\GyverDrink-master\firmware\GyverDrink_v1.5\GyverDrink_v1.5.ino:67:0:
C:\Program Files (x86)\Arduino\libraries\GyverTM1637/GyverTM1637.h:46:7: note: initializing argument 1 of 'void GyverTM1637::runningString(int8_t*, byte, int)'
void runningString(int8_t DispData[], byte amount, int delayMs); // бегущая строка (array, sizeof(array), задержка в мс)
^~~~~~~~~~~~~
Скетч использует 11284 байт (36%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 552 байт (26%) динамической памяти, оставляя 1496 байт для локальных переменных. Максимум: 2048 байт.
 

Sirotopov

✩✩✩✩✩✩✩
13 Ноя 2020
10
0
убрал Pullup
pinMode (_clk, INPUT_PULLUP);
pinMode (_dt, INPUT_PULLUP);"

и как было если пальцем снизу энкодера зажать то начинает нормально работать