Программа для робота на ардуино
- Войдите на сайт для отправки комментариев
Чт, 05/04/2018 - 20:32
Задача робота: Робот едет по прямой чёрной линии до того момента пока не увидит ультразвуковым дальномером (на расстоянии < 3см) куб чёрного или белого цвета а потом с помощью подъёмного механизма на сервоприводе поднимает куб и потом едет назад до базы. База полностью чёрная и когда робот приезжает на базу то в зависимости от цвета куба робот кладёт куб слева или справа. Нужна помощь в проверке кода.
код:
#include <Servo.h>
Servo servo1;
int my_speed = 140;
byte delta = 80;
int cm, duration;
void setup() {
pinMode(4, OUTPUT); //выход мотора A1
pinMode(5, OUTPUT); //выход мотора A2
pinMode(6, OUTPUT); //выход мотора B1
pinMode(7, OUTPUT); //выход мотора B2
servo1.attach(3); // привязываем сервопривод к аналоговому выходу 11
//pinMode(13, OUTPUT); //питание датчика 1
pinMode(8, INPUT); //сигнал датчика левый
pinMode(9, INPUT); //сигнал датчика правый
pinMode(10, INPUT); //сигнал датчика кубов
//digitalWrite(13, HIGH); //включить датчик 2
Serial.begin (9600); // подключаем монитор порта
pinMode(11, OUTPUT); // назначаем trigPin (Pin8), как выход
pinMode(12, INPUT); // назначаем echoPin (Pin9), как вход
}
void loop() {
// ========== УЛЬТРАЗВУКОМ НАЧИНАЕМ ИЗМЕРЯТЬ РАССТОЯНИЕ
analogWrite(11, LOW);
delayMicroseconds(2);
digitalWrite(11, HIGH);
delayMicroseconds(10);
digitalWrite(11, LOW);
duration = pulseIn(12, HIGH);
cm = duration / 58;
Serial.println(cm);
if (cm < 2)
CUBE_UP(); // КОМАНДА ОСТАНОВКИ И ПОДНЯТИЯ ЗАХВАТА
else if (!digitalRead(9) && digitalRead(8))
SPIN_RIGHT();
else if (!digitalRead(8) && digitalRead(9))
SPIN_LEFT();
else if (digitalRead(8) && digitalRead(9))
FORWARD();
//else if (digitalRead(8) && digitalRead(9) && digitalRead(12))
//BACK();
}
void FORWARD() {
digitalWrite(4, LOW);
digitalWrite(6, LOW);
analogWrite(5, my_speed);
analogWrite(7, my_speed);
}
void SPIN_LEFT() {
digitalWrite(4, LOW);
digitalWrite(6, LOW);
analogWrite(5, my_speed - delta);
analogWrite(7, my_speed + delta);
}
void SPIN_RIGHT() {
digitalWrite(4, LOW);
digitalWrite(6, LOW);
analogWrite(5, my_speed + delta);
analogWrite(7, my_speed - delta);
}
void CUBE_UP() {
if (cm < 2)
{
servo1.write(0);
delay(1500);
}
else {
servo1.write(90);
}
//void BACK()
if (digitalRead(8) && digitalRead(9))
{
digitalWrite(4, LOW);
digitalWrite(6, LOW);
analogWrite(5, my_speed);
analogWrite(7, my_speed);
if (!digitalRead(9) && !digitalRead(8) && digitalRead(10)){
analogWrite(4, HIGH);
analogWrite(6, HIGH);
digitalWrite(5, LOW);
digitalWrite(7, LOW);
delay(500);
digitalWrite(4, LOW);
digitalWrite(6, LOW);
analogWrite(5, my_speed);
analogWrite(7, my_speed);
delay(1000);
if (cm < 2) {
servo1.write(90);
}
}
else if (!digitalRead(9) && !digitalRead(8) && !digitalRead(10)) {
analogWrite(5, HIGH);
analogWrite(7, HIGH);
digitalWrite(4, LOW);
digitalWrite(6, LOW);
delay(500);
}
digitalWrite(4, LOW);
digitalWrite(6, LOW);
analogWrite(5, my_speed);
analogWrite(7, my_speed);
delay(1000);
if (cm < 2) {
servo1.write(0);
}
}
}
Так а где робот-то? Залили скетч и проверили. Без такой проверки любой скетч "правильный".
Ну и обязательно Вставка программного кода в тему/комментарий
Задачу поняли! Разрешите приступить к выполнению!?
подпишусь...
я тоже, может узнаю как ардуино без стороних модулей научилась отличать черное от белого...
подпишусь...
о теме
Так тема умрет, если я за проектирование кода не возьмусь. Или кто-то не возмется. На ТС надеятся себя обманывать.
да
я тоже, может узнаю как ардуино без стороних модулей научилась отличать черное от белого...
По эху ультразвука. В черном оно вязнет.
у меня датчик линии но я его использую для определения чёрного и белого цвета
да
Что "да"?
Или как в известной сказке:
Царь
Вызывает антирес
Ваш технический прогресс:
Как у вас там сеют брюкву —
С кожурою али без?..
Посол
Йес!
Царь
Вызывает антирес
Ваш питательный процесс:
Как у вас там пьют какаву —
С сахарином али без?..
Посол
Йес!
Царь
Вызывает антирес
И такой ишо разрез:
Как у вас там ходют бабы —
В панталонах али без?..
Посол
Йес!
Во-первых, как Вам уже сказали - вставьте код в пост как положено, а во-вторых, Вы пишете что "у меня там ИК датчик, которым" .. извините, а где он у Вас в программе используется?
Ну и да .. стало тожелюбопытно как - на реальном роботе, уже получилось или что-то пошло не так? (почему мне кажется второе?) :)