Опрос кнопок микроконтроллером
Re: Опрос кнопок микроконтроллером
ну дык!. оптика, магниты... но цена.
жалею, что не собирал раньше старые мышки шариковые. Ща бы в поделки была бы кучка оптических энкодеров, а не китайское механическое унылое г...
жалею, что не собирал раньше старые мышки шариковые. Ща бы в поделки была бы кучка оптических энкодеров, а не китайское механическое унылое г...
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Опрос кнопок микроконтроллером
Магниторезитор заменить цифровым датчиком Холла, они вроде есть в обычных кулерах (переключают обмотки).
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Just_Fluffy
- Вымогатель припоя
- Сообщения: 532
- Зарегистрирован: Ср июн 29, 2022 16:25:45
Re: Опрос кнопок микроконтроллером
Уош, там слесарить еще надо, что б нормально энкодер сделать
Белая и Пушистая
Re: Опрос кнопок микроконтроллером
Опять кнопки.) Давеча китайские часы модифицировал. А там аж 5 аналоговых. Пришлось выборочно с некоторыми работать.
Не аккуратненько. Но для сельской местности сойдёт.)
Спойлер
Код: Выделить всё
// analogue key
#include "adc.h"
#define KEY C,7,H //A7
//key: ALARM MODE LIGHT UP DOWN //adc min level
#define KEY_ALARM_LEVEL 80 //4
#define KEY_MODE_LEVEL 230 //98
#define KEY_UP_LEVEL 330 //241
#define KEY_DOWN_LEVEL 410 //347
#define KEY_LIGHT_LEVEL 500 //427
#define KEY_ALARM (1<<0) //code
#define KEY_MODE (1<<1)
#define KEY_UP (1<<2)
#define KEY_DOWN (1<<3)
#define KEY_LIGHT (1<<4)
#define LONG_BIT (1<<5)
#define REPEAT_BIT (1<<6)
#define KEY_ALARM_LONG (KEY_ALARM | LONG_BIT)
#define KEY_MODE_LONG (KEY_MODE | LONG_BIT)
#define KEY_LIGHT_LONG (KEY_LIGHT | LONG_BIT)
#define KEY_UP_LONG (KEY_UP | LONG_BIT)
#define KEY_DOWN_LONG (KEY_DOWN | LONG_BIT)
#define KEY_UP_REPEAT (KEY_UP | LONG_BIT | REPEAT_BIT)
#define KEY_DOWN_REPEAT (KEY_DOWN | LONG_BIT | REPEAT_BIT)
#define DEBOUNCE_TIME 50 //short
#define REPEAT_DELAY 800 //long - задержка перед LONG
#define REPEAT_TIME 100 //repeat long - автоповтор при LONG
#define key_init() //adcInit();
// однократный опрос, на выходе: код кнопки
inline uint8_t get_key() {
uint16_t adc = getAdc(_bn(KEY));
// if (adc < 1000) { con_int(adc); con_write(' '); } //DEBUG
if (adc < KEY_ALARM_LEVEL) return KEY_ALARM;
if (adc < KEY_MODE_LEVEL) return KEY_MODE;
if (adc < KEY_UP_LEVEL) return KEY_UP;
if (adc < KEY_DOWN_LEVEL) return KEY_DOWN;
if (adc < KEY_LIGHT_LEVEL) return KEY_LIGHT;
return 0;
}
uint8_t key();
Спойлер
Код: Выделить всё
#include "main.h"
#include "akey.h"
// SHORT - при отжатии, LONG - при нажатии, LONG REPEAT (UP/DOWN) - при удержании
uint8_t key() {
typedef enum {SHORT, LONG, LONG_LONG} state_t;
static state_t state;
static uint8_t short_key;
static uint16_t timer;
uint8_t k = get_key();
for_change(k) //change
timer = ms2sys(DEBOUNCE_TIME);
if (timer)
--timer;
else if (k) {
if (state == SHORT) { //начало нажатия
state = LONG;
short_key = k; //запомним для отжатия
timer = ms2sys(REPEAT_DELAY - DEBOUNCE_TIME) - 1;
}
else if (state == LONG) { //длинное нажатие
state = LONG_LONG;
timer = ms2sys(REPEAT_TIME) - 1;
short_key = 0; //wo press
return k | LONG_BIT;
}
else if (k & (KEY_UP | KEY_DOWN)) { //повтор только для UP/DOWN!
timer = ms2sys(REPEAT_TIME) - 1;
return k;
}
}
else if (state != SHORT) { //released
state = SHORT;
return short_key; //0 after a long
}
return 0;
}
Re: Опрос кнопок микроконтроллером
[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4711135#p4711135"]Уош, там слесарить еще надо, что б нормально энкодер сделать[/uquote]
у нас всё продумано: чпу-станочек
у нас всё продумано: чпу-станочек
Re: Опрос кнопок микроконтроллером
Тогда об чем плач Ярославны по мышам шариковым, невинно убиенным?
Вот за 150 рублей электронно-оптическая часть, без механики и даже приардуиненая: https://www.chipdip.ru/product0/8753510820
И даже за 80р https://www.chipdip.ru/product0/8010797720
Вот за 150 рублей электронно-оптическая часть, без механики и даже приардуиненая: https://www.chipdip.ru/product0/8753510820
И даже за 80р https://www.chipdip.ru/product0/8010797720
- Just_Fluffy
- Вымогатель припоя
- Сообщения: 532
- Зарегистрирован: Ср июн 29, 2022 16:25:45
Re: Опрос кнопок микроконтроллером
BorMot, так в основном механика - самое геморойное в таких штуках.
Белая и Пушистая
Re: Опрос кнопок микроконтроллером
BorMot, мыши были бесплатно )
а так-то всё можно купить. Есть и неубиваемые оптические энкодеры в продаже, промышленные, неардуинные и нечипдипные
а так-то всё можно купить. Есть и неубиваемые оптические энкодеры в продаже, промышленные, неардуинные и нечипдипные
Re: Опрос кнопок микроконтроллером
Что до механики в тех мышах, так это просто слёзы. Диск дырчатый пластиковый, одно целое с валом, и это всё вставлялось в пластиковые же "подшипники" путём вдавливания за счёт упругости материала. Диск в любом случае пришлось бы переделывать по числу дырок или собачить редуктор, а это уже действительно механика. При наличии же станка ЧПУ не стоит об этом и говорить.
А что до бесплатности, я свои мыши покупал а не расхищал на рабочем месте. Расхищал я шаговые двигатели
, вернее спасал от вторчермета. Итого, имеем 2 оптодатчика на одну мышь, эквивалент 160 рублей. Стоит ли оно сожаления?
А что до бесплатности, я свои мыши покупал а не расхищал на рабочем месте. Расхищал я шаговые двигатели