Программа для робота на ардуино

DooM_Ko
Offline
Зарегистрирован: 05.04.2018

Задача робота: Робот едет по прямой чёрной линии до того момента пока не увидит ультразвуковым дальномером (на расстоянии < 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);
}
}
}
 
kalapanga
Offline
Зарегистрирован: 23.10.2016

Так а где робот-то? Залили скетч и проверили. Без такой проверки любой скетч "правильный".

Ну и обязательно Вставка программного кода в тему/комментарий

sadman41
Offline
Зарегистрирован: 19.10.2016

Задачу поняли! Разрешите приступить к выполнению!?

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

подпишусь...

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

я тоже, может узнаю как ардуино без стороних модулей научилась отличать черное от белого...

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Valera19701 пишет:

подпишусь...

Вы о высказывании выше или о теме в целом?

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

о теме

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Так тема умрет, если я за проектирование кода не возьмусь. Или кто-то не возмется. На ТС надеятся себя обманывать.

DooM_Ko
Offline
Зарегистрирован: 05.04.2018

да

 

sadman41
Offline
Зарегистрирован: 19.10.2016

xDriver пишет:

я тоже, может узнаю как ардуино без стороних модулей научилась отличать черное от белого...

По эху ультразвука. В черном оно вязнет.

DooM_Ko
Offline
Зарегистрирован: 05.04.2018

у меня датчик линии но я его использую для определения чёрного и белого цвета

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DooM_Ko пишет:

да

Что "да"?

Или как в известной сказке:

Царь

Вызывает антирес
Ваш технический прогресс:
Как у вас там сеют брюкву —
С кожурою али без?..

Посол

Йес!

Царь

Вызывает антирес
Ваш питательный процесс:
Как у вас там пьют какаву —
С сахарином али без?..

Посол

Йес!

Царь

Вызывает антирес
И такой ишо разрез:
Как у вас там ходют бабы —
В панталонах али без?..

Посол

Йес!

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Во-первых, как Вам уже сказали - вставьте код в пост как положено, а во-вторых, Вы пишете что "у меня там ИК датчик, которым" .. извините, а где он у Вас в программе используется?

Ну и да .. стало тожелюбопытно как - на реальном роботе, уже получилось или что-то пошло не так? (почему мне кажется второе?) :)