Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
doc:1602:mgul.160021.002 [2018/01/25 06:25] angel_of_death [Разработка необходимой телеметрии] |
doc:1602:mgul.160021.002 [2018/04/28 23:47] (текущий) |
||
---|---|---|---|
Строка 6: | Строка 6: | ||
</hidden> | </hidden> | ||
- | <hidden Текст программы от 23 января 2018 года (в работе проверялось, Inseptima поехала)> | + | <hidden Текст программы от 11 апреля 2018 года (в работе проверялось, Inseptima поехала)> |
<code asm> | <code asm> | ||
#include <Servo.h> | #include <Servo.h> | ||
- | #define Engine 4 | + | #define Engine 2 |
- | #define Engine_pwm 6 | + | #define Engine_pwm 3 |
- | #define R 7 | + | #define R 5 |
- | #define L 8 | + | #define L 4 |
- | int Steering_Angle=5; | + | int Steering_Angle = 15; |
- | int Engine_Speed_Now = 200; | + | int Engine_Speed_Now = 30; |
- | int Steering_Pos = 45; | + | int Steering_Pos = 60; |
- | Servo Steering_Serv; | + | double flag_st = 0; // флаг для сервопривода |
+ | Servo Steering_Serv; | ||
void Engine_Parking_without_brake() { // отключение питания двигателя, остановка за счёт трения | void Engine_Parking_without_brake() { // отключение питания двигателя, остановка за счёт трения | ||
Serial.println("Engine_Parking_without_brake"); | Serial.println("Engine_Parking_without_brake"); | ||
Строка 24: | Строка 25: | ||
delay(1000); | delay(1000); | ||
digitalWrite(Engine, HIGH); | digitalWrite(Engine, HIGH); | ||
+ | flag_st = 0; | ||
} | } | ||
- | void Engine_Forward(){ // прямое вращение двигателя | + | void Engine_Forward() { // прямое вращение двигателя |
Serial.println("En_Forward"); | Serial.println("En_Forward"); | ||
- | digitalWrite(L, LOW); | + | digitalWrite(L, LOW);X |
digitalWrite(R, HIGH); | digitalWrite(R, HIGH); | ||
analogWrite(Engine_pwm, Engine_Speed_Now); | analogWrite(Engine_pwm, Engine_Speed_Now); | ||
+ | flag_st = 1; | ||
} | } | ||
- | void Engine_Back(){ // обратное вращение двигателя | + | void Engine_Back() { // обратное вращение двигателя |
Serial.println("Engine_Back"); | Serial.println("Engine_Back"); | ||
digitalWrite(L, HIGH); | digitalWrite(L, HIGH); | ||
digitalWrite(R, LOW); | digitalWrite(R, LOW); | ||
- | analogWrite(Engine_pwm, Engine_Speed_Now); | + | analogWrite(Engine_pwm, Engine_Speed_Now); |
+ | flag_st = 1; | ||
} | } | ||
- | void Engine_Speed_Up(){ | + | void Engine_Speed_Up() { |
- | if(Engine_Speed_Now<=245){ | + | if (Engine_Speed_Now <= 245) { |
- | Engine_Speed_Now+=10; | + | Engine_Speed_Now += 15; |
- | Serial.print(Engine_Speed_Now); | + | Serial.print(Engine_Speed_Now); |
- | Serial.println(" Engine_Speed_Up "); | + | Serial.println(" Engine_Speed_Up "); |
+ | } | ||
+ | else | ||
+ | Engine_Speed_Now = 255; | ||
} | } | ||
- | else | + | void Engine_Speed_Down() { |
- | Engine_Speed_Now=255; | + | if (Engine_Speed_Now > 40) { |
+ | Engine_Speed_Now -= 15; | ||
+ | Serial.print(Engine_Speed_Now); | ||
+ | Serial.println(" Engine_Speed_Down "); | ||
+ | } | ||
+ | else | ||
+ | Engine_Speed_Now = 40; | ||
} | } | ||
- | void Engine_Speed_Down(){ | + | void Steering_Forward() { |
- | if(Engine_Speed_Now>50){ | + | if (flag_st == 0) { // флаг 0, выравниваемся способом №1 |
- | Engine_Speed_Now-=10; | + | Steering_Pos = 60; |
- | Serial.print(Engine_Speed_Now); | + | Serial.println(" Steering_Forward(60) "); |
- | Serial.println(" Engine_Speed_Down "); | + | Steering_Serv.write(70); |
+ | delay(200); | ||
+ | Steering_Serv.write(35); | ||
+ | delay(200); | ||
+ | Steering_Serv.write(70); | ||
+ | delay(200); | ||
+ | Steering_Serv.write(35); | ||
+ | delay(200); | ||
+ | Steering_Serv.write(Steering_Pos + 2); | ||
+ | } | ||
+ | if (flag_st == 1) { // флаг 1, выравниваемся способом №2 | ||
+ | if (Steering_Pos > 60 && Steering_Pos < 130) { // программная проверка позиции сервы | ||
+ | Steering_Pos = 60; // выравнивание для правого поворота | ||
+ | Serial.println(" Steering_Forward(60) "); | ||
+ | Steering_Serv.write(75); | ||
+ | delay(90); | ||
+ | Steering_Serv.write(33); | ||
+ | delay(90); | ||
+ | Steering_Serv.write(75); | ||
+ | delay(90); | ||
+ | Steering_Serv.write(33); | ||
+ | delay(90); | ||
+ | Steering_Serv.write(45); | ||
+ | } | ||
+ | if (Steering_Pos < 60 && Steering_Pos > -5) { // программная проверка позиции сервы | ||
+ | Steering_Pos = 60; // выравнивание для левого поворота | ||
+ | Steering_Serv.write(75); | ||
+ | delay(90); | ||
+ | Steering_Serv.write(33); | ||
+ | delay(90); | ||
+ | Steering_Serv.write(75); | ||
+ | delay(90); | ||
+ | Steering_Serv.write(33); | ||
+ | delay(90); | ||
+ | Steering_Serv.write(60); | ||
+ | } | ||
+ | } | ||
} | } | ||
- | else | + | void Steering_Right() { |
- | Engine_Speed_Now=45; | + | if (flag_st == 0) { // если стоим, то до упора поворот |
- | } | + | Steering_Pos = 0; |
- | void Steering_Forward(){ // рулевая прямо, требуется выравнивание поворотами левво\право, если нагрузна большая | + | Steering_Serv.write(Steering_Pos); |
- | Steering_Pos = 45; | + | Serial.println("MAX R"); |
- | Serial.println(" Steering_Forward(45) "); | + | } |
- | Steering_Serv.write(60); | + | if (flag_st == 1) { |
- | delay(100); | + | if (Steering_Pos > 5) { // если едем, то плавно рулим |
- | Steering_Serv.write(30); | + | Steering_Pos -= Steering_Angle; |
- | delay(100); | + | Serial.println(Steering_Pos); |
- | Steering_Serv.write(Steering_Pos); | + | Steering_Serv.write(Steering_Pos); |
- | + | } | |
- | Steering_Serv.write(45); | + | } |
- | } | + | |
- | void Steering_Left(){ // при нажатии рулевая немного налево, в зависимости от нагрузки платформы | + | |
- | Serial.print(" Steering_Left "); | + | |
- | if(Steering_Pos > 5){ | + | |
- | Steering_Pos -= Steering_Angle; | + | |
- | Serial.println(Steering_Pos); | + | |
- | Steering_Serv.write(Steering_Pos); | + | |
- | } | + | |
- | } | + | |
- | void Steering_Right(){ // при нажатии рулевая немного направо, в зависимости от нагрузки платформы | + | |
- | Serial.print(" Steering_Right "); | + | |
- | if(Steering_Pos < 85){ | + | |
- | Steering_Pos += Steering_Angle; | + | |
- | Serial.println(Steering_Pos); | + | |
- | Steering_Serv.write(Steering_Pos); | + | |
} | } | ||
+ | void Steering_Left() { | ||
+ | if (flag_st == 0) { // если стоим, то до упора поворот | ||
+ | Steering_Pos = 120; | ||
+ | Steering_Serv.write(Steering_Pos); | ||
+ | Serial.println("MAX L"); | ||
+ | } | ||
+ | if (flag_st == 1) { // если едем, то плавно рулим | ||
+ | if (Steering_Pos < 120) { | ||
+ | Steering_Pos += Steering_Angle; | ||
+ | Serial.println(Steering_Pos); | ||
+ | Steering_Serv.write(Steering_Pos); | ||
+ | } | ||
+ | } | ||
} | } | ||
void setup() { | void setup() { | ||
- | Serial.begin(115200); | + | Serial.begin(38400); |
- | pinMode(Engine, OUTPUT); | + | pinMode(Engine, OUTPUT); |
- | pinMode(Engine_pwm, OUTPUT); | + | pinMode(Engine_pwm, OUTPUT); |
- | pinMode(R, OUTPUT); | + | pinMode(R, OUTPUT); |
- | pinMode(L, OUTPUT); | + | pinMode(L, OUTPUT); |
- | digitalWrite(Engine, HIGH); | + | digitalWrite(Engine, HIGH); |
- | Steering_Serv.attach(5); | + | Steering_Serv.attach(8); |
- | Steering_Serv.write(45); | + | Steering_Forward(); |
} | } | ||
void loop() { | void loop() { | ||
- | char key; | + | char key; |
- | if (Serial.available()> 0) | + | if (Serial.available() > 0) |
- | key = Serial.read(); | + | key = Serial.read(); |
- | switch(key){ | + | switch (key) { |
case 'W': | case 'W': | ||
- | Engine_Forward(); | + | Engine_Forward(); |
- | break; | + | break; |
+ | case 'D': | ||
+ | Serial.print(" Steering_Right "); | ||
+ | Steering_Right(); | ||
+ | break; | ||
+ | case 'S': | ||
+ | Engine_Parking_without_brake(); | ||
+ | break; | ||
case 'A': | case 'A': | ||
- | Steering_Right(); | + | Serial.print(" Steering_Left "); |
- | break; | + | Steering_Left(); |
- | case 'S': | + | break; |
- | Engine_Parking_without_brake(); | + | |
- | break; | + | |
- | case 'D': | + | |
- | Steering_Left(); | + | |
- | break; | + | |
case 'Q': | case 'Q': | ||
- | Engine_Speed_Down(); | + | Engine_Speed_Down(); |
- | break; | + | break; |
case 'E': | case 'E': | ||
- | Engine_Speed_Up(); | + | Engine_Speed_Up(); |
- | break; | + | break; |
case 'X': | case 'X': | ||
- | Engine_Back(); | + | Engine_Back(); |
- | break; | + | break; |
case 'F': | case 'F': | ||
- | Steering_Forward(); | + | Steering_Forward(); |
- | break; | + | break; |
} | } | ||
} | } |