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

Ответить
markelovdn
Рядовой
Сообщения: 19
Зарегистрирован: 24 фев 2017, 13:54
Откуда: Волгоград

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

Сообщение markelovdn »

Здравствуйте, возникла проблема, прошу помочь.
Имеются 4 датчика холла, каждый из них подключен к цифровому входу 7,6,5,4. В программе завожу входы и соединяю каждый вход с блоком "одно действие на клавиатуре" в параметрах блока выставляю Клик на кнопку, константой выбираю необходимую кнопку на клавиатуре (вверх, вниз, вправо, влево). После загрузки на плату программа работает следующим образом. Курсор двигается без прерывно в нужном направлении пока магнит не поднесен к датчику.
1) Подскажите пожалуйста как сделать так что бы датчик срабатывал только при поднесении магнита.
2) Как сделать так что бы при поднесении датчика программа определяла что кнопка нажата один раз и не отпущена.
3) Как сделать так что бы при поднесении магнита кнопка срабатывала один раз, второе нажатие было тогда когда магнит убран и поднесен снова.
[spoiler]
[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]
[/spoiler]
Это код из программы Flprog. Здесь наоборот кнопка срабатывает сразу и постоянно и остановить нажатие кнопки можно только поднесенным магнитом.

Пробовал через триггеры не получается. При смены действия кнопки в параметрах блока желаемого тоже добиться не удается.
Спасибо.
Аватара пользователя
Phazz
Полковник
Сообщения: 3148
Зарегистрирован: 17 окт 2016, 15:38
Откуда: Сургут
Имя: Анатолий
Благодарил (а): 236 раз
Поблагодарили: 118 раз

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

Сообщение Phazz »

А проект или скриншот увидеть можно. Так вам быстрее помогут.
pan
Полковник
Сообщения: 2860
Зарегистрирован: 13 апр 2017, 11:57
Имя: noname

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

Сообщение pan »

markelovdn писал(а): 14 фев 2019, 13:29Это код из программы Flprog.
это код из ардуино.иде. а проект флпрог с расширением xxx.flp
markelovdn
Рядовой
Сообщения: 19
Зарегистрирован: 24 фев 2017, 13:54
Откуда: Волгоград

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

Сообщение markelovdn »

Спасибо за ответы, прикрепляю файл проекта и скрин с экрана то что требует программа. Сразу поясню что на обычной клавиатуре делать это нет возможности так как реакция измеряется нажатием ноги, а не руки.
Измерение реакции.flp
[spoiler]
Снимок.JPG
[/spoiler]
Отправлено спустя 5 минут 44 секунды:
Сейчас в программе на скрине при поднесении магнита программа распознает как повторное множественное нажатие кнопки вниз. Это с кодом из первого блока.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
dizzyy
Капитан
Сообщения: 752
Зарегистрирован: 24 ноя 2017, 16:25
Откуда: Червоноград
Имя: Марьян

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

Сообщение dizzyy »

обратите внимание на активный уровень дптчика хола.. у вас проект - вход подтянут к + , и 0 должен быть на датчике когда подести магнит.. как по мне должно быть наоборот
markelovdn
Рядовой
Сообщения: 19
Зарегистрирован: 24 фев 2017, 13:54
Откуда: Волгоград

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

Сообщение markelovdn »

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

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

Сообщение Fuji1604 »

Вот так попробуйте
У вас нет необходимых прав для просмотра вложений в этом сообщении.
когда мастерю обычно подсматриваю,
не рыли ли окоп в том же направлении,
не изобретали ли велосипед с такими-же квадратными как у меня колёсами,
а уже потом - не торопясь, торю свою лыжню
markelovdn
Рядовой
Сообщения: 19
Зарегистрирован: 24 фев 2017, 13:54
Откуда: Волгоград

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

Сообщение markelovdn »

Спасибо за ответ! Теперь датчик срабатывает только когда магнит поднесен. Но заметил что каким бы полюсом не поднес он начинает срабатывать возможно так и надо, и срабатывает когда магнит поднесен в плотную и не к самому черному квадратику датчика а к ногам. В первом коде срабатывание начинается миллиметров с 10. И остается вопрос как сделать так что бы при поднесении датчика нажатие кнопки сработало один раз и кнопка была в нажатом состоянии до момента пока не уберут магнит. Понимаю что в Flprog такой алгоритм можно обработать, но ни понимаю как. Подскажите пожалуйста куда посмотреть что и где почитать.
sillver
Сержант
Сообщения: 194
Зарегистрирован: 27 апр 2017, 12:04
Откуда: УКРАИНА
Имя: Вячеслав

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

Сообщение sillver »

Тут вопрос ни очем!!! сначала требуется разобраться с датчиками Холла!!! их множество и они по разному реагируют на магнит!!!! есть аналоговые, есть цифровые, есть двух полярные!!!! о каком датчике идет речь??? это звучит так " Дайте мне транзистор для мобильного телефона!" :)
markelovdn
Рядовой
Сообщения: 19
Зарегистрирован: 24 фев 2017, 13:54
Откуда: Волгоград

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

Сообщение markelovdn »

Понял, исправляюсь.
Вот такой датчик:
[spoiler]
IMG_20190215_103045.jpg
[/spoiler]
Как я понял он цифровой.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
rw6cm
Полковник
Сообщения: 2372
Зарегистрирован: 06 сен 2015, 20:25
Имя: Владимир
Поблагодарили: 41 раз

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

Сообщение rw6cm »

markelovdn писал(а): 15 фев 2019, 10:00Вот такой датчик:
Все надо "высасывать из пальца" ))
[spoiler]
IMG_20190215_103045.jpg
A3141-2-3-4-Datasheet.pdf
Circuit-using-A3144-Hall-effect-Sensor.png
[/spoiler]
markelovdn писал(а): 14 фев 2019, 21:55вопрос как сделать так что бы при поднесении датчика нажатие кнопки сработало один раз и кнопка была в нажатом состоянии до момента пока не уберут магнит.
[spoiler]
2019_02_15_12_06_04_Greenshot.png
[/spoiler]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Win10-64, FLProg (portable)
markelovdn
Рядовой
Сообщения: 19
Зарегистрирован: 24 фев 2017, 13:54
Откуда: Волгоград

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

Сообщение markelovdn »

Пробовал выставлять в параметрах клавиатуры "нажатие на кнопку", получается следующее. При поднесении магнита стрелка становится в нажатое состояние, но когда магнит убираю состояние не меняется. Дальше сколько бы датчик не подносил стрелка продолжает упорно работать. Помогает только если отключить ардуину. Пробовал инвертировать выход с датчика и вход на клавиатуру история не меняется. Может как то можно с триггерами сделать, но насколько хватает моих скудных знаний, попытки с ними приводили к тому же результату, при первом поднесении магнита стрелка срабатывала и остановить ее ничего не помогало.
Аватара пользователя
rw6cm
Полковник
Сообщения: 2372
Зарегистрирован: 06 сен 2015, 20:25
Имя: Владимир
Поблагодарили: 41 раз

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

Сообщение rw6cm »

markelovdn писал(а): 15 фев 2019, 13:11При поднесении магнита стрелка становится в нажатое состояние, но когда магнит убираю состояние не меняется.
К сожалению у меня нет контроллеров работающих с этим блоком для клавы, проверить не на чем.
Win10-64, FLProg (portable)
Аватара пользователя
Fuji1604
Сержант
Сообщения: 282
Зарегистрирован: 19 янв 2016, 06:09
Откуда: Березники
Имя: Сергей

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

Сообщение Fuji1604 »

А датчик точно меняем свое состояние при убирании магнита?
когда мастерю обычно подсматриваю,
не рыли ли окоп в том же направлении,
не изобретали ли велосипед с такими-же квадратными как у меня колёсами,
а уже потом - не торопясь, торю свою лыжню
markelovdn
Рядовой
Сообщения: 19
Зарегистрирован: 24 фев 2017, 13:54
Откуда: Волгоград

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

Сообщение markelovdn »

Fuji1604 писал(а): 16 фев 2019, 11:53датчик
Не могу этого знать, есть предположение что меняет но это ориентируясь на светодиоды на самой Ардуино которые гаснут или загораются при поднесении и убирания датчика.
markelovdn
Рядовой
Сообщения: 19
Зарегистрирован: 24 фев 2017, 13:54
Откуда: Волгоград

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

Сообщение markelovdn »

Все заработало, но пришлось убить два дня изучения материалов по библиотеке 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]
Ответить

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя