Totalnie nie rozumiem, czemu w poniższym kodzie mój robot płynnie się rozpędza, płynnie hamuje po czym ponownie się nie rozpędza 🙁. Raz się rozpędzi, raz przyhamuje po czym cały czas działa na najniższych ustawionych obrotach
/*Płynny rozruch i hamowanie jednego z silników robota poprzez PWM
Oznaczenia:
L (left) – lewy,
R (right) – prawy,
DIR (direction) – kierunek,
PWM – pin, na który podajemy sygnał PWM ustawiający prędkość danego silnika
1. Obrót w prawo - płynne rozpędzanie
2. Obrót w lewo - płynne rozpędzanie*/
#define PWM_MAX 165 //ustalenie maksymalnego wypełnienia sygnału podawanego na silniki
#define PWM_MIN 110 //ustalenie minimalnego wypełnienia sygnąłu podawanego na silniki
// przypisanie pinów dla lewego silnika
#define L_PWM 5
#define L_DIR 4
//przypisanie pinów dla prawego silnika
#define R_PWM 6
#define R_DIR 9
void setup() {
//zdefiniowanie pinów
//konfiguracja pinów mostka H
pinMode(L_PWM, OUTPUT);
pinMode(L_DIR, OUTPUT); //lewy silnik
pinMode(R_PWM, OUTPUT);
pinMode(R_DIR, OUTPUT); //prawy silnik
}
void loop() {
RightMotorAcceleration(PWM_MIN, PWM_MAX);
delay(8500);
stopMotors();
delay(1000);
}
//FUNKCJA STERUJĄCA ROZPĘDZANIEM PRAWEGO SILNIKA
void RightMotorAcceleration (int przyspieszanie, int zwalnianie) { //tworzę funkcję do obsługi silnika prawego
for (przyspieszanie = PWM_MIN; przyspieszanie < PWM_MAX; przyspieszanie++) { //przyspieszanie silnika
digitalWrite(L_DIR, 0); //ustaw kierunek jazdy na "do przodu", 0 - do przodu, 1 - do tyłu, zgodnie z tabelą prawdy mostka H
analogWrite(L_PWM, przyspieszanie); //ustaw wypełnienie sygnału na wartość przyspieszenie
delay(100);
}
for (zwalnianie = PWM_MAX; zwalnianie > PWM_MIN; zwalnianie--) { //zwalnianie silnika
digitalWrite(L_DIR, 0); //ustaw kierunek jazdy na "do przodu", 0 - do przodu, 1 - do tyłu, zgodnie z tabelą prawdy mostka H
analogWrite(L_PWM, zwalnianie); //ustaw wypełnienie sygnału na wartość przyspieszenie
delay(100);
}
}
//FUNKCJA ZATRZYMUJĄCA ROBOTA
void stopMotors() {
analogWrite(L_PWM, 0); //ustaw wypełnienie sygnału na 0 - czyli stop lewego silnika
analogWrite(R_PWM, 0); //ustaw wypełnienie sygnału na 0 - czyli stop prawego silnika
}