Подскажите пожалуйста. У меня есть скетч (не мой). Мне нужно сделать плавный пуск и плавную остановку 4х двигателей через PWM от 100 до 150.
#define PWMA 12 //A Скорость двигателя
#define DIRA1 34
#define DIRA2 35 //A Направление двигателя
#define PWMB 8 //B Скорость двигателя
#define DIRB1 37
#define DIRB2 36 //B Направление двигателя
#define PWMC 9 //C Скорость двигателя
#define DIRC1 43
#define DIRC2 42 //C Направление двигателя
#define PWMD 5 //D Скорость двигателя
#define DIRD1 A4
#define DIRD2 A5 //D Направление двигателя
//Управление двигателем, вперед, назад, стоп
//левое переднее колесо
#define MOTORA_FORWARD(pwm) do{digitalWrite(DIRA1,LOW); digitalWrite(DIRA2,HIGH);analogWrite(PWMA,pwm);}while(0)
#define MOTORA_STOP(x) do{digitalWrite(DIRA1,LOW); digitalWrite(DIRA2,LOW); analogWrite(PWMA,0);}while(0)
#define MOTORA_BACKOFF(pwm) do{digitalWrite(DIRA1,HIGH);digitalWrite(DIRA2,LOW); analogWrite(PWMA,pwm);}while(0)
//правое переднее колесо
#define MOTORB_FORWARD(pwm) do{digitalWrite(DIRB1,HIGH); digitalWrite(DIRB2,LOW);analogWrite(PWMB,pwm);}while(0)
#define MOTORB_STOP(x) do{digitalWrite(DIRB1,LOW); digitalWrite(DIRB2,LOW); analogWrite(PWMB,0);}while(0)
#define MOTORB_BACKOFF(pwm) do{digitalWrite(DIRB1,LOW);digitalWrite(DIRB2,HIGH); analogWrite(PWMB,pwm);}while(0)
//левое заднее колесо
#define MOTORC_FORWARD(pwm) do{digitalWrite(DIRC1,LOW); digitalWrite(DIRC2,HIGH);analogWrite(PWMC,pwm);}while(0)
#define MOTORC_STOP(x) do{digitalWrite(DIRC1,LOW); digitalWrite(DIRC2,LOW); analogWrite(PWMC,0);}while(0)
#define MOTORC_BACKOFF(pwm) do{digitalWrite(DIRC1,HIGH);digitalWrite(DIRC2,LOW); analogWrite(PWMC,pwm);}while(0)
//правое заднее колесо
#define MOTORD_FORWARD(pwm) do{digitalWrite(DIRD1,HIGH); digitalWrite(DIRD2,LOW);analogWrite(PWMD,pwm);}while(0)
#define MOTORD_STOP(x) do{digitalWrite(DIRD1,LOW); digitalWrite(DIRD2,LOW); analogWrite(PWMD,0);}while(0)
#define MOTORD_BACKOFF(pwm) do{digitalWrite(DIRD1,LOW);digitalWrite(DIRD2,HIGH); analogWrite(PWMD,pwm);}while(0)
#define SERIAL Serial
//PWM определение параметра
#define MAX_PWM 200
#define MIN_PWM 130
int Motor_PWM = 150;
//Управление движением двигателя Определение макроса
// ↑A-----B↑
// | ↑ |
// | | |
// ↑C-----D↑
void ADVANCE()
{
MOTORA_FORWARD(Motor_PWM);MOTORB_FORWARD(Motor_PWM);
MOTORC_FORWARD(Motor_PWM);MOTORD_FORWARD(Motor_PWM);
}
// ↓A-----B↓
// | | |
// | ↓ |
// ↓C-----D↓
void BACK()
{
MOTORA_BACKOFF(Motor_PWM);MOTORB_BACKOFF(Motor_PWM);
MOTORC_BACKOFF(Motor_PWM);MOTORD_BACKOFF(Motor_PWM);
}
// =A-----B↑
// | ↖ |
// | ↖ |
// ↑C-----D=
void LEFT_1()
{
MOTORA_FORWARD(Motor_PWM);MOTORB_STOP(Motor_PWM);
MOTORC_STOP(Motor_PWM);MOTORD_FORWARD(Motor_PWM);
}
// ↓A-----B↑
// | ← |
// | ← |
// ↑C-----D↓
void LEFT_2()
{
MOTORA_BACKOFF(Motor_PWM);MOTORB_FORWARD(Motor_PWM);
MOTORC_FORWARD(Motor_PWM);MOTORD_BACKOFF(Motor_PWM);
}
// ↓A-----B=
// | ↙ |
// | ↙ |
// =C-----D↓
void LEFT_3()
{
MOTORA_BACKOFF(Motor_PWM);MOTORB_STOP(Motor_PWM);
MOTORC_STOP(Motor_PWM);MOTORD_BACKOFF(Motor_PWM);
}
// ↑A-----B=
// | ↗ |
// | ↗ |
// =C-----D↑
void RIGHT_1()
{
MOTORA_FORWARD(Motor_PWM);MOTORB_STOP(Motor_PWM);
MOTORC_STOP(Motor_PWM);MOTORD_FORWARD(Motor_PWM);
}
// ↑A-----B↓
// | → |
// | → |
// ↓C-----D↑
void RIGHT_2()
{
MOTORA_FORWARD(Motor_PWM);MOTORB_BACKOFF(Motor_PWM);
MOTORC_BACKOFF(Motor_PWM);MOTORD_FORWARD(Motor_PWM);
}
// =A-----B↓
// | ↘ |
// | ↘ |
// ↓C-----D=
void RIGHT_3()
{
MOTORA_STOP(Motor_PWM);MOTORB_BACKOFF(Motor_PWM);
MOTORC_BACKOFF(Motor_PWM);MOTORD_STOP(Motor_PWM);
}
// ↑A-----B↓
// | ↗ ↘ |
// | ↖ ↙ |
// ↑C-----D↓
void rotate_1(uint8_t pwm_A,uint8_t pwm_B,uint8_t pwm_C,uint8_t pwm_D)
{
MOTORA_BACKOFF(pwm_A);MOTORB_FORWARD(pwm_B);
MOTORC_FORWARD(pwm_C);MOTORD_BACKOFF(pwm_D);
}
// ↓A-----B↑
// | ↙ ↖ |
// | ↘ ↗ |
// ↓C-----D↑
void rotate_2(uint8_t pwm_A,uint8_t pwm_B,uint8_t pwm_C,uint8_t pwm_D)
{
MOTORA_FORWARD(pwm_A);MOTORB_BACKOFF(pwm_B);
MOTORC_BACKOFF(pwm_C);MOTORD_FORWARD(pwm_D);
}
// =A-----B=
// | = |
// | = |
// =C-----D=
void STOP()
{
MOTORA_STOP(Motor_PWM);MOTORB_STOP(Motor_PWM);
MOTORC_STOP(Motor_PWM);MOTORD_STOP(Motor_PWM);
}
void IO_init()//Определение режима контакта
{
pinMode(PWMA, OUTPUT);
pinMode(DIRA1, OUTPUT);pinMode(DIRA2, OUTPUT);
pinMode(PWMB, OUTPUT);
pinMode(DIRB1, OUTPUT);pinMode(DIRB2, OUTPUT);
pinMode(PWMC, OUTPUT);
pinMode(DIRC1, OUTPUT);pinMode(DIRC2, OUTPUT);
pinMode(PWMD, OUTPUT);
pinMode(DIRD1, OUTPUT);pinMode(DIRD2, OUTPUT);
pinMode(Trig,OUTPUT);
pinMode(Echo,INPUT);
STOP();
}
void setup()
{
SERIAL.begin(9600);
}
void loop()
{
ADVANCE();
} ```