Форум myROBOT.ru » Шаг за шагом » С чего начать? » Пара глупых вопосов о программировании на C

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

1. Резистор - 11 Сентября, 2013 - 13:14:54 - перейти к сообщению
Здравствуйте!!На днях меня посетила идея, сделать робота, который будет выходить из лабиринта. Алгоритм я написал. Для полноценного его исполнения мне надо знать, как сделать так что-бы порты были настроены на вход.(а можно ещё сделать так, что половина портов настроена на вход а половина на выход?) Ещё я не знаю как делать проверку на уровень сигнала и какие библиотеки надо использовать тоже не знаю.
Ещё. Как сделать так, что-бы при определённом условии, микроконтроллер(точнее динамик, подключенный к нему) издавал "ПИК"?
(Добавление)
А, и ещё. Используется WINAVR.
2. Роботов - 11 Сентября, 2013 - 14:44:51 - перейти к сообщению
Неплохо было бы вам сначала светодиодом помигать, написав простейшую программу, а потом уж за езду по лабиринтам браться. Подмигивающий
3. Резистор - 11 Сентября, 2013 - 15:18:44 - перейти к сообщению
Роботов пишет:
Неплохо было бы вам сначала светодиодом помигать, написав простейшую программу, а потом уж за езду по лабиринтам браться. Подмигивающий

Светодиодом я уже мигал...И даже "бегущий огонёк" делал
4. Роботов - 11 Сентября, 2013 - 17:56:50 - перейти к сообщению
Тогда непонятно вот это:
Резистор пишет:
Для полноценного его исполнения мне надо знать, как сделать так что-бы порты были настроены на вход.(а можно ещё сделать так, что половина портов настроена на вход а половина на выход?)

Если светодиодом мигали, значит знаете как порты настраивать.
...или мигали чужой программой? Подмигивающий
5. Резистор - 11 Сентября, 2013 - 18:02:28 - перейти к сообщению
Как порты настраивать мне понятно(раньше я делал это на асме). Не совсем понятно, можно-ли их настроить так, чтоб половина была на вход, другая половина на выход(
DDRD = 11110000b; так?)И как получать с них данные.А затем проверить на наличие сигнала( логической единицы ).
Изначальный вопрос был некорректно составлен мной
6. Роботов - 11 Сентября, 2013 - 19:10:58 - перейти к сообщению
Резистор пишет:
DDRD = 11110000b; так?)

Если на Си то вот так: DDRD=0b11110000; или DDRD=0xF0;
Получить данные с порта D можно так: i = PIND;
А вообще, в даташите на ваш МК в разделе порты ввода-вывода всё описано, и даже примеры есть на Си и на ассемблере.
(Добавление)
З.Ы. Какой МК-то?
7. Резистор - 11 Сентября, 2013 - 19:47:09 - перейти к сообщению
Роботов пишет:
Резистор пишет:
DDRD = 11110000b; так?)

Если на Си то вот так: DDRD=0b11110000; или DDRD=0xF0;
Получить данные с порта D можно так: i = PIND;
А вообще, в даташите на ваш МК в разделе порты ввода-вывода всё описано, и даже примеры есть на Си и на ассемблере.
(Добавление)
З.Ы. Какой МК-то?


Atmega8
8. Vladimir72 - 12 Сентября, 2013 - 01:36:58 - перейти к сообщению
Лабиринты бывают разные, лабиринт линия, или коридор?
Какие датчики ты используешь цифровые или аналоговые, и сколько датчиков?
И мне интересно какой алгоритм ты используешь?
И хочу тебе дать совет, начни от простого к сложному, этот робот сложный, я над проектом робот лабиринт год работаю. Глатко было на бумаге, а на поле то овраги.
9. Резистор - 12 Сентября, 2013 - 13:15:07 - перейти к сообщению
[quote=Vladimir72][/quote]
Ну ладно, предположим, что я отказался от идеи сделать робота. Но мне всё равно интересно как сделать проверку, есть напряжение на одном порту или нет?
Датчики аналоговые - фоторезистор(другого в магазине не было)
10. Петр Киселев - 12 Сентября, 2013 - 13:28:53 - перейти к сообщению
Резистор пишет:
Но мне всё равно интересно как сделать проверку, есть напряжение на одном порту или нет?

Для этого можно взять простой индикатор (свветодиод и сопротивление) и подключить его к интересующему тебя порту.
Еще лучше взять восьми разрядный индикатор и его подключить к интересующим портам.
(Добавление)
Но это можно будет сделать, если у тебя не динамический режим!
Или можно, если подача сигналов на порт идет с частотой 1 Гц/сек.
(Добавление)
Еще можно программно организовать тестовый режим и помигать в нем по портам светодиодом (ты писал, что это умеешь делать).
11. Vladimir72 - 12 Сентября, 2013 - 14:28:02 - перейти к сообщению
Вот ссылка http://myrobot.ru/stepbystep/r_firstbot2.php посмотри там есть что тебя интересует
(Добавление)
подключение фотосенсоров http://myrobot.ru/wiki/index.php...impleRobotTuning
12. Резистор - 12 Сентября, 2013 - 16:10:38 - перейти к сообщению
[quote=Vladimir72][/quote]
спасибо, а вы можете объяснить мне вот эту строчку:
if (!(PIND & (1<<PIND1)))?
13. Vladimir72 - 12 Сентября, 2013 - 16:18:59 - перейти к сообщению
Проверить "0" на линии 1 порта D
(Добавление)
читай внимательно там все написано
CODE:
// ПРОВЕРЯЕМ СИГНАЛ НИЗКОГО УРОВНЯ ОТ ФОТОДАТЧИКА

if (!(PIND & (1<<PIND1))) // проверить "0" на линии 1 порта D
{
14. Резистор - 12 Сентября, 2013 - 16:29:05 - перейти к сообщению
[quote=Vladimir72][/quote]
это я итак понял, мне нужно поподробнее(что делает например << или PIND, что значит 1<<PIND и т.д)
15. Vladimir72 - 12 Сентября, 2013 - 16:33:52 - перейти к сообщению
читай внимательно там все написано
CODE:
// ПРОВЕРЯЕМ СИГНАЛ НИЗКОГО УРОВНЯ ОТ ФОТОДАТЧИКА

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

(Добавление)
Если на входе 3 МК "0" то делаем
{
едем вперед
}
иначе // на входе 3 МК "1"
{
едем назад
}
(Добавление)
<< двигаем "1" PD1 в МК mega8 это 3 нога.