#define pumpPin 10 // ШИМ-контрольований пін
byte pumpSpeed = 100; // Цільова потужність мотору в % (змінюється вами)
byte currentPumpPower = 0; // Поточна потужність мотору в %
unsigned long lastPowerChangeTime = 0; // Час останньої зміни потужності
const word powerChangeInterval = 400; // Інтервал зміни потужності (150 мс на 5%)
const byte powerChangeStep = 5; // Розмір кроку зміни потужності (5%)
int pumpPwm = 0;
void setup() {
Serial.begin(9600);
pinMode(pumpPin, OUTPUT);
}
void loop() {
pwmPump();
}
void pwmPump() {
if (currentPumpPower == pumpSpeed) return;
if (millis() - lastPowerChangeTime > powerChangeInterval) {
if (currentPumpPower < pumpSpeed) {
currentPumpPower += powerChangeStep; // Збільшуємо потужність
if (currentPumpPower > pumpSpeed) currentPumpPower = pumpSpeed;
} else if (currentPumpPower > pumpSpeed) {
currentPumpPower -= powerChangeStep; // Зменшуємо потужність
if (currentPumpPower < pumpSpeed) currentPumpPower = pumpSpeed;
}
int pumpPwm = map(currentPumpPower, 0, 100, 0, 255);
Serial.println(pumpPwm);
analogWrite(pumpPin, pumpPwm); // Встановлюємо ШИМ
lastPowerChangeTime = millis(); // Оновлюємо час
}
}