Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 08.11.2015, 20:12  
Shinsei
Прохожий
 
Регистрация: 08.11.2015
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Shinsei на пути к лучшему
По умолчанию Эмуляция кнопок мыши на тензодатчиках?

Уважаемые гуру, подскажите, что не так в коде? Программа работает на ПК и обращается к 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);
            }
        }
Реклама:
Shinsei вне форума  
Непрочитано 08.11.2015, 21:35  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,923
Сказал спасибо: 2,985
Сказали Спасибо 3,163 раз(а) в 2,147 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: Эмуляция кнопок мыши на тензодатчиках?

Имея столь слабое представление о реализации проекта, могу предположить только, что
Сообщение от Shinsei Посмотреть сообщение
Код:
.....
.....
            int tmp = readADC(0);
            if (tmp ‹= 480)
.....
.....
            int tmp1 = readADC(1);
            if (tmp1 ‹= 890)
.....
.....
        }
либо косяк в приёме данных с тензодатчиков, либо неверно выбраны константы 480 и 890.

P.S. Анакуа тензодатчики, когда современный тренд - ёмкостные датчики (пусть они меня не привлекают недостаточным удобством использования, но в дешевизне им не отказать). Тем более, что достаточно получение логического результата "да-нет" и не стоит(?) задача получения усилия нажатия.
ForcePoint на форуме  
Непрочитано 09.11.2015, 01:11  
Shinsei
Прохожий
 
Регистрация: 08.11.2015
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Shinsei на пути к лучшему
По умолчанию 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;
        }
Shinsei вне форума  
Непрочитано 09.11.2015, 02:03  
Shinsei
Прохожий
 
Регистрация: 08.11.2015
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Shinsei на пути к лучшему
По умолчанию Re: Эмуляция кнопок мыши на тензодатчиках?

Разобрался почему не работала левая кнопка
Код:
//просто надо было поставить &, а не |
set_admux &= ((0 ‹‹ ATMega16.MUX3) | (0 ‹‹ ATMega16.MUX2) | (0 ‹‹ ATMega16.MUX1) | (0 ‹‹ ATMega16.MUX0));
, сделал, но всё равно остается проблема. Через некоторое время работы программы начинает срабатывать команда работы правого тензодатчика, хотя он в покое. Из-за чего это может быть?
Shinsei вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FAQ (ЧаВО) по PROTEUS для начинающих и не только dosikus Proteus 221 07.03.2024 22:45
Самосрабатывание кнопок al-slimy Делимся опытом 5 29.01.2015 16:41
Датчик линейного перемещения из оптической мыши age3000 Автоматика и аппаратура связи 1 24.05.2014 22:18
Помогите с обработкой кнопок через ADC в CVAVR Dimitrij Embedd С 10 02.03.2014 14:04
Помогите начинающему по ATmega8515 Vladlen23 Микроконтроллеры, АЦП, память и т.д 510 27.03.2012 06:08


Часовой пояс GMT +4, время: 13:24.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot