1505 line datchik perekrestok

Материал из УМКИwiki
Перейти к навигации Перейти к поиску
//////////////////////////////////////////////
//     2020.02.02 woronin,  umkiedu@gmail.com
//     работа с двумя моторами езда по линии
//     Robot UMKI controller  K6_3
//     проезд перекрестков и дуг с малым радиусом
//     самостоятельно сделать подсчет перекрестков  в переменную с сигналом звуком
//////////////////////////////////////////////
int L1;
int pinL1 = A0; // Используем панель датчиков линии
int R2;
int pinR2 = A3;
int R1;
int pinR1 = A1;
int L2;
int pinL2 = A2;
int motorR1 = 2; // 2 контакт определяет направление вращения  первого правого мотора
int motorL1 = 4; // 4 контакт определяет направление вращения  первого левого мотора
int mLspeed = 3; // 3 управляет вращением  левого мотора
int mRspeed = 5; // 5 управляет вращением  правого мотора


void setup() 
{
  pinMode(motorR1 , OUTPUT);
  pinMode(mLspeed , OUTPUT);
  pinMode(motorL1 , OUTPUT);
  pinMode(mRspeed , OUTPUT);
  Serial.begin(9600);
}
void forward () {
  analogWrite(motorR1 , 1);
  analogWrite(mLspeed , 200);
  analogWrite(motorL1 , 1);
  analogWrite(mRspeed , 200);
}
void back() {
  analogWrite(motorR1 , 0);
  analogWrite(mLspeed , 0);
  analogWrite(motorL1 , 0);
  analogWrite(mRspeed , 0);
}
void left() {
  analogWrite(motorR1 , 1);
  analogWrite(mLspeed , 220);
  analogWrite(motorL1 , 0);
  analogWrite(mRspeed , 0);
}
void right() {
  analogWrite(motorR1 , 0);
  analogWrite(mLspeed , 0);
  analogWrite(motorL1 , 1);
  analogWrite(mRspeed , 220);
}
void turnleft() {
  left();
  delay(500);
  while(digitalRead(R1==1))
  {
    left();
    if( digitalRead(pinR1) == 0)
      break;
  }
}

void turnright() {
  right();
  delay(500);
  while(digitalRead(R1)==1)
  {
    right();
    if( digitalRead(pinL1) == 0)
      break;
  }
}
void turnstraight() {
  forward();
  delay(300);
}
int perekrestok = 1;

void loop() 
{
  R2=digitalRead(pinR2);
  L1=digitalRead(pinL1);
  L2=digitalRead(pinL2);
  R1=digitalRead(pinR1);
  if((L1==0)&&(R1==0)) {
    back();
    delay(1);
  }
  if((L1==1)&&(R1==0)) {
    right();
    delay(1);
  }
  if((L1==0)&&(R1==1)) {
    left();
    delay(1);
  }
  if((L1==1)&&(R1==1))
  {
    forward();
    delay(1);
  }
  if (perekrestok  == 1) {
      if((R2 == 0 && L2 == 0)) { 
        turnstraight();
        perekrestok++;
      }
  } else if (perekrestok == 2) {
      if((L2==0)) { 
        turnleft();
        perekrestok++;
      }
  } else if(perekrestok == 3) {
      if((R2==0)) { 
        turnright();
        perekrestok++;
      }
  }  else if(perekrestok == 4) {
      if((L2==0)) { 
        turnleft();
        perekrestok++;
      }
  }
  
}