Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: 6305
Последний выпуск: 19.06.2015

Программа для USB HID

87K
11 марта 2013 года
Klewer
5 / / 11.03.2013
Есть у меня простейший робот-манипулятор на 4 степени свободы, которым собираюсь управлять из под Windows через USB и плату с процессором AT90USB162. для неё нашёл демо софт с прошивкой и программулиной с четырьмя кнопарями.
Мои изучения С++ пока не дают ясности как например переделать алгоритм работы кнопки, чтобы работала не как триггер а пока держишь её мышью, то сигнал есть, а отпустил или увёл мышь, сигнал изчез.
На плате штатный светодиод горит от кнопки 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");
}

}
в приложении исходник примера который разбираю
Прикрепленные файлы:
84 Кб
Загрузок: 278
413
11 марта 2013 года
CassandraDied
763 / / 24.05.2012
Тут:

Код:
BEGIN_MESSAGE_MAP(CUsbHidDemoCodeDlg, CDialog)
    //{{AFX_MSG_MAP(CUsbHidDemoCodeDlg)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_LED1, OnLed1)
    ON_BN_CLICKED(IDC_LED2, OnLed2)
    ON_BN_CLICKED(IDC_LED3, OnLed3)
    ON_BN_CLICKED(IDC_LED4, OnLed4)
    ON_WM_TIMER()
    ON_BN_CLICKED(IDC_PW_UPGRADE, OnFwUpgrade)
    ON_BN_CLICKED(IDC_BUTTON_VID_PID, OnButtonVidPid)
    //}}AFX_MSG_MAP
    ON_WM_DEVICECHANGE()
END_MESSAGE_MAP()
Надо заменить ON_BN_CLICKED на что-то похожее на ON_BN_KEYDOWN и такаю же штуку добавить для ON_BN_KEYUP. Я не знаю, что это за странная функция и разбираться мне сейчас некогда, погугли на этот счёт. В общем, тебе надо обработчик сообщений поменять.
87K
11 марта 2013 года
Klewer
5 / / 11.03.2013
Цитата: CassandraDied
Тут:

Код:
BEGIN_MESSAGE_MAP(CUsbHidDemoCodeDlg, CDialog)
    //{{AFX_MSG_MAP(CUsbHidDemoCodeDlg)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_LED1, OnLed1)
    ON_BN_CLICKED(IDC_LED2, OnLed2)
    ON_BN_CLICKED(IDC_LED3, OnLed3)
    ON_BN_CLICKED(IDC_LED4, OnLed4)
    ON_WM_TIMER()
    ON_BN_CLICKED(IDC_PW_UPGRADE, OnFwUpgrade)
    ON_BN_CLICKED(IDC_BUTTON_VID_PID, OnButtonVidPid)
    //}}AFX_MSG_MAP
    ON_WM_DEVICECHANGE()
END_MESSAGE_MAP()
Надо заменить ON_BN_CLICKED на что-то похожее на ON_BN_KEYDOWN и такаю же штуку добавить для ON_BN_KEYUP. Я не знаю, что это за странная функция и разбираться мне сейчас некогда, погугли на этот счёт. В общем, тебе надо обработчик сообщений поменять.


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

20K
11 марта 2013 года
ellor!
198 / / 24.05.2012
Button Messages (Windows) : BN_PUSHED or BN_HILITE The user pushed a button.
87K
11 марта 2013 года
Klewer
5 / / 11.03.2013
Цитата: ellor!
Button Messages (Windows) : BN_PUSHED or BN_HILITE The user pushed a button.


Great thanks! i will try it soon

87K
16 марта 2013 года
Klewer
5 / / 11.03.2013
если оставить 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>(pNMHDR);
// TODO: Add your control notification handler code here
*pResult = 0;
}

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

void CUsbHidDemoCodeDlg::OnDropdownLed3(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMBCDROPDOWN pDropDown = reinterpret_cast<LPNMBCDROPDOWN>(pNMHDR);
// 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;
}
413
17 марта 2013 года
CassandraDied
763 / / 24.05.2012
Klewer, используй для форматирования тег [сode]. C BCN_DROPDOWN может незаработать, так как это сообщение приходит, когда кликается стрелка на кнопке, которая может выпадать в список. Что-то мне подсказывает, что у тебя обычная кнопка без списков. BN_PUSHED & BN_HILITE могут несработать. Что-то я не нашёл подхоящих сообщений. Вообще, это, по идее, обработчики формы. Если сможешь, поставь обработчик на кнопку, на сообщения WM_LBUTTONUP, WM_LBUTTONDOWN.
87K
17 марта 2013 года
Klewer
5 / / 11.03.2013
Цитата: CassandraDied
Klewer, используй для форматирования тег [сode]. C BCN_DROPDOWN может незаработать, так как это сообщение приходит, когда кликается стрелка на кнопке, которая может выпадать в список. Что-то мне подсказывает, что у тебя обычная кнопка без списков. BN_PUSHED & BN_HILITE могут несработать. Что-то я не нашёл подхоящих сообщений. Вообще, это, по идее, обработчики формы. Если сможешь, поставь обработчик на кнопку, на сообщения WM_LBUTTONUP, WM_LBUTTONDOWN.


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

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог