для четырёх стаканов лучше оставить #define NUM_SHOTS 4В принципе для системы из 4 стаканов , так и победил ))
В настройке указал что у меня 5 рюмок
Домашню позицию указал как 5
И поставил для 5 пятой позиции парковки нужные мне градусы
Теперь все работает как нужно , всем не равнодушным ОГРОМНЕЙШИЙ РЕСПЕКТ И СПАСИБО , я у себя так и оставлю , максимум еще бы поменял нижний предел 5мл , так веселее мне, но если не покажут где поменять , то у себя так все окончательно и оставлю, мне эта прошивка понравилась больше всего из того что я здесь попробывал )))
такая же. попробуй поставить позицию рюмки 0 и парковку 0 и в автоматическом режиме налить её
сейчас к сожалению нет возможности проверить. Вы пробовали так с этой библиотекой? Это не оригинальная от Алекса. Я её изменил немного, когда была похожая проблема как у Вас:такая же. попробуй поставить позицию рюмки 0 и парковку 0 и в автоматическом режиме налить её
    if (abs(_servoTargetPos - (int)_newPos) < SS_DEADZONE) {
        if (_autoDetach && _servoState) {
            if (_timeoutCounter > SS_TIMEOUT) {
                _newPos = _servoTargetPos;
                _servoCurrentPos = _servoTargetPos;
                _servoState = false;
                _servo.detach();
                return true;
            } else {
                _timeoutCounter++;
            }
        }
    }    else {
        if (_autoDetach && !_servoState) {
            _servoState = true;
            _servo.attach(_pin);
        }
        _timeoutCounter = 0;
    }    if (abs(_servoTargetPos - (int)_newPos) < SS_DEADZONE) {                //Разница между текущим положением сервы и целью меньше чем мертвая зона
        if (_servoTargetPos == (int)_newPos){
            _servoState = true;
        }
        if (_autoDetach && _servoState) {                                  
            if (_timeoutCounter > SS_TIMEOUT) {                                
                _newPos = _servoTargetPos;
                _servoCurrentPos = _servoTargetPos;
                _servoState = false;
                _servo.detach();
                return true;
            } else {
                _timeoutCounter++;
            }
        }      
    } else {
        if (_autoDetach && !_servoState) {
            _servoState = true;
            _servo.attach(_pin);
        }        if (_servoTargetPos == (int)_newPos){
            _servoState = true;
        }boolean ServoSmooth::tick() {
    if (millis() - _prevServoTime >= SS_SERVO_PERIOD) {
        _prevServoTime = millis();
        if (ServoSmooth::tickManual()) return true;
        else return false;
    }
}boolean ServoSmooth::tick() {
    if (millis() - _prevServoTime >= SS_SERVO_PERIOD) {
        _prevServoTime = millis();
        ServoSmooth::tickManual();
    }
    return !_servoState;
}за такие деньги можно купить несколько ttp229
// выводим объём и режим
void dispMode() {
  disp.displayInt(thisVolume);
  if (workMode) disp.displayByte(0, _A);
  else {
    disp.displayByte(0, _P);
    pumpOFF();
  }
}void dispMode(uint8_t num) {
  disp.displayInt(num);
  workMode ? disp.displayByte(0, _A) : disp.displayByte(0, _P);
}Спасибо!@Praporatorr, заменой функции void dispMode() в файле c_func на оригинальную от Алекса.
и изменением функции dispMode(uint8_t num) для отображения актуального обьёма во время заправки там же:C-like:// выводим объём и режим void dispMode() { disp.displayInt(thisVolume); if (workMode) disp.displayByte(0, _A); else { disp.displayByte(0, _P); pumpOFF(); } }
мне просто не нравится, что расположение цифр не по центруC:void dispMode(uint8_t num) { disp.displayInt(num); workMode ? disp.displayByte(0, _A) : disp.displayByte(0, _P); }
А для выбора режима думаю, если хватит свободных пинов, сделаю отдельный механический переключатель. Но могу ещё передумать)
У энкодера есть прописанный, но не используемый режим, кручение при нажатииотдельный механический переключатель.
