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