1501 datline kalibr

Материал из УМКИwiki
Версия от 13:13, 12 августа 2019; 195.209.192.5 (обсуждение) (Новая страница: «<code> ////////////////////////////////////////////// // 2019.07.08 woronin, umkiedu@gmail.com // Датчик линии цифровой сигна…»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

//////////////////////////////////////////////
//     2019.07.08 woronin,  umkiedu@gmail.com
//     Датчик линии цифровой сигнал, аналоговое движение
//     Robot UMKI controller  K6_3
//     езда с изменяемой скоростью по линии с притормаживанием одного колеса
//////////////////////////////////////////////
const int sensorR = A1; // Подсоедниняем правый датчик к A1
const int sensorL = A0; // Подсоедниняем левый датчик к A0
int motorR1 = 2; // 2 контакт определяет направление вращения  первого правого мотора
int motorR2 = 6; // 6 контакт определяет направление вращения  второго правого мотора
int motorL1 = 4; // 4 контакт определяет направление вращения  первого левого мотора
int motorL2 = 7; // 7 контакт определяет направление вращения  второго левого мотора
int mLspeed = 3; // 3 управляет вращением  левого мотора
int mRspeed = 5; // 5 управляет вращением  правого мотора
int speeker = 12; // 12 управляет спикер
void setup()
{
 pinMode(mLspeed, OUTPUT); // конфигурим контакты как работающие на выход
 pinMode(mRspeed, OUTPUT);
 pinMode(motorR1, OUTPUT);
 pinMode(motorL1, OUTPUT);
 pinMode( sensorR , INPUT);// конфигурим контакты как работающие на вход
 pinMode( sensorL , INPUT);
}
// Задаем скорость подтормаживающего колеса (от 0 до 255)
int V=85;
// Основной бесконечный цикл 
void loop()
{
if (digitalRead(sensorL)) // если левый датчик над белым полем
{
 if (digitalRead(sensorR)) // если правый датчик над белым полем
 {
  // движение вперед
  digitalWrite( motorR1, HIGH ); // правый мотор вперед 
  analogWrite(mRspeed, 255); // скорость правого мотора на максимуме
  digitalWrite( motorL1 , HIGH ); // левый мотор вперед
  analogWrite(mLspeed, 255); // скорость левого мотора на максимуме   
 }
  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);   
 }
}
}