Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2013, 07:19   #1
Klewer
 
Регистрация: 28.02.2013
Сообщений: 6
По умолчанию Приложение для USB HID

есть у меня платка с процессором at90usb162, задумал я приспособить его для управления простейшим роботом-манипулятором на 4-х степенях свободы. сам робот состоит из редукторов и коллекторных моторов с постоянными магнитами. идея такова. на моторах стоят датчки Холла, с них идут сигналы числа оборотов. в приложении на ПК задаёшь программу действий в виде step-dir количество оборотов в том то направлении для такого то звена.
на данный момент у меня есть простейшая модель в железе и программа - пример для управления четырьмя светодиодами. по ходу дела изучаю программирование на VС++, мои первые шаги переделать кнопки из примера под другой алгоритм срабатывания. сейчас кнопки действуют как триггеры: нажал отпустил, диод горит. нажал отпустил диод погас. мне же надо переделать алгоритм под: нажал держишь, диод горит, отпустил или увёл стрелку мыши, диод погас.
Подскажите идею в какую сторону двигаться?
Вложения
Тип файла: rar ROBO.rar (84.1 Кб, 14 просмотров)

Последний раз редактировалось Klewer; 01.03.2013 в 07:28. Причина: добавил файл исходника
Klewer вне форума Ответить с цитированием
Старый 11.03.2013, 13:27   #2
Klewer
 
Регистрация: 28.02.2013
Сообщений: 6
По умолчанию

на моей плате светодиод штатный загорается от кнопки 3, с ней и разбираюсь. думаю может подправить алгоритм действия представленный блоком
void CUsbHidDemoCodeDlg::OnLed3()
{

if(Led3 == false) {
Led3 = true;
m_Led3.SetWindowText(_T("LED 3 ON"));
DYNCALL(writeData)((UCHAR *)"13");
}
else {
Led3 = false;
m_Led3.SetWindowText(_T("LED 3 OFF"));
DYNCALL(writeData)((UCHAR *)"03");

// CUsbHidDemoCodeDlg::OnLed3();
// m_Led3.SetWindowText(_T("LED 3 ON"));
// DYNCALL(writeData)((UCHAR *)"13");
// MessageBeep(0);
}

}
внизу куски закомментенного кода моя дребедень всякая, пробы.
Klewer вне форума Ответить с цитированием
Старый 11.03.2013, 15:37   #3
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...добавьте:
- WEB сервер в AVR (есть готовые TCP стеки) для возможности контроля по сети
- блютуз-модуль с прозрачным UART (есть до 9-ти баксов серии HC-XX) для удаленного контроля со смарта/КПК/ноута
- присобачьте акселерометр (применений множество)
- ...
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 11.03.2013, 17:18   #4
Klewer
 
Регистрация: 28.02.2013
Сообщений: 6
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
...добавьте:
- WEB сервер в AVR (есть готовые TCP стеки) для возможности контроля по сети
- блютуз-модуль с прозрачным UART (есть до 9-ти баксов серии HC-XX) для удаленного контроля со смарта/КПК/ноута
- присобачьте акселерометр (применений множество)
- ...
очень улыбнуло))) хоть повеселили раз по теме ничего нет. я и с кнопками то ещё не разобрался, а тут уарт тисипи, стеки, красотааа)))
короче покачто перечитываю и очень стараюсь вникнуть в теорию бутонов (кнопарей) к сожалению, компилятор пока не порадовал собранным успешно скриптом, разбираюсь с ошибками
Klewer вне форума Ответить с цитированием
Старый 11.03.2013, 17:49   #5
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
очень улыбнуло))) хоть повеселили раз по теме ничего нет
рад, что вас улыбнуло, хотя совет был абсолютно серъезен в ответ на ваше и по существу вопроса:
Цитата:
Подскажите идею в какую сторону двигаться?
=================
Цитата:
и очень стараюсь вникнуть
cтарания всегда вознаграждаются так или иначе. Для работы с UART-ом можете воспользоваться генератором шаблонов CVAVR, сам блютуз-модуль прикручивать программно не потребуется (намек про прозрачный UART поняли?).

=================
По поводу стеков, тоже ничто не мешает параллельно поизучать готовые аппноты, благо есть и переводы на русский.

По поводу акселерометров, есть готовые библиотеки-модули. В общем, можно оперировать кирпичиками на первом этапе, попутно вникая в тему. Удачи.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 12.03.2013, 03:51   #6
Klewer
 
Регистрация: 28.02.2013
Сообщений: 6
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
рад, что вас улыбнуло, хотя совет был абсолютно серъезен в ответ на ваше и по существу вопроса:


=================
cтарания всегда вознаграждаются так или иначе. Для работы с UART-ом можете воспользоваться генератором шаблонов CVAVR, сам блютуз-модуль прикручивать программно не потребуется (намек про прозрачный UART поняли?).

=================
По поводу стеков, тоже ничто не мешает параллельно поизучать готовые аппноты, благо есть и переводы на русский.

По поводу акселерометров, есть готовые библиотеки-модули. В общем, можно оперировать кирпичиками на первом этапе, попутно вникая в тему. Удачи.
благодарю за идеи, но до них мне пока рановато. для начала разобраться бы с приложением под Windows, управляющей платкой с процессором. мне мало того что надо переделать кнопки, но и сделать бы ещё выполнение заранее разработанной программы роботом, загружаемую в приложение. тоесть написал шаги и направление каждой степени свободы, нажал выполнить и понеслось)))
Klewer вне форума Ответить с цитированием
Старый 12.03.2013, 08:45   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
мне мало того что надо переделать кнопки,
а в чем тут проблема?

Кстати, совсем необязательно что-то дополнительно загружать в МК после.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 12.03.2013, 15:55   #8
Klewer
 
Регистрация: 28.02.2013
Сообщений: 6
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
а в чем тут проблема?

Кстати, совсем необязательно что-то дополнительно загружать в МК после.
в контроллер я конечно больше ничего не зашивал, только скомпилировал то что дали в примере к плате, частоту там подправил кварца. сейчас я занимаюсь именно приложением, управляющим платой. проблема в моём малом освоении С++ на данный момент и у меня не получается переделать кнопки в примере, чтобы работали как мне надо. я выше рассказал.
Klewer вне форума Ответить с цитированием
Старый 12.03.2013, 16:09   #9
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
переделать кнопки в примере, чтобы работали как мне надо. я выше рассказал.
Цитата:
нажал держишь, диод горит, отпустил или увёл стрелку мыши, диод погас
по нажатию (событие ...Down кнопки) шлете репорт устанавливающий бит, по отжатию кнопки (событие ...UP) шлете репорт сбрасывающий бит.

Поскольку репорт по два байта и управление чаще в младшем байте, то вся ваша задача сводится к установке соответствующего бита в байте.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 16.03.2013, 15:02   #10
Klewer
 
Регистрация: 28.02.2013
Сообщений: 6
По умолчанию

если оставить ON_BN_CLICKED то срабатывание кнопки будет на отпускании. то есть нажал, ничего не произошло, отпустил - сработало. я использовал визарда, попробовал поменять кликед на дропдаун. визард закомментировал // ON_BN_CLICKED(IDC_LED3, OnLed3), добавил строку ON_NOTIFY(BCN_DROPDOWN, IDC_LED3, &CUsbHidDemoCodeDlg::OnDropdownLed3 ), также внизу по тексту визард закомментил //void CUsbHidDemoCodeDlg::OnLed3()
//{
//
// if(Led3 == false) {
// Led3 = true;
// m_Led3.SetWindowText(_T("LED 3 ON"));
// DYNCALL(writeData)((UCHAR *)"13");
// }
// else {
// Led3 = false;
// m_Led3.SetWindowText(_T("LED 3 OFF"));
// DYNCALL(writeData)((UCHAR *)"03");
// }
//
//}
и добавил в самом конце
void CUsbHidDemoCodeDlg::OnDropdownLed3( NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMBCDROPDOWN pDropDown = reinterpret_cast<LPNMBCDROPDOWN>(pN MHDR);
// TODO: Add your control notification handler code here
*pResult = 0;
}

я туда пробовал добавить свои коды, но ничего пока не получается, но и ошибки к счастью не появляются тоже))) пошла крупная рябь)))

void CUsbHidDemoCodeDlg::OnDropdownLed3( NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMBCDROPDOWN pDropDown = reinterpret_cast<LPNMBCDROPDOWN>(pN MHDR);
// TODO: Add your control notification handler code here

if(Led3 == false) {
Led3 = true;
m_Led3.SetWindowText(_T("LED 3 ON"));
DYNCALL(writeData)((UCHAR *)"13");
}
else {
Led3 = false;
m_Led3.SetWindowText(_T("LED 3 OFF"));
DYNCALL(writeData)((UCHAR *)"03");
}
*pResult = 0;
}
Klewer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
USB ручной сканер. Перехват данных в HID режиме VitalyaVentel Общие вопросы Delphi 14 28.11.2012 09:31
Отправка\приём USB HID gslim C# (си шарп) 12 27.01.2012 21:36
USB HID плагин для MMB Mrshilov Паскаль, Turbo Pascal, PascalABC.NET 7 03.03.2011 21:24
Разработка драйвер USB-HID устройства _dx Win Api 5 10.06.2009 18:34
использование класса USB HID MenWantToStabAtAny Общие вопросы C/C++ 0 27.05.2009 23:11