1503 linee diskr 2motora: различия между версиями

Материал из УМКИwiki
Перейти к навигации Перейти к поиску
(Новая страница: «<syntaxhighlight lang="C++"> ////////////////////////////////////////////// // 2020.02.12 woronin, umkiedu@gmail.com // Датчик линии цифр…»)
 
Нет описания правки
 
(не показано 7 промежуточных версий этого же участника)
Строка 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 DR; // Переменная для  правого датчика
const int sensorL = A0; // Подсоедниняем левый датчик к A0
int DL; // Переменная для левого датчика
int motorR  = 2; //  направление вращения  первого правого мотора
int motorL  = 4; //  направление вращения  первого левого мотора
int mRspeed = 3; // управляет скоростью вращения  правого мотора
int mLspeed = 5; // управляет скоростью вращения  левого мотора


int motorR1 = 2; // 2 контакт определяет направление вращения первого правого мотора
int V = 130;   // Задаем скорость вращения колес (от 0 до 255)
int motorL1 = 4; // 4 контакт определяет направление вращения  первого левого мотора
int timeM = 80; //  время включения моторов в млсек
int mLspeed = 3; // 3 управляет вращением  левого мотора
int mRspeed = 5; // 5 управляет вращением правого мотора


void setup()
void setup() // Задаем параметры инициализации переменных
{
{
   pinMode(mLspeed, OUTPUT); // конфигурим контакты как работающие на выход
  pinMode(A0, INPUT);// настраиваем  порт на вход
  pinMode(A1, INPUT);
   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( sensorL , INPUT);
}
}


// Задаем скорость подтормаживающего колеса (от 0 до 255)
// Основной бесконечный цикл
int V=85;
void loop() {
  DR = digitalRead(A0);
  DL = digitalRead(A1); // считываем значение из порта в переменную
  if ((DL == 0) && (DR == 0)) { // если оба датчика видят белый
    digitalWrite(motorR, HIGH ); // правый мотор вперед
    analogWrite (mRspeed, V); //  старт правого мотора с заданной скоростью
    digitalWrite(motorL, HIGH ); // левый мотор вперед
    analogWrite (mLspeed, V); //  старт левого мотора с заданной скоростью
    delay(timeM);  // время включения в млсек
  }
  if ((DL == 1) && (DR == 0)) { // если  левый датчик видит черный
    digitalWrite(motorR, HIGH ); // правый мотор вперед
    analogWrite (mRspeed, V); // 
    digitalWrite(motorL, LOW ); // левый мотор Назад
    analogWrite (mLspeed, V); // 
    delay(timeM);
  }


  if ((DL == 0) && (DR == 1)) { // если  правый датчик видит черный
    digitalWrite(motorR, LOW ); // правый мотор Назад
    analogWrite (mRspeed, V); // 
    digitalWrite(motorL, HIGH ); // левый мотор вперед
    analogWrite (mLspeed, V); // 
    delay(timeM);
  }


// Основной бесконечный цикл
  if ((DL == 1) && (DR == 1)) { // если оба датчика видит черный
void loop()
    digitalWrite(motorR, LOW ); // правый мотор Назад
{
    analogWrite (mRspeed, V); //
if (digitalRead(sensorL)) // если левый датчик над белым полем
    digitalWrite(motorL, LOW ); // левый мотор Назад
{
    analogWrite (mLspeed, V); //
  if (digitalRead(sensorR)) // если правый датчик над белым полем
    delay(timeM);
  {
  // движение вперед
  digitalWrite( motorR1, HIGH ); // правый мотор вперед
  analogWrite(mRspeed, 255); // скорость правого мотора на максимуме
  digitalWrite( motorL1 , HIGH ); // левый мотор вперед
  analogWrite(mLspeed, 255); // скорость левого мотора на максимуме 
   }
   }
  else // иначе: правый датчик над черным полем, левый - над белым
 
  {
  digitalWrite(mRspeed, LOW); // Останов, чтоб не потерять линию
    // поворот направо
   digitalWrite(mLspeed, LOW); // скорость левого мотора стоп
    digitalWrite( motorR1, HIGH ); // правый мотор вперед
   delay(timeM);
    analogWrite(mRspeed, 255); // скорость правого мотора на максимуме
    digitalWrite( motorL1, LOW ); // левый мотор назад
    analogWrite(mLspeed, V); // левый мотор подтормаживает   
  }
  }
  else // иначе: левый датчик над черным полем
   {
  if (digitalRead( sensorR)) // если правый датчик над белым полем
  {
    // поворот налево
    digitalWrite( motorR1, LOW ); // правый мотор назад
    analogWrite(mRspeed, V); // правый мотор подтормаживает
    digitalWrite( motorL1 , HIGH ); // левый мотор вперед 
    analogWrite(mLspeed, 255); // скорость левого мотора на максимуме 
  }
  else // иначе: правый датчик над черным полем, левый - над черным
   {
  // движение вперед
  digitalWrite( motorR1, HIGH );
  analogWrite(mRspeed, 255);
  digitalWrite( motorL1 , HIGH );
  analogWrite(mLspeed, 255);  
  }
}
}
}





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

//////////////////////////////////////////////
//     2023.01.10 woronin,  umkiedu@gmail.com
//     Датчик линии цифровой сигнал, тестируем движение робота дискретно с регулировкой
//     Robot UMKI controller  K6_3
//     включаем правый и левый мотор регулируя скорость и путь, при езде по датчикам линии
//////////////////////////////////////////////
int DR; // Переменная для  правого датчика
int DL; // Переменная для левого датчика
int motorR  = 2; //  направление вращения  первого правого мотора
int motorL  = 4; //  направление вращения  первого левого мотора
int mRspeed = 3; //  управляет скоростью вращения  правого мотора
int mLspeed = 5; //  управляет скоростью вращения  левого мотора

int V = 130;    // Задаем скорость вращения колес (от 0 до 255)
int timeM = 80; //  время включения моторов в млсек

void setup() // Задаем параметры инициализации переменных
{
  pinMode(A0, INPUT);// настраиваем  порт на вход
  pinMode(A1, INPUT);
  pinMode(mLspeed, OUTPUT); // настраиваем  порт на выход
  pinMode(mRspeed, OUTPUT);
  pinMode(motorR, OUTPUT);
  pinMode(motorL, OUTPUT);
}

// Основной бесконечный цикл
void loop() {
  DR = digitalRead(A0);
  DL = digitalRead(A1); // считываем значение из порта в переменную
  if ((DL == 0) && (DR == 0)) { // если оба датчика видят белый
    digitalWrite(motorR, HIGH ); // правый мотор вперед
    analogWrite (mRspeed, V); //  старт правого мотора с заданной скоростью
    digitalWrite(motorL, HIGH ); // левый мотор вперед
    analogWrite (mLspeed, V); //  старт левого мотора с заданной скоростью
    delay(timeM);  // время включения в млсек
  }
  if ((DL == 1) && (DR == 0)) { // если  левый датчик видит черный
    digitalWrite(motorR, HIGH ); // правый мотор вперед
    analogWrite (mRspeed, V); //  
    digitalWrite(motorL, LOW ); // левый мотор Назад
    analogWrite (mLspeed, V); //  
    delay(timeM);
  }

  if ((DL == 0) && (DR == 1)) { // если  правый датчик видит черный
    digitalWrite(motorR, LOW ); // правый мотор Назад
    analogWrite (mRspeed, V); //  
    digitalWrite(motorL, HIGH ); // левый мотор вперед
    analogWrite (mLspeed, V); //  
    delay(timeM);
  }

  if ((DL == 1) && (DR == 1)) { // если  оба датчика видит черный
    digitalWrite(motorR, LOW ); // правый мотор Назад
    analogWrite (mRspeed, V); //  
    digitalWrite(motorL, LOW ); // левый мотор Назад
    analogWrite (mLspeed, V); //  
    delay(timeM);
  }

  digitalWrite(mRspeed, LOW); // Останов, чтоб не потерять линию
  digitalWrite(mLspeed, LOW); // скорость левого мотора стоп
  delay(timeM);
}