Официальный сайт компании Arduino по адресу arduino.cc
Очередной 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); }