1505 line datchik perekrestok: различия между версиями
Перейти к навигации
Перейти к поиску
Woronin (обсуждение | вклад) (Новая страница: «<syntaxhighlight lang="C++"> ////////////////////////////////////////////// // 2020.01.28 woronin, umkiedu@gmail.com // работа с двумя мот…») |
Woronin (обсуждение | вклад) Нет описания правки |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 1: | Строка 1: | ||
<syntaxhighlight lang="C++"> | <syntaxhighlight lang="C++"> | ||
////////////////////////////////////////////// | ////////////////////////////////////////////// | ||
// 2020. | // 2020.02.02 woronin, umkiedu@gmail.com | ||
// работа с двумя моторами езда по линии | // работа с двумя моторами езда по линии | ||
// Robot UMKI controller K6_3 | // Robot UMKI controller K6_3 | ||
// проезд перекрестков и дуг с малым радиусом | // проезд перекрестков и дуг с малым радиусом | ||
// самостоятельно сделать подсчет перекрестков в переменную с сигналом звуком | |||
////////////////////////////////////////////// | ////////////////////////////////////////////// | ||
int L1; | int L1; | ||
int pinL1 = A0; | int pinL1 = A0; // Используем панель датчиков линии | ||
int R2; | int R2; | ||
int pinR2 = A3; | int pinR2 = A3; | ||
Строка 14: | Строка 15: | ||
int L2; | int L2; | ||
int pinL2 = A2; | int pinL2 = A2; | ||
int motorR1 = 2; // 2 контакт определяет направление вращения первого правого мотора | |||
int motorL1 = 4; // 4 контакт определяет направление вращения первого левого мотора | |||
int mLspeed = 3; // 3 управляет вращением левого мотора | |||
int mRspeed = 5; // 5 управляет вращением правого мотора | |||
void setup() | void setup() | ||
{ | { | ||
pinMode( | pinMode(motorR1 , OUTPUT); | ||
pinMode( | pinMode(mLspeed , OUTPUT); | ||
pinMode( | pinMode(motorL1 , OUTPUT); | ||
pinMode( | pinMode(mRspeed , OUTPUT); | ||
Serial.begin(9600); | Serial.begin(9600); | ||
} | } | ||
void forward () { | void forward () { | ||
analogWrite( | analogWrite(motorR1 , 1); | ||
analogWrite( | analogWrite(mLspeed , 200); | ||
analogWrite( | analogWrite(motorL1 , 1); | ||
analogWrite( | analogWrite(mRspeed , 200); | ||
} | } | ||
void back() { | void back() { | ||
analogWrite( | analogWrite(motorR1 , 0); | ||
analogWrite( | analogWrite(mLspeed , 0); | ||
analogWrite( | analogWrite(motorL1 , 0); | ||
analogWrite( | analogWrite(mRspeed , 0); | ||
} | } | ||
void left() { | void left() { | ||
analogWrite( | analogWrite(motorR1 , 1); | ||
analogWrite( | analogWrite(mLspeed , 220); | ||
analogWrite( | analogWrite(motorL1 , 0); | ||
analogWrite( | analogWrite(mRspeed , 0); | ||
} | } | ||
void right() { | void right() { | ||
analogWrite( | analogWrite(motorR1 , 0); | ||
analogWrite( | analogWrite(mLspeed , 0); | ||
analogWrite( | analogWrite(motorL1 , 1); | ||
analogWrite( | analogWrite(mRspeed , 220); | ||
} | } | ||
void turnleft() { | void turnleft() { | ||
Строка 60: | Строка 67: | ||
right(); | right(); | ||
delay(500); | delay(500); | ||
while(digitalRead(R1==1 | while(digitalRead(R1)==1) | ||
{ | { | ||
right(); | right(); | ||
Строка 72: | Строка 79: | ||
} | } | ||
int perekrestok = 1; | int perekrestok = 1; | ||
void loop() | void loop() | ||
{ | { |
Текущая версия от 17:50, 20 февраля 2021
//////////////////////////////////////////////
// 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++;
}
}
}