для четырёх стаканов лучше оставить #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); }
А для выбора режима думаю, если хватит свободных пинов, сделаю отдельный механический переключатель. Но могу ещё передумать)
У энкодера есть прописанный, но не используемый режим, кручение при нажатииотдельный механический переключатель.