1504 linee analog: различия между версиями

Материал из УМКИwiki
Перейти к навигации Перейти к поиску
(Новая страница: «<syntaxhighlight lang="C++"> ////////////////////////////////////////////// // 2020.02.12 woronin, umkiedu@gmail.com // Датчик линии цифр…»)
 
Нет описания правки
 
(не показана 1 промежуточная версия этого же участника)
Строка 1: Строка 1:
<syntaxhighlight lang="C++">
<syntaxhighlight lang="C++">
//////////////////////////////////////////////
//////////////////////////////////////////////
//    2020.02.12 woronin,  umkiedu@gmail.com
//    2023.01.10 woronin,  umkiedu@gmail.com
//    Датчик линии цифровой сигнал, аналоговое движение
//    Датчик линии цифровой сигнал, аналоговое движение
//    Robot UMKI controller  K6_3
//    Robot UMKI controller  K6_3
//    езда с изменяемой скоростью по линии с притормаживанием одного колеса
//    езда с изменяемой скоростью по линии с притормаживанием одного колеса
//////////////////////////////////////////////
//////////////////////////////////////////////
const int sensorR = A1; // Подсоедниняем правый датчик к A1
int sensorR = A0; // Присоедниняем правый датчик к A0
const int sensorL = A0; // Подсоедниняем левый датчик к A0
int sensorL = A1; // Присоедниняем левый датчик к A1


int motorR1 = 2; // 2 контакт определяет направление вращения  первого правого мотора
int motorR  = 2; // 2 контакт определяет направление вращения  первого правого мотора
int motorL1 = 4; // 4 контакт определяет направление вращения  первого левого мотора
int motorL  = 4; // 4 контакт определяет направление вращения  первого левого мотора
int mLspeed = 3; // 3 управляет вращением  левого мотора
int mRspeed = 3; // 3 управляет вращением  правого мотора
int mRspeed = 5; // 5 управляет вращением  правого мотора
int mLspeed = 5; // 5 управляет вращением  левого мотора


void setup()
void setup()
{
{
   pinMode(mLspeed, OUTPUT); // конфигурим контакты как работающие на выход
   pinMode(mLspeed, OUTPUT); // Настраиваем контакты как работающие на выход
   pinMode(mRspeed, OUTPUT);
   pinMode(mRspeed, OUTPUT);
   pinMode(motorR1, OUTPUT);
   pinMode(motorR, OUTPUT);
   pinMode(motorL1, OUTPUT);
   pinMode(motorL, OUTPUT);


   pinMode( sensorR , INPUT);
   pinMode(sensorR , INPUT); // Настраиваем контакты как работающие на вход
   pinMode( sensorL , INPUT);
   pinMode(sensorL , INPUT);
}
}


Строка 38: Строка 38:
   {
   {
   // движение вперед
   // движение вперед
   digitalWrite( motorR1, HIGH ); // правый мотор вперед  
   digitalWrite(motorR, HIGH ); // правый мотор вперед  
   analogWrite(mRspeed, Vmax); // скорость правого мотора на максимуме
   analogWrite (mRspeed, Vmax); // скорость правого мотора на максимуме
   digitalWrite( motorL1 , HIGH ); // левый мотор вперед
   digitalWrite(motorL, HIGH ); // левый мотор вперед
   analogWrite(mLspeed, Vmax); // скорость левого мотора на максимуме   
   analogWrite (mLspeed, Vmax); // скорость левого мотора на максимуме   
   }
   }
   else // иначе: , левый - над белым , а правый датчик над черным полем
   else // иначе: , левый - над белым , а правый датчик над черным полем
   {
   {
     // поворот направо
     // поворот направо
     digitalWrite( motorR1, LOW ); // правый мотор слегка назад  
     digitalWrite(motorR, LOW ); // правый мотор слегка назад  
     analogWrite(mRspeed, V); // правый мотор подтормаживает
     analogWrite (mRspeed, V); // правый мотор подтормаживает
     digitalWrite( motorL1 , HIGH ); // левый мотор продолжает вперед   
     digitalWrite(motorL, HIGH ); // левый мотор продолжает вперед   
     analogWrite(mLspeed, Vmax); // скорость левого мотора на максимуме   
     analogWrite (mLspeed, Vmax); // скорость левого мотора на максимуме   
   }
   }
   }
   }
Строка 57: Строка 57:
   {
   {
     // поворот налево
     // поворот налево
     digitalWrite( motorR1, HIGH ); // правый мотор вперед  
     digitalWrite(motorR, HIGH ); // правый мотор вперед  
     analogWrite(mRspeed, Vmax); // скорость правого мотора на максимуме
     analogWrite (mRspeed, Vmax); // скорость правого мотора на максимуме
     digitalWrite( motorL1, LOW ); // левый мотор назад  
     digitalWrite(motorL, LOW ); // левый мотор назад  
     analogWrite(mLspeed, V); // левый мотор подтормаживает     
     analogWrite (mLspeed, V); // левый мотор подтормаживает     
   }
   }
   else // иначе: правый датчик над черным полем, левый - над черным
   else // иначе: правый датчик над черным полем, левый - над черным
   {
   {
   // движение вперед
   // движение вперед
   digitalWrite( motorR1, HIGH );  
   digitalWrite(motorR, HIGH );  
   analogWrite(mRspeed, Vmax);
   analogWrite (mRspeed, Vmax);
   digitalWrite( motorL1 , HIGH );
   digitalWrite(motorL, HIGH );
   analogWrite(mLspeed, Vmax);   
   analogWrite (mLspeed, Vmax);   
   }
   }
  }
  }

Текущая версия от 23:15, 9 января 2023

//////////////////////////////////////////////
//     2023.01.10 woronin,  umkiedu@gmail.com
//     Датчик линии цифровой сигнал, аналоговое движение
//     Robot UMKI controller  K6_3
//     езда с изменяемой скоростью по линии с притормаживанием одного колеса
//////////////////////////////////////////////
int sensorR = A0; // Присоедниняем правый датчик к A0
int sensorL = A1; // Присоедниняем левый датчик к A1

int motorR  = 2; // 2 контакт определяет направление вращения  первого правого мотора
int motorL  = 4; // 4 контакт определяет направление вращения  первого левого мотора
int mRspeed = 3; // 3 управляет вращением  правого мотора
int mLspeed = 5; // 5 управляет вращением  левого мотора

void setup()
{
  pinMode(mLspeed, OUTPUT); // Настраиваем контакты как работающие на выход
  pinMode(mRspeed, OUTPUT);
  pinMode(motorR,  OUTPUT);
  pinMode(motorL,  OUTPUT);

  pinMode(sensorR , INPUT); // Настраиваем контакты как работающие на вход
  pinMode(sensorL , INPUT);
}

// Задаем скорость подтормаживающего колеса (от 0 до 255)
int V=85;
int Vmax=255;


// Основной бесконечный цикл 
void loop()
{
 if (digitalRead(sensorL)) // если левый датчик над белым полем
 {
  if (digitalRead(sensorR)) // если правый датчик над белым полем
  {
   // движение вперед
   digitalWrite(motorR, HIGH ); // правый мотор вперед 
   analogWrite (mRspeed, Vmax); // скорость правого мотора на максимуме
   digitalWrite(motorL, HIGH ); // левый мотор вперед
   analogWrite (mLspeed, Vmax); // скорость левого мотора на максимуме   
  }
   else // иначе: , левый - над белым , а правый датчик над черным полем
   {
    // поворот направо
    digitalWrite(motorR, LOW ); // правый мотор слегка назад 
    analogWrite (mRspeed, V); // правый мотор подтормаживает
    digitalWrite(motorL, HIGH ); // левый мотор продолжает вперед   
    analogWrite (mLspeed, Vmax); // скорость левого мотора на максимуме   
   }
  }
  else // иначе: левый датчик над черным полем
  {
   if (digitalRead( sensorR)) // если правый датчик над белым полем
   {
    // поворот налево
    digitalWrite(motorR, HIGH ); // правый мотор вперед 
    analogWrite (mRspeed, Vmax); // скорость правого мотора на максимуме
    digitalWrite(motorL, LOW ); // левый мотор назад 
    analogWrite (mLspeed, V); // левый мотор подтормаживает    
   }
  else // иначе: правый датчик над черным полем, левый - над черным
  {
   // движение вперед
   digitalWrite(motorR, HIGH ); 
   analogWrite (mRspeed, Vmax);
   digitalWrite(motorL, HIGH );
   analogWrite (mLspeed, Vmax);   
  }
 }
}