#include <Servo.h>
#define Engine 7
#define RPWM 3
#define LPWM 4
#define Steering_Pin 5
#define Steering_Angle 5
int Engine_Speed_Now = 50;
int Steering_Pos = 45;
Servo Steering_Serv;
void Engine_Parking_without_brake() { // отключение питания двигателя, остановка за счёт трения
Serial.println("Engine_Parking_without_brake");
digitalWrite(RPWM, LOW);
digitalWrite(LPWM, LOW);
delay(1000);
}
void Engine_Forward(){ // прямое вращение двигателя
Serial.println("En_Forward");
digitalWrite(RPWM, LOW);
digitalWrite(LPWM, HIGH);
for(int i=0;i<=Engine_Speed_Now;i++){
analogWrite(Engine, Engine_Speed_Now);
delay(10);
}
}
void Engine_Back(){ // обратное вращение двигателя
Serial.println("Engine_Back");
digitalWrite(LPWM, LOW);
digitalWrite(RPWM, HIGH);
for(int i=0;i<=Engine_Speed_Now;i++){
analogWrite(Engine, Engine_Speed_Now);
delay(10);
}
}
void Steering_Forward(){ // рулевая прямо, требуется выравнивание поворотами левво\право, если нагрузна большая
Steering_Pos = 45;
Serial.println(" Steering_Forward(45) ");
Steering_Serv.write(Steering_Pos);
}
void Steering_Left(){ // при нажатии рулевая немного налево, в зависимости от нагрузки платформы
Serial.print(" Steering_Left ");
if(Steering_Pos > 15){
Steering_Pos -= Steering_Angle;
Serial.println(Steering_Pos);
Steering_Serv.write(Steering_Pos);
}
}
void Steering_Right(){ // при нажатии рулевая немного направо, в зависимости от нагрузки платформы
Serial.print(" Steering_Right ");
if(Steering_Pos < 75){
Steering_Pos += Steering_Angle;
Serial.println(Steering_Pos);
Steering_Serv.write(Steering_Pos);
}
}
void Engine_Speed_Up(){
if(Engine_Speed_Now<254){
Engine_Speed_Now+=10;
Serial.print(Engine_Speed_Now);
Serial.println(" Engine_Speed_Up ");
}
else
Engine_Speed_Now=255;
}
void Engine_Speed_Down(){
if(Engine_Speed_Now>50){
Engine_Speed_Now-=10;
Serial.print(Engine_Speed_Now);
Serial.println(" Engine_Speed_Down ");
}
else
Engine_Speed_Now=50;
}
void setup() {
Serial.begin(38400);
Steering_Serv.attach(Steering_Pin);
pinMode(Engine, OUTPUT);
pinMode(RPWM, OUTPUT);
pinMode(LPWM, OUTPUT);
}
void loop() {
char key;
if (Serial.available()> 0)
key = Serial.read();
switch(key){
case 'W':
Engine_Parking_without_brake();
Engine_Forward();
break;
case 'A':
Steering_Left();
break;
case 'S':
Engine_Parking_without_brake();
break;
case 'D':
Steering_Right();
break;
case 'Q':
Engine_Speed_Down();
break;
case 'E':
Engine_Speed_Up();
break;
case 'X':
Engine_Parking_without_brake();
Engine_Back();
break;
case 'F':
Steering_Forward();
break;
}
}