Вот, собрал платформочку, начал разбираться с программированием. Столкнулся с такой проблемой:
Подключил инфракрасный дальномер GP2D1. Едет вперед, впереди стенка, лезет на стенку, а отъезжать начинает уже когда на стену лезет.
Получается, что сигнал с датчика не останавливает выполне5ние движения вперед в момент обнаружения препятствия, а срабатывает только при начале следующего цикла основной программы. Как реализовать чтоб он сразу срабатывал и отъезжать начинал?
Вот мой скетч:
/*******************************************************************************
* ROBOT
* Filename : MyRobot01.pde
********************************************************************************/
#include <AFMotor.h> // подключили библиотеку для работы с ДПТ и ШД
AF_DCMotor Motor3(3, MOTOR12_1KHZ); // используем 1-й порт на частоте ШИМ 1 кГц (можно 1,2,8,64)
AF_DCMotor Motor4(4, MOTOR12_1KHZ); // используем 2-й порт на частоте ШИМ 1 кГц (можно 1,2,8,64)
int dalnomer = 4; // дальномер
int gp2;
float distance;
// -----------------------------------------------------------------
void setup(){
Motor3.setSpeed(200); // устанавливаем скорость вращения двигателя на 1-м порту
Motor4.setSpeed(200); // устанавливаем скорость вращения двигателя на 2-м порту
} // end setup
// -----------------------------------------------------------------
// О С Н О В Н О Й Ц И К Л П Р О Г Р А М М Ы
void loop() {
gp2=analogRead(dalnomer);
distance=(2914/(gp2+5))-1; // Перевод в сантиметры
if (distance < 7)
{
Backward (250); delay (2000);
Spin_Right(); delay(2000);
}
// БЛУЖДАЮЩИЙ ЦИКЛ
// -----------------------------------------------------------------
Forward (250); delay(2000);
//Spin_Left(); delay(2000);
//Forward(200); delay(2000);
//Spin_Right(); delay(2000);
//Backward (150); delay(2000);
} // end loop
// ПОДПРОГРАММЫ ДВИЖЕНИЙ
// -----------------------------------------------------------------
void Forward (int speed){ // движение вперед
Motor3.setSpeed(speed); // устанавливаем скорость вращения двигателя на 1-м порту
Motor4.setSpeed(speed); // устанавливаем скорость вращения двигателя на 2-м порту
Motor3.run(FORWARD); // 1-й моторчик вперед крутится
Motor4.run(FORWARD); // 2-й моторчик вперед крутится
} // end Forward
void Backward (int speed){ // движение вперед
Motor3.setSpeed(speed); // устанавливаем скорость вращения двигателя на 1-м порту
Motor4.setSpeed(speed); // устанавливаем скорость вращения двигателя на 2-м порту
Motor3.run(BACKWARD); // 1-й моторчик назад крутится
Motor4.run(BACKWARD); // 2-й моторчик назад крутится
} // end Forward
void Release (){ // выбег с остановом
Motor3.run(RELEASE);
Motor4.run(RELEASE);
} // end Release
void Stop (){ // останов
Motor3.run(BRAKE);
Motor4.run(BRAKE);
} // end Stop
void Spin_Right (){ // поворот влево
Motor3.setSpeed(500); // устанавливаем скорость вращения двигателя на 1-м порту
Motor4.setSpeed(500);
Motor3.run(FORWARD); // 1-й моторчик вперед крутится
Motor4.run(BACKWARD);
delay (2000);
Motor3.run(RELEASE);
Motor4.run(RELEASE);
} // end Spin_Right
void Spin_Left (){ // поворот влево
Motor3.setSpeed(500);// устанавливаем скорость вращения двигателя на 1-м порту
Motor4.setSpeed(500);
Motor4.run(FORWARD); // 2-й моторчик вперед крутится
Motor3.run(BACKWARD);
delay (2000);
Motor3.run(RELEASE);
Motor4.run(RELEASE);
} // end Spin_Left
// -----------------------------------------------------------------