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

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


kiber_tc_2018

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
Следующая версия Следующая версия справа и слева
kiber_tc_2018 [2019/04/09 20:18]
super_admin [Вариант 1.1. Простейший релейный регулятор движения по линии]
kiber_tc_2018 [2019/04/22 19:35]
super_admin [Вариант 2.1. Простейший релейный регулятор движения по линии + ультразвуковой датчик препятствия (промежуточный вариант, требует доработки)]
Строка 1288: Строка 1288:
  
  
-==== Вариант 2.1. Простейший релейный регулятор движения по линии + ультразвуковой датчик препятствия ====+==== Вариант 2.1. Простейший релейный регулятор движения по линии + ультразвуковой датчик препятствия ​(промежуточный вариант,​ требует доработки) ​====
  
  
Строка 1305: Строка 1305:
 #define STBY 13  #define STBY 13 
    
-#define lS 9 // левый датчик линии+#define lS 9
 #define rS 8  #define rS 8 
-  + 
-int min_speed ​100+int distance ​10
-int max_speed ​255+int ping_distance ​400
-int n_speed = 120; + 
-int dif 110+Ping ping Ping(2)
-uint8_t lSState=0;​ +
-uint8_t rSState=0;+
 uint32_t previousMillis = 0; uint32_t previousMillis = 0;
-uint8_t ​timePeriod = 100+uint16_t ​timePeriod = 50
  
-int current_dist = 500; 
-int dangerous_dist = 20; 
    
-//int state;+int min_speed = 120; 
 +int max_speed = 255; 
 +int n_speed = 220; 
 +int dif = 220; 
 +  
 +uint8_t lSState; 
 +uint8_t rSState; 
 +  
 +int state; 
 +int prevState;​ 
 +int readyState = 0; 
 +  
 +void resetState(int st){ 
 +  prevState = state; 
 +  ​state = st; 
 +}
  
-Ping ping = Ping(2); 
    
-void setup() {+//int state; 
 + void setup() {
    
   /* Настроить все 7 выводов на выходы,​ идущие к драйверу TB6612FNG */   /* Настроить все 7 выводов на выходы,​ идущие к драйверу TB6612FNG */
Строка 1333: Строка 1345:
   pinMode(BIN1,​OUTPUT);​   pinMode(BIN1,​OUTPUT);​
   pinMode(BIN2,​OUTPUT);​   pinMode(BIN2,​OUTPUT);​
-  pinMode(STBY,​OUTPUT);​ 
   pinMode(lS,​INPUT);​   pinMode(lS,​INPUT);​
   pinMode(rS,​INPUT);​   pinMode(rS,​INPUT);​
   Serial.begin(9600);​   Serial.begin(9600);​
-  startUp(); +   while (readyState == 0) { 
 +    testSensors(); 
 +    if (prevState != 11) 
 +      readyState = 1; 
 +      delay(1000);​ 
 +  } 
 + ​delay(2000);​ 
 + ​startUp();​
 } }
 +/* 
 +void checkTimer(){ 
 +  uint32_t currentMillis = millis(); 
 +  if (currentMillis - previousMillis >= timePeriod){ 
 +    Serial.println(millis());​ 
 +  previousMillis = currentMillis;​ 
 +  } 
 +
 +*/ 
 +void testSensors(){ 
 +  lSState = digitalRead(lS);​ 
 +  rSState = digitalRead(rS);​ 
 +   //​Serial.println(lSState);​ 
 +   //​Serial.println(rSState);​ 
 +   //​Serial.println(""​); ​  
 +  
 +   if (lSState == 0 && rSState == 0  ){ 
 +          resetState(0);​ 
 +       //​goForward(n_speed);​ 
 +   } 
 +   if (lSState == 1 && rSState == 0  ){ 
 +       ​resetState(10);​ 
 +       //​goForward(n_speed);​ 
 +   } 
 +  // if (current_dist <= dangerous_dist ){ 
 +  //    resetState(1);​ 
 +      //​applyBrakes (); 
 +  // } 
 +   if (lSState == 1 && rSState == 1  ){ 
 +     //if (readyState == 0) 
 +       ​resetState(11);​ 
 +       //​veerRight(n_speed,​ dif); 
 +   } 
 +   if (lSState == 0 && rSState == 1   ){ 
 +       ​resetState(1);​ 
 +       //​veerLeft(n_speed,​ dif); 
 +   ​} ​  
 +  
 +
 + 
 void ping_fire(){ void ping_fire(){
   ping.fire();​   ping.fire();​
   //​Serial.println("​***"​); ​   //​Serial.println("​***"​); ​
 } }
 + 
 void loop() { void loop() {
-   uint32_t currentMillis = millis(); +  // time ===================== 
-   ​if (currentMillis - previousMillis >= timePeriod){+  ​uint32_t currentMillis = millis(); 
 +  if (currentMillis - previousMillis >= timePeriod){ 
 +    //​Serial.println(millis());​ 
 +    //​Serial.println(ping.centimeters());​ 
 +    ping_distance = ping.centimeters();​
     ping_fire();​     ping_fire();​
     previousMillis = currentMillis;​     previousMillis = currentMillis;​
-   } 
- 
-   ​current_dist = ping.centimeters();​ 
-   ​lSState = digitalRead(lS);​ 
-   ​rSState = digitalRead(rS);​ 
-   //​Serial.println(current_dist);​ 
-   /* 
-   ​Serial.println(lSState);​ 
-   ​Serial.println(rSState);​ 
-   ​Serial.println(""​); ​   
- */ 
- //​centralLineFollower();​ 
- ​leftLineFollower();​ 
   }   }
- +  //​======================= 
-void leftLineFollower(){ +  ​testSensors(); 
-  ​ +  if (ping_distance ​distance){ 
-    ​if (lSState == 1 && rSState == 0 && current_dist ​dangerous_dist ​){ +    ​updateMotion(n_speed, dif); 
-       goForward(n_speed);​ +  else {
-   ​} +
- +
-  +
-   if (current_dist <= dangerous_dist ){+
     applyBrakes ();     applyBrakes ();
-   +  ​
- +  
-   ​ + // centralLineFollower();​ 
-   ​if (lSState ​== 1 && rSState ​== 1 && current_dist > dangerous_dist ​){ +  
-    veerRight(n_speeddif); +  //​delay(1);​ 
-   } +  
-   ​if (lSState ​== 0 && rSState ​== 1  &&​ current_dist > dangerous_dist ​){ +  } 
-    veerLeft(n_speed,​ dif); +  
-   }   +void updateMotion(int sp, int d){ 
 +    switch ( state ) { 
 +    case 0: 
 +      ​if (prevState ​== 1
 +        //​veerLeft(sp,​ d); 
 +        veerRight(sp,​ d); 
 +      else if (prevState ​== 10
 +        //veerRight(spd); 
 +        ​veerLeft(sp,​ d); 
 +      ​break;​ 
 +    case 1: 
 +      // Code 
 +      goForward(sp);​ 
 +      break; 
 +    case 10: 
 +      // Code 
 +      goForward(sp);​ 
 +      break; 
 +    case 11: 
 +      // Code 
 +      ​if (prevState ​== 10) 
 +        veerRight(sp,​ d); 
 +      else if (prevState ​== 1
 +        veerLeft(sp,​ d); 
 +      break; 
 +    } 
 +  
 +
 +  
 + void leftLineFollower(){ 
 +    ​//​goForward(n_speed);​ 
 +    //​applyBrakes (); 
 +    //​veerRight(n_speed,​ dif); 
 +    //veerLeft(n_speed,​ dif); 
 + 
 }  ​ }  ​
 void centralLineFollower(){ void centralLineFollower(){
-  ​ 
-    if (lSState == 0 && rSState == 0 && current_dist > dangerous_dist ){ 
-       ​goForward(n_speed);​ 
-   } 
- 
    
-   if (lSState == 1 && rSState == 1  ||  current_dist <= dangerous_dist ){ 
-    applyBrakes (); 
-   } 
-   if (lSState == 1 && rSState == 0 && current_dist > dangerous_dist ){ 
-    veerRight(n_speed,​ dif); 
-   } 
-   if (lSState == 0 && rSState == 1 && current_dist > dangerous_dist ){ 
-    veerLeft(n_speed,​ dif); 
-   ​} ​   
 } }
-  ​ 
- 
    
 void goForward (int v) void goForward (int v)
Строка 1480: Строка 1541:
 } }
    
-//void turnAround() + 
-//{ +
-//  rotateLeft();​ +
-//  delay(1370);​ +
-//}+
    
 void shutDown () void shutDown ()
Строка 1490: Строка 1547:
   digitalWrite(STBY,​LOW);​   digitalWrite(STBY,​LOW);​
 } }
 +
 +/*
 +В библиотеке Ping.cpp ​
 +вместо строки
 +  _duration = pulseIn(_pin,​ HIGH);
 +следует использовать
 +  _duration = pulseIn(_pin,​ HIGH, 40000);
 +*/
 +
 </​code>​ </​code>​
  
Строка 1518: Строка 1584:
   * [[http://​embeddedlab.csuohio.edu/​RoboticSwarms/​ultrasonic_sensors.html]]   * [[http://​embeddedlab.csuohio.edu/​RoboticSwarms/​ultrasonic_sensors.html]]
   * [[http://​arduino.ru/​forum/​programmirovanie/​nestabilnaya-rabota-uz-datchika]] - Форум: "​Нестабильная работа УЗ датчика"​   * [[http://​arduino.ru/​forum/​programmirovanie/​nestabilnaya-rabota-uz-datchika]] - Форум: "​Нестабильная работа УЗ датчика"​
 +==== Указатели в C для Ардуино ====
 +
 +  * [[http://​mypractic.ru/​urok-15-ukazateli-v-c-dlya-arduino-preobrazovanie-raznyx-tipov-dannyx-v-bajty.html]]
  
  
kiber_tc_2018.txt · Последние изменения: 2019/11/20 23:06 — super_admin