AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
08.11.2015, 20:12
|
|
Прохожий
Регистрация: 08.11.2015
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Эмуляция кнопок мыши на тензодатчиках?
Уважаемые гуру, подскажите, что не так в коде? Программа работает на ПК и обращается к ATMega32A по USB (через V-USB). Эмуляция мыши правой кнопки почему-то срабатывает, как будто её нажали и не отпускают, а левая вообще не реагирует.
Сама идея программы в том, что подключены два тензодатчика, при изменении значения одного из них должна срабатывать кнопка мыши (левая или правая), но они как-то не так себя ведут.
Может написано сумбурно, тогда уточните и я поправлюсь.
За ранее спасибо за ответ.
Вот код:
Код:
|
private void timer1_Tick(object sender, EventArgs e)
{
Point ptCoords = new Point();
GetCursorPos(ref ptCoords);
// получение координат x и y для мыши
int x = (int)ptCoords.X;
int y = (int)ptCoords.Y;
int tmp = readADC(0);
if (tmp ‹= 480)
{
mouse_event(MouseFlags.Absolute | MouseFlags.LeftDown, x, y, 0, UIntPtr.Zero);
}
else
{
mouse_event(MouseFlags.Absolute | MouseFlags.LeftUp, x, y, 0, UIntPtr.Zero);
}
int tmp1 = readADC(1);
if (tmp1 ‹= 890)
{
mouse_event(MouseFlags.Absolute | MouseFlags.RightDown, x, y, 0, UIntPtr.Zero);
}
else
{
mouse_event(MouseFlags.Absolute | MouseFlags.RightUp, x, y, 0, UIntPtr.Zero);
}
} |
|
|
|
|
08.11.2015, 21:35
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,050
Сказал спасибо: 3,041
Сказали Спасибо 3,210 раз(а) в 2,180 сообщении(ях)
|
Re: Эмуляция кнопок мыши на тензодатчиках?
Имея столь слабое представление о реализации проекта, могу предположить только, что
Сообщение от Shinsei
|
Код:
|
.....
.....
int tmp = readADC(0);
if (tmp ‹= 480)
.....
.....
int tmp1 = readADC(1);
if (tmp1 ‹= 890)
.....
.....
} |
|
либо косяк в приёме данных с тензодатчиков, либо неверно выбраны константы 480 и 890.
P.S. Анакуа тензодатчики, когда современный тренд - ёмкостные датчики (пусть они меня не привлекают недостаточным удобством использования, но в дешевизне им не отказать). Тем более, что достаточно получение логического результата "да-нет" и не стоит(?) задача получения усилия нажатия.
|
|
|
|
09.11.2015, 01:11
|
|
Прохожий
Регистрация: 08.11.2015
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Эмуляция кнопок мыши на тензодатчиках?
Вот функция
Код:
|
private int readADC(byte ch)
{
byte set_admux = dev.ADMUX;
set_admux |= ((0 ‹‹ ATMega16.MUX3) | (0 ‹‹ ATMega16.MUX2) | (0 ‹‹ ATMega16.MUX1) | (0 ‹‹ ATMega16.MUX0));
switch (ch)
{
case 1: set_admux |= ((0 ‹‹ ATMega16.MUX3) | (0 ‹‹ ATMega16.MUX2) | (0 ‹‹ ATMega16.MUX1) | (1 ‹‹ ATMega16.MUX0)); break;
default: break;
}
dev.ADMUX = set_admux;
dev.ADCSRA |= (1 ‹‹ ATMega16.ADSC); //запуск преобразователя
int adc = (dev.ADCL + (((int)dev.ADCH)‹‹8)); //формируем число
return adc;
} |
|
|
|
|
09.11.2015, 02:03
|
|
Прохожий
Регистрация: 08.11.2015
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Эмуляция кнопок мыши на тензодатчиках?
Разобрался почему не работала левая кнопка
Код:
|
//просто надо было поставить &, а не |
set_admux &= ((0 ‹‹ ATMega16.MUX3) | (0 ‹‹ ATMega16.MUX2) | (0 ‹‹ ATMega16.MUX1) | (0 ‹‹ ATMega16.MUX0)); |
, сделал, но всё равно остается проблема. Через некоторое время работы программы начинает срабатывать команда работы правого тензодатчика, хотя он в покое. Из-за чего это может быть?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:39.
|
|