1505 line datchik perekrestok: различия между версиями

Материал из УМКИwiki
Перейти к навигации Перейти к поиску
(Новая страница: «<syntaxhighlight lang="C++"> ////////////////////////////////////////////// // 2020.01.28 woronin, umkiedu@gmail.com // работа с двумя мот…»)
 
Нет описания правки
 
(не показана 1 промежуточная версия этого же участника)
Строка 1: Строка 1:
<syntaxhighlight lang="C++">
<syntaxhighlight lang="C++">
//////////////////////////////////////////////
//////////////////////////////////////////////
//    2020.01.28 woronin,  umkiedu@gmail.com
//    2020.02.02 woronin,  umkiedu@gmail.com
//    работа с двумя моторами езда по линии
//    работа с двумя моторами езда по линии
//    Robot UMKI controller  K6_3
//    Robot UMKI controller  K6_3
//    проезд перекрестков и дуг с малым радиусом
//    проезд перекрестков и дуг с малым радиусом
//    самостоятельно сделать подсчет перекрестков  в переменную с сигналом звуком
//////////////////////////////////////////////
//////////////////////////////////////////////
int L1;
int L1;
int pinL1 = A0;
int pinL1 = A0; // Используем панель датчиков линии
int R2;
int R2;
int pinR2 = A3;
int pinR2 = A3;
Строка 14: Строка 15:
int L2;
int L2;
int pinL2 = A2;
int pinL2 = A2;
int motorR1 = 2; // 2 контакт определяет направление вращения  первого правого мотора
int motorL1 = 4; // 4 контакт определяет направление вращения  первого левого мотора
int mLspeed = 3; // 3 управляет вращением  левого мотора
int mRspeed = 5; // 5 управляет вращением  правого мотора
void setup()  
void setup()  
{
{
   pinMode(2, OUTPUT);
   pinMode(motorR1 , OUTPUT);
   pinMode(3, OUTPUT);
   pinMode(mLspeed , OUTPUT);
   pinMode(4, OUTPUT);
   pinMode(motorL1 , OUTPUT);
   pinMode(5, OUTPUT);
   pinMode(mRspeed , OUTPUT);
   Serial.begin(9600);
   Serial.begin(9600);
}
}
void forward () {
void forward () {
   analogWrite(2, 1);
   analogWrite(motorR1 , 1);
   analogWrite(3, 200);
   analogWrite(mLspeed , 200);
   analogWrite(4, 1);
   analogWrite(motorL1 , 1);
   analogWrite(5, 200);
   analogWrite(mRspeed , 200);
}
}
void back() {
void back() {
   analogWrite(2, 0);
   analogWrite(motorR1 , 0);
   analogWrite(3, 0);
   analogWrite(mLspeed , 0);
   analogWrite(4, 0);
   analogWrite(motorL1 , 0);
   analogWrite(5, 0);
   analogWrite(mRspeed , 0);
}
}
void left() {
void left() {
   analogWrite(2, 1);
   analogWrite(motorR1 , 1);
   analogWrite(3, 220);
   analogWrite(mLspeed , 220);
   analogWrite(4, 0);
   analogWrite(motorL1 , 0);
   analogWrite(5, 0);
   analogWrite(mRspeed , 0);
}
}
void right() {
void right() {
   analogWrite(2, 0);
   analogWrite(motorR1 , 0);
   analogWrite(3, 0);
   analogWrite(mLspeed , 0);
   analogWrite(4, 1);
   analogWrite(motorL1 , 1);
   analogWrite(5, 220);
   analogWrite(mRspeed , 220);
}
}
void turnleft() {
void turnleft() {
Строка 60: Строка 67:
   right();
   right();
   delay(500);
   delay(500);
   while(digitalRead(R1==1))
   while(digitalRead(R1)==1)
   {
   {
     right();
     right();
Строка 72: Строка 79:
}
}
int perekrestok = 1;
int perekrestok = 1;
void loop()  
void loop()  
{
{

Текущая версия от 17:50, 20 февраля 2021

//////////////////////////////////////////////
//     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++;
      }
  }
  
}