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

Материал из УМКИwiki
Перейти к навигации Перейти к поиску
(Новая страница: «<syntaxhighlight lang="C++"> ////////////////////////////////////////////// // 2020.02.12 woronin, umkiedu@gmail.com // Датчик линии цифр…»)
 
Нет описания правки
Строка 1: Строка 1:
<syntaxhighlight lang="C++">
<syntaxhighlight lang="C++">
//////////////////////////////////////////////
//////////////////////////////////////////////
//    2020.02.12 woronin,  umkiedu@gmail.com
//    2021.02.20 woronin,  umkiedu@gmail.com
//    Датчик линии цифровой сигнал, аналоговое движение
//    Датчик линии цифровой сигнал, тестируем движение робота дискретно с регулировкой
//    Robot UMKI controller  K6_3
//    Robot UMKI controller  K6_3
//    езда с изменяемой скоростью по линии с притормаживанием одного колеса
//    включаем правый и левый мотор регулируя скорость и путь, при езде по датчикам линии
//////////////////////////////////////////////
//////////////////////////////////////////////
const int sensorR = A1; // Подсоедниняем правый датчик к A1
const int sensorL = A0; // Присоедниняем левый датчик к A0
const int sensorL = A0; // Подсоедниняем левый датчик к A0
const int sensorR = A1; // Присоедниняем правый датчик к A1
int Lsensor; // Переменная для левого датчика
int Rsensor; // Переменная для  правого датчика
int motorR1 = 2; //  направление вращения  первого правого мотора
int motorL1 = 4; //  направление вращения  первого левого мотора
int mLspeed = 3; // 3 управляет скоростью вращения  левого мотора
int mRspeed = 5; // 5 управляет скоростью вращения  правого мотора
// Задаем скорость вращения колес (от 0 до 255)
int V=95;
// время включения моторов в млсек
int timeM=95;


int motorR1 = 2; // 2 контакт определяет направление вращения  первого правого мотора
void setup() // Задаем параметры инициализации переменных
int motorL1 = 4; // 4 контакт определяет направление вращения  первого левого мотора
int mLspeed = 3; // 3 управляет вращением  левого мотора
int mRspeed = 5; // 5 управляет вращением  правого мотора
 
void setup()
{
{
   pinMode(mLspeed, OUTPUT); // конфигурим контакты как работающие на выход
  pinMode( sensorR , INPUT);// конфигурим  порт на вход
  pinMode( sensorL , INPUT);
   pinMode(mLspeed, OUTPUT); // конфигурим порт на выход
   pinMode(mRspeed, OUTPUT);
   pinMode(mRspeed, OUTPUT);
   pinMode(motorR1, OUTPUT);
   pinMode(motorR1, OUTPUT);
   pinMode(motorL1, OUTPUT);
   pinMode(motorL1, OUTPUT);
 
  Serial.begin(9600); // Подключаем монитор порта на скорости общения 9600 байт в сек
pinMode( sensorR , INPUT);
pinMode( sensorL , INPUT);
}
}
// Задаем скорость подтормаживающего колеса (от 0 до 255)
int V=85;


// Основной бесконечный цикл  
// Основной бесконечный цикл  
void loop()
void loop() {
{
  Rsensor=digitalRead(sensorR);// считываем значение из порта в переменную
  if (digitalRead(sensorL)) // если левый датчик над белым полем
Lsensor=digitalRead(sensorL);
  {
if ((Lsensor == 0)&&(Rsensor==0)) {// если оба датчика видят белый
  if (digitalRead(sensorR)) // если правый датчик над белым полем
  Serial.println("Lsensor =0 Rsensor=0"); //  печатаем отладочную информацию в монитор порта
   {
  digitalWrite(motorR1, HIGH ); // правый мотор вперед
  // движение вперед
  analogWrite(mRspeed, V); //  старт правого мотора с заданной скоростью
  digitalWrite(motorL1 , HIGH ); // левый мотор вперед
  analogWrite(mLspeed, V); //  старт левого мотора с заданной скоростью
  delay(timeM);  // время включения в млсек
  }
if ((Lsensor == 1)&&(Rsensor==0)) {// если левый датчик видит черный
   Serial.println("Lsensor =1 Rsensor=0");
   digitalWrite( motorR1, HIGH ); // правый мотор вперед  
   digitalWrite( motorR1, HIGH ); // правый мотор вперед  
   analogWrite(mRspeed, 255); // скорость правого мотора на максимуме
   analogWrite(mRspeed, V); // старт правого мотора с заданной скоростью
  digitalWrite( motorL1 , LOW ); // левый мотор Назад
  digitalWrite(mLspeed, HIGH); //  левого мотора на максимуме  
  delay(timeM);
}
 
if ((Lsensor == 0)&&(Rsensor==1)) {// если  правый датчик видит черный
  Serial.println("Lsensor =0 Rsensor=1");
  digitalWrite( motorR1, LOW ); // правый мотор Назад
  analogWrite(mRspeed, V); //  старт правого мотора с заданной скоростью
   digitalWrite( motorL1 , HIGH ); // левый мотор вперед
   digitalWrite( motorL1 , HIGH ); // левый мотор вперед
   analogWrite(mLspeed, 255); // скорость левого мотора на максимуме 
   analogWrite(mLspeed, V); // старт левого мотора с заданной скоростью
  }
   delay(timeM);  
  else // иначе: правый датчик над черным полем, левый - над белым
  {
    // поворот направо
    digitalWrite( motorR1, HIGH ); // правый мотор вперед
    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); 
  }
  }
  }
}


if ((Lsensor == 1)&&(Rsensor==1)) {// если  оба датчика видит черный
  Serial.println("Lsensor =1 Rsensor=1");
  digitalWrite( motorR1, LOW ); // правый мотор Назад
  analogWrite(mRspeed, V); //  старт правого мотора с заданной скоростью
  digitalWrite( motorL1 , LOW ); // левый мотор Назад
  analogWrite(mLspeed, V); //  старт левого мотора с заданной скоростью
  delay(timeM);
}


  digitalWrite(mRspeed, LOW); // скорость правого мотора стоп
  digitalWrite(mLspeed, LOW); // скорость левого мотора стоп
delay(timeM);
}


</syntaxhighlight>
</syntaxhighlight>

Версия от 17:29, 20 февраля 2021

//////////////////////////////////////////////
//     2021.02.20 woronin,  umkiedu@gmail.com
//     Датчик линии цифровой сигнал, тестируем движение робота дискретно с регулировкой 
//     Robot UMKI controller  K6_3
//     включаем правый и левый мотор регулируя скорость и путь, при езде по датчикам линии
//////////////////////////////////////////////
const int sensorL = A0; // Присоедниняем левый датчик к A0
const int sensorR = A1; // Присоедниняем правый датчик к A1
int Lsensor; // Переменная для левого датчика
int Rsensor; // Переменная для  правого датчика
int motorR1 = 2; //  направление вращения  первого правого мотора
int motorL1 = 4; //  направление вращения  первого левого мотора
int mLspeed = 3; // 3 управляет скоростью вращения  левого мотора
int mRspeed = 5; // 5 управляет скоростью вращения  правого мотора
// Задаем скорость вращения колес (от 0 до 255)
int V=95;
//  время включения моторов в млсек
int timeM=95;

void setup() // Задаем параметры инициализации переменных
{
  pinMode( sensorR , INPUT);// конфигурим  порт на вход
  pinMode( sensorL , INPUT);
  pinMode(mLspeed, OUTPUT); // конфигурим  порт на выход
  pinMode(mRspeed, OUTPUT);
  pinMode(motorR1, OUTPUT);
  pinMode(motorL1, OUTPUT);
  Serial.begin(9600); // Подключаем монитор порта на скорости общения 9600 байт в сек
}

// Основной бесконечный цикл 
void loop() {
 Rsensor=digitalRead(sensorR);// считываем значение из порта в переменную
 Lsensor=digitalRead(sensorL);
 if ((Lsensor == 0)&&(Rsensor==0)) {// если оба датчика видят белый
  Serial.println("Lsensor =0 Rsensor=0"); //  печатаем отладочную информацию в монитор порта
   digitalWrite(motorR1, HIGH ); // правый мотор вперед 
   analogWrite(mRspeed, V); //  старт правого мотора с заданной скоростью
   digitalWrite(motorL1 , HIGH ); // левый мотор вперед
   analogWrite(mLspeed, V); //  старт левого мотора с заданной скоростью
   delay(timeM);  // время включения в млсек
 }
 if ((Lsensor == 1)&&(Rsensor==0)) {// если  левый датчик видит черный
  Serial.println("Lsensor =1 Rsensor=0");
   digitalWrite( motorR1, HIGH ); // правый мотор вперед 
   analogWrite(mRspeed, V); //  старт правого мотора с заданной скоростью
   digitalWrite( motorL1 , LOW ); // левый мотор Назад
   digitalWrite(mLspeed, HIGH); //  левого мотора на максимуме 
   delay(timeM); 
 }

 if ((Lsensor == 0)&&(Rsensor==1)) {// если  правый датчик видит черный
  Serial.println("Lsensor =0 Rsensor=1");
   digitalWrite( motorR1, LOW ); // правый мотор Назад 
   analogWrite(mRspeed, V); //  старт правого мотора с заданной скоростью
   digitalWrite( motorL1 , HIGH ); // левый мотор вперед
   analogWrite(mLspeed, V); //  старт левого мотора с заданной скоростью
   delay(timeM); 
 }

 if ((Lsensor == 1)&&(Rsensor==1)) {// если  оба датчика видит черный
  Serial.println("Lsensor =1 Rsensor=1");
   digitalWrite( motorR1, LOW ); // правый мотор Назад 
   analogWrite(mRspeed, V); //  старт правого мотора с заданной скоростью
   digitalWrite( motorL1 , LOW ); // левый мотор Назад
   analogWrite(mLspeed, V); //  старт левого мотора с заданной скоростью
   delay(timeM); 
 }

   digitalWrite(mRspeed, LOW); // скорость правого мотора стоп
   digitalWrite(mLspeed, LOW); // скорость левого мотора стоп 
 delay(timeM);
}