Инструменты пользователя

Инструменты сайта


10i_2025_algo

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
10i_2025_algo [2025/10/07 14:21]
super_admin [РОБОТ МФТИ]
10i_2025_algo [2025/10/07 14:22] (текущий)
super_admin [РОБОТ МФТИ]
Строка 489: Строка 489:
  
 <​code>​ <​code>​
-#include <​IRremote.h>​ // подключаем библиотеку для работы с ИК-приёмником 
- 
- 
-const byte IR_RECEIVE_PIN = 8; // указываем пин, к которому подключен ИК-приёмник 
- 
-#include <​Servo.h>​ //  подключаем библиотеку для работы с сервоприводом 
-Servo myservo7; ​ // создать объект myservo ​ 
-Servo myservo12; ​ // создать объект myservo ​ 
- 
  
 const int LM_s1 = 10; // левый мотор вход 1 const int LM_s1 = 10; // левый мотор вход 1
Строка 503: Строка 494:
 const int RM_s1 = 5; // правый мотор вход 1 const int RM_s1 = 5; // правый мотор вход 1
 const int RM_s2 = 6; // правый мотор вход 2 const int RM_s2 = 6; // правый мотор вход 2
 +
 +int led_pin = 13;
 +// Укажем пины для подключения УЗ датчика
 +int trigPin = 12; 
 +int echoPin = 11;  ​
 +int s_for_obj = 0; 
 +// текущее состояние системы
 +int state = 0; // начальное состояние
  
 void setup(){ void setup(){
  ​Serial.begin(9600);​  ​Serial.begin(9600);​
- ​IrReceiver.begin(IR_RECEIVE_PIN,​ ENABLE_LED_FEEDBACK);​ 
    
  //​правый  //​правый
     pinMode(RM_s1,​ OUTPUT);     pinMode(RM_s1,​ OUTPUT);
     pinMode(RM_s2,​ OUTPUT);     pinMode(RM_s2,​ OUTPUT);
-    ​//​левый+ //​левый
     pinMode(LM_s1,​ OUTPUT);     pinMode(LM_s1,​ OUTPUT);
     pinMode(LM_s2,​ OUTPUT);     pinMode(LM_s2,​ OUTPUT);
 +// УЗ
 +    pinMode(trigPin,​ OUTPUT); ​
 +    pinMode(echoPin,​ INPUT); ​
 +// светодиод
 +    pinMode(led_pin,​ OUTPUT);
 +
 +
 +
  
-    myservo12.attach(12); ​ //​указать пин, к которому подключен сервпривод 
-    myservo7.attach(7); ​ //​указать пин, к которому подключен сервпривод 
 } }
  
-void loop() { 
-    if (IrReceiver.decode()) { 
-        Serial.println(IrReceiver.decodedIRData.decodedRawData);​ // выводим код нажатой кнопки в десятичном формате 
  
-        switch ​(IrReceiver.decodedIRData.decodedRawData+int dist() // функция для ​вычисления ​расстояния 
-            case 785449215: ​// Код кнопки "вперед" +{ 
-                //​Serial.println("​up"​);​ +  int t,s; // локальные переменные время, расстояние 
-                ​moveForward(); +  // установить высокий уровень на пине Trig 
-                break; +  ​digitalWrite(trigPin, 1); 
-            case 768737535: ​// Код кнопки "назад"​ +  // подождать 10 мс  
-                ​moveBackward();​ +  delay(10/16);  
-                break; +  ​digitalWrite(trigPin,​ 0);  
-            case 752025855: ​// Код кнопки "влево" +  // узнаем время 
-                ​turnLeft(); +  t = pulseIn(echoPin, 1);  
-                ​break;​ +  // вычисляем расстояние 
-            case 735314175: ​// Код кнопки "​вправо" +  s = t * 0.034/2;  
-                ​turnRight(); +  ​return ​(s); 
-                break+}
-            case 1387069695: ​// Код кнопки "​остановка" (обычно это код повторного нажатия) +
-                ​stopMotors(); +
-                ​break;​ +
-            case 1437204735: ​// Код кнопки "​A" ​ +
-                ​check_servo()+
-                ​break;​ +
-            default: +
-               ​stopMotors(); +
-               break; +
-        ​}+
  
-        IrReceiver.resume(); // готовимся к следующему сигналу+ 
 + 
 +void loop() { 
 +    s_for_obj = dist(); 
 +    //Serial.println(s_for_obj ​);// вывод измеренного расстояния в окно сообщений 
 +    //​delay(20/​16);​  
 +Serial.println(state);​ 
 +switch (state) { 
 +  case 0: // начальное состояние:​ вперёд до первого препятствия 
 +  case 2: // после первого поворота: вперёд до второго препятствия 
 +    if (s_for_obj == 0 || s_for_obj > 50){ 
 +         ​moveForward();​ 
 +    } else { 
 +         ​stopMotors();​ 
 +         state ++;
     }     }
 +    break;
 +
 +  case 1: // перед первым препятствием:​ левый поворот
 +  case 3: // перед вторым препятствием:​ левый поворот
 +    turnLeft();
 +    delay(2970/​16);​
 +    state ++;
 +    stopMotors();​
 +    break;
 +
 +  case 4: // после второго поворота:​ прямолинейный путь до остановки
 +    moveForward();​
 +    delay(8000/​16);​ // время прямолинейного движения до остановки
 +    state ++;
 +    stopMotors();​
 +    break;
 +
 +  case 5: // после остановки на площадке:​ включить светодиод на 4 секунды
 +    // ...
 +    break;
 +  default:
 +     ​stopMotors();​
 +  break;
 +}
 +
 +
  
 } }
  
 void moveForward() { void moveForward() {
-     ​Serial.println("​up"​);​+     //Serial.println("​up"​);​
     digitalWrite(LM_s1,​ 1);     digitalWrite(LM_s1,​ 1);
     digitalWrite(LM_s2,​ 0);     digitalWrite(LM_s2,​ 0);
     digitalWrite(RM_s1,​ 1);     digitalWrite(RM_s1,​ 1);
     digitalWrite(RM_s2,​ 0);     digitalWrite(RM_s2,​ 0);
- ​delay(60);+ ​delay(20);
 } }
  
 void moveBackward() { void moveBackward() {
-    Serial.println("​down"​);​+    ​//Serial.println("​down"​);​
  
     digitalWrite(LM_s1,​ 0);     digitalWrite(LM_s1,​ 0);
Строка 569: Строка 600:
     digitalWrite(RM_s1,​ 0);     digitalWrite(RM_s1,​ 0);
     digitalWrite(RM_s2,​ 1);     digitalWrite(RM_s2,​ 1);
- ​delay(60);+ ​delay(20);
 } }
  
Строка 577: Строка 608:
     digitalWrite(RM_s1,​ HIGH);     digitalWrite(RM_s1,​ HIGH);
    ​digitalWrite(RM_s2,​ LOW);    ​digitalWrite(RM_s2,​ LOW);
- ​delay(60);+ ​delay(20);
 } }
  
Строка 585: Строка 616:
     digitalWrite(RM_s1,​ LOW);     digitalWrite(RM_s1,​ LOW);
    ​digitalWrite(RM_s2,​ HIGH);    ​digitalWrite(RM_s2,​ HIGH);
- ​delay(60);+ ​delay(20);
 } }
  
Строка 593: Строка 624:
     digitalWrite(RM_s1,​ LOW);     digitalWrite(RM_s1,​ LOW);
    ​digitalWrite(RM_s2,​ LOW);    ​digitalWrite(RM_s2,​ LOW);
- delay(60);​ + //​delay(20);
-+
- +
-// ********************************** +
- +
-void check_servo() { +
- +
-  myservo12.write(45); ​   +
-  Serial.println("​check_servo12"​);​ +
-  ​delay(2000/16); +
-  myservo7.write(45); ​   +
-  Serial.println("​check_servo7"​);​ +
-  delay(2000/​16); +
-                       +
 } }
  
10i_2025_algo.1759836071.txt.gz · Последние изменения: 2025/10/07 14:21 — super_admin