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

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


kiber_tc_2018

Различия

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

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

kiber_tc_2018 [2019/03/12 17:14]
Sergey Kondrashov [Программирование мобильного робота]
kiber_tc_2018 [2019/03/18 17:29] (текущий)
Sergey Kondrashov [Вариант 2]
Строка 701: Строка 701:
 </​code>​ </​code>​
  
 +
 +Вариант 2.1. Простейший релейный регулятор движения по линии
 +
 +<code C++>
 +
 + 
 +#define PWMA 9  // выходы arduino
 +#define PWMB 10
 +#define AIN1 6
 +#define AIN2 7
 +#define BIN1 5
 +#define BIN2 4
 +#define STBY 13 
 +
 +#define lS 8 // левый датчик линии
 +#define rS 12 
 +
 +int min_speed = 100;
 +int max_speed = 255;
 +int n_speed = 110;
 +int dif = 110;
 +uint8_t lSState=0;
 +uint8_t rSState=0;
 +
 +
 +//int state;
 + 
 +void setup() {
 + 
 +/* Настроить все 7 выводов на выходы,​ идущие к драйверу TB6612FNG */
 +pinMode(PWMA,​OUTPUT);​
 +pinMode(AIN1,​OUTPUT);​
 +pinMode(AIN2,​OUTPUT);​
 +pinMode(PWMB,​OUTPUT);​
 +pinMode(BIN1,​OUTPUT);​
 +pinMode(BIN2,​OUTPUT);​
 +pinMode(STBY,​OUTPUT);​
 +pinMode(lS,​INPUT);​
 +pinMode(rS,​INPUT);​
 +Serial.begin(9600);​
 +startUp();
 +}
 + 
 +void loop() {
 +   ​lSState = digitalRead(lS);​
 +   ​rSState = digitalRead(rS);​
 +   ​Serial.println(lSState);​
 +   ​Serial.println(rSState);​
 +   ​Serial.println(""​); ​  
 +
 +   
 +   if (lSState == 0 && rSState == 0){
 +    goForward(n_speed);​
 +   }
 +   
 +   if (lSState == 1 && rSState == 1){
 +    applyBrakes ();
 +   }
 +   if (lSState == 1 && rSState == 0){
 +    veerRight(n_speed,​ dif);
 +   }
 +   if (lSState == 0 && rSState == 1){
 +    veerLeft(n_speed,​ dif);
 +   ​} ​  
 +
 +delay(10);
 +   
 +  }
 +void testmove(){
 +  //​startUp();​
 +  //​goForward();​
 +  //​delay(1500);​
 +  //​turnAround();​
 +  //​goForward();​
 +  //​delay(1500);​
 +  //​turnAround();​
 +  //​goBackward();​
 +  //​delay(1500);​
 +  //​rotateLeft();​
 +  //​delay(560);​
 +  //​rotateRight();​
 +  //​delay(2240);​
 + // goForward();​
 + // delay(1000);​
 +  //​applyBrakes();​
 + // delay(2000);​
 +   
 +}
 + 
 +void goForward (int v)
 +{
 +  digitalWrite (AIN1,​HIGH);​
 +  digitalWrite (AIN2,LOW);
 +  analogWrite(PWMA,​v);​
 +  digitalWrite (BIN1,​HIGH);​
 +  digitalWrite (BIN2,LOW);
 +  analogWrite(PWMB,​v); ​
 +}
 + 
 +void goBackward (int v)
 +{
 +  digitalWrite (AIN1,LOW);
 +  digitalWrite (AIN2,​HIGH);​
 +  analogWrite(PWMA,​v);​
 +  digitalWrite (BIN1,LOW);
 +  digitalWrite (BIN2,​HIGH);​
 +  analogWrite(PWMB,​v); ​
 +}
 + 
 +void rotateRight (int v)
 +{
 +  digitalWrite (AIN1,​HIGH);​
 +  digitalWrite (AIN2,LOW);
 +  analogWrite(PWMA,​v);​
 +  digitalWrite (BIN1,LOW);
 +  digitalWrite (BIN2,​HIGH);​
 +  analogWrite(PWMB,​v); ​
 +}
 + 
 +void rotateLeft (int v)
 +{
 +  digitalWrite (AIN1,LOW);
 +  digitalWrite (AIN2,​HIGH);​
 +  analogWrite(PWMA,​v);​
 +  digitalWrite (BIN1,​HIGH);​
 +  digitalWrite (BIN2,LOW);
 +  analogWrite(PWMB,​v); ​
 +}
 + 
 +void veerLeft (int v, int d)
 +{
 +  digitalWrite (AIN1,​HIGH);​
 +  digitalWrite (AIN2,LOW);
 +  analogWrite(PWMA,​v);​
 +  digitalWrite (BIN1,​HIGH);​
 +  digitalWrite (BIN2,LOW);
 +  analogWrite(PWMB,​v -d); 
 +}
 + 
 +void veerRight (int v, int d)
 +{
 +  digitalWrite (AIN1,​HIGH);​
 +  digitalWrite (AIN2,LOW);
 +  analogWrite(PWMA,​v -d);
 +  digitalWrite (BIN1,​HIGH);​
 +  digitalWrite (BIN2,LOW);
 +  analogWrite(PWMB,​v ); 
 +}
 + 
 +void applyBrakes ()
 +{
 +  digitalWrite (AIN1,​HIGH);​
 +  digitalWrite (AIN2,​HIGH);​
 +  analogWrite(PWMA,​255);​
 +  digitalWrite (BIN1,​HIGH);​
 +  digitalWrite (BIN2,​HIGH);​
 +  analogWrite(PWMB,​255); ​
 +}
 + 
 +void startUp ()
 +{
 +  digitalWrite(STBY,​HIGH);​
 +}
 + 
 +//void turnAround()
 +//{
 +//  rotateLeft();​
 +//  delay(1370);​
 +//}
 + 
 +void shutDown ()
 +{
 +  digitalWrite(STBY,​LOW);​
 +}
 +
 +</​code>​
 ==== Ультразвуковой датчик ==== ==== Ультразвуковой датчик ====
  
kiber_tc_2018.1552410853.txt.gz · Последние изменения: 2019/03/12 17:14 — Sergey Kondrashov