Требуется помощь в написании программы
- Войдите на сайт для отправки комментариев
Здравствуйте!
За помощь готов проставиться (Питер/Москва) или заказать в подарок книжку с озона или кинуть денег на телефон и послать лучиков добра. На выбор.
Есть ардуино+мотор шилд, 2 сервы, 2 dc мотора, 4 кнопки. Языками программирования совершенно не владею, объясняю как могу:
Включение
Серво 1 положение1, Серво 2 положение 1
Проверка кнопки 1. Если нажата, то ничего. Если нет, то мотор 1 вперед, пока не нажмется.
Проверка кнопки 2. Если нажата, то ничего. Если нет, то мотор 2 вперед, пока не нажмется.
Ожидание кнопки 3. Если произошло событие нажатия кнопки, то
Мотор 2 назад, пока не нажмется кнопка 4
Серво 1 положение 2 и сразу положение 3
Серво 2 положение 2
В начало
Это для модели рекламного аппарата раздачи всякой подарочной фигни
А кнопки как подключаете?
Через сопротивление 10кОм. Как здесь написано http://freeduino.ru/arduino/sample_Buttons.html
Вы посмотрите остальные примеры! Может и самостоятельно сделаете =) т.к. ничего сложного нет.. Могу порекомендовать видео уроки
Через сопротивление 10кОм. Как здесь написано http://freeduino.ru/arduino/sample_Buttons.html
Там совершенно два противоположных способа подключения, какой из них?
Лучше использовать первый способ, тогда резисторы можно вообще убрать. И "подтяжку" к +5в сделать програмно.
Я с удовольствием потом все посмотрю и научусь. Сейчас просто форс-мажор. Завтра уже надо показывать, а у меня еще механика не доделана
Могу любой какой скажете. Говорят первый предпочтительнее
Лучше использовать первый способ, тогда резисторы можно вообще убрать. И "подтяжку" к +5в сделать програмно.
А по мне то второй логично. Хотя всё равно лишь бы работало в вашем случае.
В помощь:
Кнопки
Сервы
И так. Так как моторшилд занимает практически все цифровые выводы (пины) будем подключать кнопки к аналоговым входам (ANALOG IN) 0, 1, 2, 3 кнопки 1, 2, 3, 4 соответственно, резисторы можно убрать(т.е. один конец кнопки к выводу, а другой к GND и всё). Двигатили подключаем к М1 и М2. Вот протестируйте код, включение и первые две кнопки должны работать.
А по мне то второй логично. Хотя всё равно лишь бы работало в вашем случае.
Просто в первом случае можно отказаться от подтягивающих резисторов.
Сейчас попробую, через полчаса отпишусь
С 3 кнопки можно поподробнее?
При включении аппарата происходит приведение в боевую готовность (сервы в положения 1, моторы вперед пока не нажмутся кнопки 1 и 2). Кнопка 3 (кратковременное нажатие) запускает выдачу товара, т.е. нажал - машина выдала тебе товар (Мотор 2 назад, пока не нажмется кнопка 4, серво 1 положение 2 и сразу положение 3, серво 2 положение 2) и опять привелась в боевую готовность (сервы в положения 1, моторы вперед пока не нажмутся кнопки 1 и 2) .
Еще раз. Нажали кнопку 3, что происходит? Только 2 дв. назад? Подробнее! А не тоже самое!
И как 2 двигатель будет крутиться назад если кнопка 2 отпущена?(по вашему же условию: Если нажата, то ничего. Если нет, то мотор 2 вперед, пока не нажмется.)
Получается, что после нажатия кнопки 3 устройство должно перестать реагировать на кнопку 2 и реагировать на кнопку 4 пока цикл не завершится. И наоборот, при старте/начале цикла не реагировать на кнопку 4, а реагировать на кнопку 2. Спасибо за наводящие вопросы, я сразу об этом не подумал. Сейчас проверяю ваш код, через пару минут отпишусь.
Сервы в какой момент, должны начинать работать?
Кнопки 2 и 4 это крайние положения штока толкателя. Когда он едет от 2 к 4 происходит выдача, а когда наоборот взвод в боевое положение.
Сервы начинают работать после нажатия кнопки 4
Опишите подробно алгоритм работы серв с временными интервалами.
После старта сначала сервы (можно оновременно), сразу за ними моторы 1 и 2. После нажатия кнопки 3 сначала мотор 2 до нажатия кнопки 4, после сразу серво 1 в положение 2, пауза полсекунды, и в положение 3. Сразу после серво 2 в положение 2.
Странно, я распаковал библиотеку AFMotor в libraries, а все равно пишет C:\arduino-1.0\libraries\AFMotor\AFMotor.cpp:7:22: error: WProgram.h: No such file or directory
Закройте и снова запустите IDE
Да нет, библиотека старая оказалась. Ваш код работает отлично. Кнопки нажаты - моторы стоят, отжаты - крутятся.
Так а первый двигатель зачем?
Первый крутит барабанный магазин с товаром. Если в ячейке есть товар, то нажимается кнопка 1.
Сейчас проверить не на чем, так что если что-то не так пишите подробно, параметры для настройки в начале кода.
На макете все вроде работает, иногда почему-то на кнопки не реагирует, но в целом все OK. Сейчас попробую собрать все на устройстве
Кнопка 1 и кнопка 4 все ОК. Кнопки 2 и 3 случайным образом иногда реагируют, а иногда нет. Чаще не реагируют.
Если убрать из кода строки 69-70-71, то с кнопкой 2 все становится ОК, но кнопка 3 реагирует только в первом после включения цикле, а дальше не реагирует.
Вот ошибка, в 69 строке поменяйте BUTTON2 на BUTTON3, проглядел.
maksim, вы мне очень помогли, все работает отлично! Как я могу вас отблагодарить?