Очередной 2WD робот
- Войдите на сайт для отправки комментариев
Сб, 17/10/2015 - 23:00
Всем привет,
Собрал 2wd робота из: Arduino Nano, L293E, HC-SR04, 2 dc двигателя с редукторомами
залил приведёный ниже скетч
хотелось бы услышать полезных советов или ссылок на похожее, а то я считаю фигня какая-то получилась)))
struct MOTOR // структура для хранения номеров pin-ов, к которым подключены моторчики
{
int in1; // INPUT1
int in2; // INPUT2
int enable; // ENABLE1
};
int Trig = 11; // УЗИ
int Echo = 10; // УЗИ
int ledPin = 13; // светодиод на плате ардуино
unsigned int impulseTime = 0; // импульс для УЗИ
unsigned int distance_sm = 0;
// определяем порты, к которым подключены моторчики
MOTOR MOTOR1 = { 7, 8, 9 };
MOTOR MOTOR2 = { 2, 4, 6 };
void setup()
{
Serial.begin(9600);
pinMode(MOTOR1.in1, OUTPUT); // настраиваем выводы
pinMode(MOTOR1.in2, OUTPUT); // на ВЫВОД
pinMode(MOTOR2.in1, OUTPUT);
pinMode(MOTOR2.in2, OUTPUT);
pinMode(Trig, OUTPUT); // выход УЗИ
pinMode(Echo, INPUT); // вход УЗИ
pinMode(ledPin, OUTPUT);
}
void loop()
{
digitalWrite(Trig, HIGH);
/* Подаем импульс на вход trig дальномера */
delayMicroseconds(10); // равный 10 микросекундам
digitalWrite(Trig, LOW); // Отключаем
impulseTime = pulseIn(Echo, HIGH); // Замеряем длину импульса
distance_sm = impulseTime / 58; // Пересчитываем в сантиметры
Serial.println(distance_sm); // Выводим на порт
delay(100);
if (distance_sm < 15) // Если расстояние менее X сантиметров
{
forward1() ;
back2() ;
}
else
{
forward1() ;
forward2();
}
delay(100);
}
void forward1() // первый вперёд
{
digitalWrite(MOTOR1.in1, HIGH);
digitalWrite(MOTOR1.in2, LOW);
for (int i = 0; i <= 255; i++)
analogWrite(MOTOR1.enable, i);
}
void forward2() // второй вперёд
{
digitalWrite(MOTOR2.in1, HIGH);
digitalWrite(MOTOR2.in2, LOW);
for (int i = 0; i <= 255; i++)
analogWrite(MOTOR2.enable, i);
}
void back1() // первый назад
{
digitalWrite(MOTOR1.in1, LOW);
digitalWrite(MOTOR1.in2, HIGH);
for (int i = 0; i <= 255; i++)
analogWrite(MOTOR1.enable, i);
}
void back2() // второй назад
{
digitalWrite(MOTOR2.in1, LOW);
digitalWrite(MOTOR2.in2, HIGH);
for (int i = 0; i <= 255; i++)
analogWrite(MOTOR2.enable, i);
}