1505 line datchik perekrestok
Перейти к навигации
Перейти к поиску
//////////////////////////////////////////////
// 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++;
}
}
}