роботы робототехника микроконтроллеры


 Страниц (1): [1]   

> Без описания
Гусек Post Id


Рядовой


Сообщений всего: 11
Дата рег-ции: Март 2009  



Вообщем смысл такой:когда робот около препятствия то фототранзистор улавливает отраженный от препятствия свет от светодиода и открывается. Робот должен отъехать от препятствия и повернуть на определенный угол(например 60 градусов) и снова продолжить путь)) Какую программу использовать может у кого нибудь есть подобная??
вот что сам наработал но она не компилируется((

/***********************************************************************
ПРИМЕР 3 :: ВРАЩЕНИЕ МОТОРАМИ С ИСПОЛЬЗОВАНИЕМ ФОТОДАТЧИКА :: MYROBOT.RU
************************************************************************/

#include <avr/io.h>

int main(void) // начало основной программы
{

DDRC = 0xff; // все выводы порта C сконфигурировать как выходы
DDRD = 0x00; // все выводы порта D сконфигурировать как входы


PORTD = 0xff; // установить "1" на всех выводах порта D,
// включаем подтягивающие резисторы

while (1) { // Бесконечный цикл

// ПРОВЕРЯЕМ СИГНАЛ НИЗКОГО УРОНЯ ОТ ФОТОДАТЧИКА

if (!(PIND & (1<<PIND1))) // проверить "0" на линии 1 порта D
{
// ---------- вращаем моторы вперед ----------

PORTC |= _BV(PC1); // установить "1" на линии 1 порта C
PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта C
PORTC |= _BV(PC3); // установить "1" на линии 3 порта C
PORTC &= ~_BV(PC4); // установить "0" на линии 4 порта C

// -------------------------------- ------------------
}
else
{
// ---------- вращаем моторы назад 1 сек ----------

PORTC &= ~_BV(PC1); // установить "0" на линии 1 порта C
PORTC |= _BV(PC2); // установить "1" на линии 2 порта C
PORTC &= ~_BV(PC3); // установить "0" на линии 3 порта C
PORTC |= _BV(PC4); // установить "1" на линии 4 порта C

_delay_ms(1000); // ждем 1 сек.

// -------------------------------- ------------------




// ---------- останавливаем мотор M2 на 0,5 сек ------

PORTC |= _BV(PC1); // установить "1" на линии 1 порта C
PORTC |= _BV(PC2); // установить "1" на линии 2 порта C

_delay_ms(500); // ждем 0,5 сек.

// -------------------------------- --------------------
}


} // закрывающая скобка бесконечного цикла

} // закрывающая скобка основной программы
(Добавление)
да и кто-то еще говорил что задержку нельзя ставить более 262 ms это так??растолкуйте пожалуйста а то я в программировании 0)))
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



Гусек пишет:
не компилируется
Добавте
CODE:
#include <util/delay.h>
Гусек пишет:
задержку нельзя ставить более 262 ms
Там где это нашли, обязательно уточните почему. Потом расскажете. Мне очень интересно. Если было бы сказано про 255 ms или 65535 ms, а тут...
 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



ну может как раз из-за этих тактов что на вход и выход тратятся (найду у себя - вылажу, там человек не только каждый код закомментировал, так еще и такты поставил и показал как их правильно считать.)
Гусек пишет:
нельзя ставить более 262
это зависит от частоты на которой Ваш МК сейчас работает. так что бредня, нужно самому.

Прочитав что не компилируется- не стал читать. Что линковщик пишет? делай это внешняя библиотека, она отдельно подключется.
 
 Top
Гусек Post Id


Рядовой


Сообщений всего: 11
Дата рег-ции: Март 2009  



всем спасибо за помощь с этим разобрался)теперь проблема в другом можно ли сделать чтобы останавливался не именно м2 а либо м2 либо м1 то есть как бы случайный выбор?????
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



Гусек пишет:
можно ли сделать ... случайный выбор?
Можно. Вариантов вагон и маленькая тележка.

В своем маленьком ботике на ATmega8 я для этих целей использовал восьмибитный таймер/счетчик. Запускаешь таймер и ждешь пока сработает ИК-бампер. Проверяешь счетный регистр таймера. Если больше 128, останавливаешь левый двигатель. Если нет, останавливаешь правый двигатель.

Еще для этих целей можно использовать ADC.

Еще можно использовать средства стандартной библиотеки С для получения почти случайных чисел.

Еще можно самостоятельно написать функцию генерирующую псевдослучайные числа.

(Отредактировано автором: 24 Апреля, 2012 - 06:43:00)

 
 Top
Гусек Post Id


Рядовой


Сообщений всего: 11
Дата рег-ции: Март 2009  



а принер можно ????пожалуйста
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



Какой МК?
 
 Top
Страниц (1): [1]
« Программирование микроконтроллеров »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru