Часть III. Практическое применение Arduino
ir_time2=millis();
ir_kod=ir_dt;
Serial.println(ir_kod);
}
irrecv.resume();
}
attachInterrupt(0, get_ir_kod, FALLING);
}
// переустановка моторов
void go12(int poz1,int poz2)
{
digitalWrite(MOTOR1.in1, arrpoz[0][poz1]);
digitalWrite(MOTOR1.in2, arrpoz[1][poz1]);
analogWrite(MOTOR1.enable, arrpoz[2][poz1]);
digitalWrite(MOTOR2.in1, arrpoz[3][poz2]);
digitalWrite(MOTOR2.in2, arrpoz[4][poz2]);
analogWrite(MOTOR2.enable, arrpoz[5][poz2]);
}
// обработка кода нажатия
void ir_go(long kod)
{
if(kod!=EXT && local==1)
return;
switch(kod)
{
case LOCAL : // внешнее управление включить
POZ12.direction12=10;POZ12.poz1=10;POZ12.poz2=10;
go12(10,10);local=1;
break;
case LOCAL_LEFT : //
POZ12.direction12=8;POZ12.poz1=7;POZ12.poz2=8;
go12(POZ12.poz1,POZ12.poz2);
break;
case LOCAL_RIGHT : // по датчику вправо
POZ12.direction12=8;POZ12.poz1=8;POZ12.poz2=7;
go12(POZ12.poz1,POZ12.poz2);
break;
case EXT : // внешнее управление включить
local=0;
break;
case FORWARD : // направление вперед
POZ12.direction12=max(POZ12.direction12,8);
POZ12.poz1=POZ12.direction12;
POZ12.poz2=POZ12.direction12;
go12(POZ12.poz1,POZ12.poz2);
break;
Глава 21. Создаем робота
287
case BACK : // направление назад
POZ12.direction12=min(POZ12.direction12,6);
POZ12.poz1=POZ12.direction12;
POZ12.poz2=POZ12.direction12;
go12(POZ12.poz1,POZ12.poz2);
break;
case SPEED_UP : // скорость++
POZ12.direction12=POZ12.direction12+arrpoz[6][POZ12.direction12];
POZ12.poz1=POZ12.direction12;
POZ12.poz2=POZ12.direction12;
go12(POZ12.poz1,POZ12.poz2);
break;
case SPEED_DOWN : // скорость--
POZ12.direction12=POZ12.direction12-arrpoz[7][POZ12.direction12];
POZ12.poz1=POZ12.direction12;
POZ12.poz2=POZ12.direction12;
go12(POZ12.poz1,POZ12.poz2);
break;
case LEFT : // влево
if(POZ12.direction12>7)
{
POZ12.poz1=POZ12.poz1-1;POZ12.poz1=max(POZ12.poz1,0);
POZ12.poz2=POZ12.direction12;
}
else if(POZ12.direction12<7)
{
POZ12.poz1=POZ12.poz1+1;POZ12.poz1=min(POZ12.poz1,14);
POZ12.poz2=POZ12.direction12;
}
go12(POZ12.poz1,POZ12.poz2);
break;
case RIGHT : // вправо
if(POZ12.direction12>7)
{
POZ12.poz2=POZ12.poz2-1;POZ12.poz2=max(POZ12.poz2,0);
POZ12.poz1=POZ12.direction12;
}
else if(POZ12.direction12<7)
{
POZ12.poz2=POZ12.poz2+1;POZ12.poz2=min(POZ12.poz2,14);
POZ12.poz1=POZ12.direction12;
}
go12(POZ12.poz1,POZ12.poz2);
break;
case CIRCLE_RIGHT : // кружение вправо
POZ12.poz1=POZ12.direction12;
POZ12.poz2=POZ12.direction12+arrpoz[8][POZ12.direction12];
288
Do'stlaringiz bilan baham: |