Нажатие кнопок клавиатуры датчиками Холла

Как сделать так что бы при поднесении магнита на компьютере была нажата кнопка вниз или вверх

Ответить
markelovdn
Рядовой
Сообщения: 19
Зарегистрирован: 24.02.2017{, 13:54}
Репутация: 0
Откуда: Волгоград

Нажатие кнопок клавиатуры датчиками Холла

#1

Сообщение markelovdn » 14.02.2019{, 13:29}

Здравствуйте, возникла проблема, прошу помочь.
Имеются 4 датчика холла, каждый из них подключен к цифровому входу 7,6,5,4. В программе завожу входы и соединяю каждый вход с блоком "одно действие на клавиатуре" в параметрах блока выставляю Клик на кнопку, константой выбираю необходимую кнопку на клавиатуре (вверх, вниз, вправо, влево). После загрузки на плату программа работает следующим образом. Курсор двигается без прерывно в нужном направлении пока магнит не поднесен к датчику.
1) Подскажите пожалуйста как сделать так что бы датчик срабатывал только при поднесении магнита.
2) Как сделать так что бы при поднесении датчика программа определяла что кнопка нажата один раз и не отпущена.
3) Как сделать так что бы при поднесении магнита кнопка срабатывала один раз, второе нажатие было тогда когда магнит убран и поднесен снова.
СпойлерПоказать
[hide]#include <Arduino.h>
#include <Keyboard.h>
char ctrlKey = KEY_LEFT_GUI;

#define up_button 7
#define down_button 4
#define left_button 5
#define right_button 6

void setup() {
// put your setup code here, to run once:
Keyboard.begin();
pinMode(up_button,INPUT_PULLUP);
pinMode(down_button,INPUT_PULLUP);
pinMode(left_button,INPUT_PULLUP);
pinMode(right_button,INPUT_PULLUP);
}

void loop() {
// put your main code here, to run repeatedly:

if (digitalRead(right_button) == LOW)
{
Keyboard.write(216);
delay(100);
}

if (digitalRead(down_button) == LOW)
{
Keyboard.write(215);
delay(100);
}

if (digitalRead(left_button) == LOW)
{
Keyboard.write(218);
delay(100);
}

if (digitalRead(up_button) == LOW)
{
Keyboard.write(217);
delay(100);
}

}[/hide]

Этот код работает так как будто кнопка нажимается несколько раз, а надо что бы один раз.

[hide]#include "Keyboard.h"
bool _KeyboardOneAction1_oldSate = 0;
void setup()
{
pinMode(7, INPUT);

Keyboard.begin();
}
void loop()
{
//Плата:1
if ( (digitalRead (7))) { if (! _KeyboardOneAction1_oldSate) {
_KeyboardOneAction1_oldSate = 1;
_keyboadAction(217, 0);
}} else {_KeyboardOneAction1_oldSate = 0;}
}
void _keyboadAction(byte code, byte action)
{
if((code < 0) || (code >255)) {return;}
if(action == 0) {Keyboard.write(code);}
if(action == 1) {Keyboard.press(code);}
if(action == 2) {Keyboard.release(code);}
}[/hide]
Это код из программы Flprog. Здесь наоборот кнопка срабатывает сразу и постоянно и остановить нажатие кнопки можно только поднесенным магнитом.

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

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

Нажатие кнопок клавиатуры датчиками Холла

#2

Сообщение Phazz » 14.02.2019{, 13:53}

А проект или скриншот увидеть можно. Так вам быстрее помогут.

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

Нажатие кнопок клавиатуры датчиками Холла

#3

Сообщение pan » 14.02.2019{, 13:57}

markelovdn писал(а):
14.02.2019{, 13:29}
Это код из программы Flprog.
это код из ардуино.иде. а проект флпрог с расширением xxx.flp

markelovdn
Рядовой
Сообщения: 19
Зарегистрирован: 24.02.2017{, 13:54}
Репутация: 0
Откуда: Волгоград

Нажатие кнопок клавиатуры датчиками Холла

#4

Сообщение markelovdn » 14.02.2019{, 14:41}

Спасибо за ответы, прикрепляю файл проекта и скрин с экрана то что требует программа. Сразу поясню что на обычной клавиатуре делать это нет возможности так как реакция измеряется нажатием ноги, а не руки.
Измерение реакции.flp
Файл проекта
(19.99 КБ) 60 скачиваний
СпойлерПоказать
Снимок.JPG
Что необходимо достичь для программы
Отправлено спустя 5 минут 44 секунды:
Сейчас в программе на скрине при поднесении магнита программа распознает как повторное множественное нажатие кнопки вниз. Это с кодом из первого блока.

Аватара пользователя
dizzyy
Капитан
Сообщения: 752
Зарегистрирован: 24.11.2017{, 16:25}
Репутация: 37
Откуда: Червоноград
Имя: Марьян

Нажатие кнопок клавиатуры датчиками Холла

#5

Сообщение dizzyy » 14.02.2019{, 18:06}

обратите внимание на активный уровень дптчика хола.. у вас проект - вход подтянут к + , и 0 должен быть на датчике когда подести магнит.. как по мне должно быть наоборот

markelovdn
Рядовой
Сообщения: 19
Зарегистрирован: 24.02.2017{, 13:54}
Репутация: 0
Откуда: Волгоград

Нажатие кнопок клавиатуры датчиками Холла

#6

Сообщение markelovdn » 14.02.2019{, 18:41}

Спасибо, буду пробовать

Аватара пользователя
Fuji1604
Сержант
Сообщения: 282
Зарегистрирован: 19.01.2016{, 06:09}
Репутация: 40
Откуда: Березники
Имя: Сергей

Нажатие кнопок клавиатуры датчиками Холла

#7

Сообщение Fuji1604 » 14.02.2019{, 20:18}

Вот так попробуйте
Вложения
Измерение реакции инверсия входа.flp
(19.94 КБ) 50 скачиваний
когда мастерю обычно подсматриваю,
не рыли ли окоп в том же направлении,
не изобретали ли велосипед с такими-же квадратными как у меня колёсами,
а уже потом - не торопясь, торю свою лыжню

markelovdn
Рядовой
Сообщения: 19
Зарегистрирован: 24.02.2017{, 13:54}
Репутация: 0
Откуда: Волгоград

Нажатие кнопок клавиатуры датчиками Холла

#8

Сообщение markelovdn » 14.02.2019{, 21:55}

Спасибо за ответ! Теперь датчик срабатывает только когда магнит поднесен. Но заметил что каким бы полюсом не поднес он начинает срабатывать возможно так и надо, и срабатывает когда магнит поднесен в плотную и не к самому черному квадратику датчика а к ногам. В первом коде срабатывание начинается миллиметров с 10. И остается вопрос как сделать так что бы при поднесении датчика нажатие кнопки сработало один раз и кнопка была в нажатом состоянии до момента пока не уберут магнит. Понимаю что в Flprog такой алгоритм можно обработать, но ни понимаю как. Подскажите пожалуйста куда посмотреть что и где почитать.

sillver
Сержант
Сообщения: 194
Зарегистрирован: 27.04.2017{, 12:04}
Репутация: 3
Откуда: УКРАИНА
Имя: Вячеслав

Нажатие кнопок клавиатуры датчиками Холла

#9

Сообщение sillver » 15.02.2019{, 00:14}

Тут вопрос ни очем!!! сначала требуется разобраться с датчиками Холла!!! их множество и они по разному реагируют на магнит!!!! есть аналоговые, есть цифровые, есть двух полярные!!!! о каком датчике идет речь??? это звучит так " Дайте мне транзистор для мобильного телефона!" :)

markelovdn
Рядовой
Сообщения: 19
Зарегистрирован: 24.02.2017{, 13:54}
Репутация: 0
Откуда: Волгоград

Нажатие кнопок клавиатуры датчиками Холла

#10

Сообщение markelovdn » 15.02.2019{, 10:00}

Понял, исправляюсь.
Вот такой датчик:
СпойлерПоказать
IMG_20190215_103045.jpg
Как я понял он цифровой.

Аватара пользователя
rw6cm
Полковник
Сообщения: 2284
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

Нажатие кнопок клавиатуры датчиками Холла

#11

Сообщение rw6cm » 15.02.2019{, 12:07}

markelovdn писал(а):
15.02.2019{, 10:00}
Вот такой датчик:
Все надо "высасывать из пальца" ))
СпойлерПоказать
IMG_20190215_103045.jpg
A3141-2-3-4-Datasheet.pdf
(735.22 КБ) 42 скачивания
Circuit-using-A3144-Hall-effect-Sensor.png
markelovdn писал(а):
14.02.2019{, 21:55}
вопрос как сделать так что бы при поднесении датчика нажатие кнопки сработало один раз и кнопка была в нажатом состоянии до момента пока не уберут магнит.
СпойлерПоказать
2019_02_15_12_06_04_Greenshot.png
Win10-64, FLProg (portable)

markelovdn
Рядовой
Сообщения: 19
Зарегистрирован: 24.02.2017{, 13:54}
Репутация: 0
Откуда: Волгоград

Нажатие кнопок клавиатуры датчиками Холла

#12

Сообщение markelovdn » 15.02.2019{, 13:11}

Пробовал выставлять в параметрах клавиатуры "нажатие на кнопку", получается следующее. При поднесении магнита стрелка становится в нажатое состояние, но когда магнит убираю состояние не меняется. Дальше сколько бы датчик не подносил стрелка продолжает упорно работать. Помогает только если отключить ардуину. Пробовал инвертировать выход с датчика и вход на клавиатуру история не меняется. Может как то можно с триггерами сделать, но насколько хватает моих скудных знаний, попытки с ними приводили к тому же результату, при первом поднесении магнита стрелка срабатывала и остановить ее ничего не помогало.

Аватара пользователя
rw6cm
Полковник
Сообщения: 2284
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

Нажатие кнопок клавиатуры датчиками Холла

#13

Сообщение rw6cm » 15.02.2019{, 21:05}

markelovdn писал(а):
15.02.2019{, 13:11}
При поднесении магнита стрелка становится в нажатое состояние, но когда магнит убираю состояние не меняется.
К сожалению у меня нет контроллеров работающих с этим блоком для клавы, проверить не на чем.
Win10-64, FLProg (portable)

Аватара пользователя
Fuji1604
Сержант
Сообщения: 282
Зарегистрирован: 19.01.2016{, 06:09}
Репутация: 40
Откуда: Березники
Имя: Сергей

Нажатие кнопок клавиатуры датчиками Холла

#14

Сообщение Fuji1604 » 16.02.2019{, 11:53}

А датчик точно меняем свое состояние при убирании магнита?
когда мастерю обычно подсматриваю,
не рыли ли окоп в том же направлении,
не изобретали ли велосипед с такими-же квадратными как у меня колёсами,
а уже потом - не торопясь, торю свою лыжню

markelovdn
Рядовой
Сообщения: 19
Зарегистрирован: 24.02.2017{, 13:54}
Репутация: 0
Откуда: Волгоград

Нажатие кнопок клавиатуры датчиками Холла

#15

Сообщение markelovdn » 16.02.2019{, 16:10}

Fuji1604 писал(а):
16.02.2019{, 11:53}
датчик
Не могу этого знать, есть предположение что меняет но это ориентируясь на светодиоды на самой Ардуино которые гаснут или загораются при поднесении и убирания датчика.

markelovdn
Рядовой
Сообщения: 19
Зарегистрирован: 24.02.2017{, 13:54}
Репутация: 0
Откуда: Волгоград

Нажатие кнопок клавиатуры датчиками Холла

#16

Сообщение markelovdn » 17.02.2019{, 18:46}

Все заработало, но пришлось убить два дня изучения материалов по библиотеке Keyboard.h. То что мне было необходимо я добился, но написанием кода напрямую без flprog. Не смотря на то что все работает хотелось бы узнать как этот код можно реализовать через flprog. Так как писать код на прямую желания нет а изучить программу очень хочется. Всем спасибо за ответы!
[hide]#include <Arduino.h>
#include <Keyboard.h>
char ctrlKey = KEY_LEFT_GUI;

#define up_button 7
#define down_button 4
#define left_button 5
#define right_button 6
bool marker_down_button=1;


void setup() {
// put your setup code here, to run once:
Keyboard.begin();
pinMode(up_button,INPUT_PULLUP);
pinMode(down_button,INPUT_PULLUP);
pinMode(left_button,INPUT_PULLUP);
pinMode(right_button,INPUT_PULLUP);



}

void loop() {
// put your main code here, to run repeatedly:

if (digitalRead(right_button) == LOW)
{

Keyboard.write(215);
delay(100);
bool marker_down_button=1;


}

if (digitalRead(down_button) == LOW && marker_down_button == 1)
{

Keyboard.press(KEY_DOWN_ARROW);
delay(100);
bool marker_down_button=0;


}

if (digitalRead(left_button) == LOW)
{

Keyboard.write(216);
delay(100);
bool marker_down_button=1;


}

if (digitalRead(up_button) == LOW)
{

Keyboard.write(218);
delay(100);
bool marker_down_button=1;


}

if (digitalRead(down_button) == HIGH)
{
Keyboard.release(KEY_DOWN_ARROW);
}

}[/hide]

Ответить

Вернуться в «Помогите, а то я "нимагу"»