Помогите организовать задержку.

Angels13
Offline
Зарегистрирован: 20.11.2016

Все когда-то начинают. Не пинайти сильно. Забить в поиск честно пытался несколько дней. Прошу помощи в следующем.

Нужно организовать  нажатие двух клавиш определенным образом. Сочетание клавиш Alt+Tab.

Возможно это можно сделать при помощи while.

Смысл такой:

if (data=="значение") 

Keyboard.press(KEY_LEFT_ALT);   

Keyboard.press(KEY_TAB);   

Keyboard.release(KEY_TAB); 
 
И вот тут нужна помощь - нужна задержка в 3 секунды. Если за 3 секунды не появляется снова "значение"- то нужен
Keyboard.release(KEY_LEFT_ALT); 
keyboard.press(KEY_ESC) ;

 

Еслиже за 3 секунды "значение" на int analogPin=1; снова появляется то:

 

Keyboard.press(KEY_TAB);   

Keyboard.release(KEY_TAB); 
 
Столько раз сколько "значение" появляется. И после появления уже delay- на 1 секунду и
Keyboard.releaseAll();   

  

 
 
Клапауций 234
Offline
Зарегистрирован: 24.10.2016
andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Angels13, натболее простой вариант - конечный автомат.

Заводите две переменные: одна запоминает нужный момент времени, другая хранит текущее состояние.

Сначала вторая переменная хранит исходное состояние, например, 0.

При наступлении события А запоминаем в первой переменной время наступления и переводим вторую переменную в следующее состояние, например, 1.

А дальше, находясь в 1 состоянии анализируем:

- если истекло время (таймаут), выполняем одну последовательность действий и, возможно, меняем состояние,

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

- если наступило событие В, выполняем...

В 0-м состоянии, если я правильно понял задачу, анализируем лишь наступление события А и ничего больше.

Для всех прочих состояний (2, 3...) расписываем другие варианты реакции на события, включая таймаут.

Естественно, предусматриваем, к каких случаях нужно менять первую переменную (момент времени), а в каких - нет.

Angels13
Offline
Зарегистрирован: 20.11.2016

andriano пишет:

Angels13, натболее простой вариант - конечный автомат.

Заводите две переменные: одна запоминает нужный момент времени, другая хранит текущее состояние.

Сначала вторая переменная хранит исходное состояние, например, 0.

При наступлении события А запоминаем в первой переменной время наступления и переводим вторую переменную в следующее состояние, например, 1.

А дальше, находясь в 1 состоянии анализируем:

- если истекло время (таймаут), выполняем одну последовательность действий и, возможно, меняем состояние,

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

- если наступило событие В, выполняем...

В 0-м состоянии, если я правильно понял задачу, анализируем лишь наступление события А и ничего больше.

Для всех прочих состояний (2, 3...) расписываем другие варианты реакции на события, включая таймаут.

Естественно, предусматриваем, к каких случаях нужно менять первую переменную (момент времени), а в каких - нет.

Спасибо. А в кодовом виде как это будет выглядеть? Я понимаю смысл. Понимаю что надо ввести несколько flag.
Указать в начале исходное состояние int=1024 кнопки.
Упираюсь только в отсрочку времени на 3 секунды. И условия для нее.

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

Angels13 пишет:
Спасибо. А в кодовом виде как это будет выглядеть? Я понимаю смысл. Понимаю что надо ввести несколько flag. Указать в начале исходное состояние int=1024 кнопки. Упираюсь только в отсрочку времени на 3 секунды. И условия для нее.

ну, как можно настолько тупить? - так класс титановый велосипед StopWatch. это будет выглядеть.

заставь свой мосг работать, зайди в тему по ссылке и почитай.

Angels13
Offline
Зарегистрирован: 20.11.2016

Клапауций 234 пишет:

Angels13 пишет:
Спасибо. А в кодовом виде как это будет выглядеть? Я понимаю смысл. Понимаю что надо ввести несколько flag. Указать в начале исходное состояние int=1024 кнопки. Упираюсь только в отсрочку времени на 3 секунды. И условия для нее.

ну, как можно настолько тупить? - так класс титановый велосипед StopWatch. это будет выглядеть.

заставь свой мосг работать, зайди в тему по ссылке и почитай.


Я могу понять ваше недовольство. Но всетаки. Я изучаю ардуино исключительно для определенной цели. Вероятнее всего дальше назначений определенных функций дело не пойдет. Поэтому изучение языка ардуино полностью со всеми нюансами просто не целесообразно. Ваш титановый велосипед дает лишь таймер между двумя событиями. Как же прописать эти событиях а также взаимодействия между ними нет. Поэтому я спрашиваю помощи.

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

Angels13 пишет:
Как же прописать эти событиях а также взаимодействия между ними нет..

ок. тогда возвращаешься в детство пяти лет и учишься формулировать свои мысли - вернёшься через двадцать лет сюда.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Angels13, я ж не просто так писл "событие А"/"событие В" или "одна последовательность действий"/"другая...".

В вашем первом сообщении очень много пробелов, поэтому построить по нему алгоритм невозможно. А задавать Вам кучу дополнительных вопросов - лень.

Я дал общий скелет. Попытайтесь на основании этого скелета:

- сообразить, какие именно у Вас могут реализоваться состояния (все возможные) и сколько их,

- какие именно события Вы должны обрабатывать (полный список, включая таймаут),

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

Собственно, после этого останется только перевести текст с русского на Си.

Angels13
Offline
Зарегистрирован: 20.11.2016

andriano пишет:

Angels13, я ж не просто так писл "событие А"/"событие В" или "одна последовательность действий"/"другая...".

В вашем первом сообщении очень много пробелов, поэтому построить по нему алгоритм невозможно. А задавать Вам кучу дополнительных вопросов - лень.

Я дал общий скелет. Попытайтесь на основании этого скелета:

- сообразить, какие именно у Вас могут реализоваться состояния (все возможные) и сколько их,

- какие именно события Вы должны обрабатывать (полный список, включая таймаут),

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

Собственно, после этого останется только перевести текст с русского на Си.

 

int analogPin=1; // пин для подключения кнопок

int release_button = 1023; // значение при отпущенных кнопках  
int button_release_range = 50; // диапазон значения + - при отпущенных кнопках  
int button_range = 5; // диапазон значения нажатых кнопок + -  
int time_holding = 500; // время для удержания кнопок в миллисекундах  
int time_tinkling = 30; // время исключающее дребезг контактов в миллисекундах

int alt_tab = 182; // значение кнопки которая будет работать как Alt + Tab 

int data;   
unsigned long flag = 0;   
unsigned long eventTime = 0;  

void setup()   
{  
analogReference(DEFAULT);   
Keyboard.begin();   
}

void loop()   
{   
data=analogRead(analogPin); 
if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 0)   
{   
eventTime=millis();   
}   


if(millis()-eventTime<time_tinkling && millis()-eventTime<time_holding-1 && data >= alt_tab - button_range && data <= alt_tab + button_range)   
{    
flag = 1;   
}

if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 1)

{   
Keyboard.press(KEY_LEFT_ALT);   
Keyboard.press(KEY_TAB);   
Keyboard.release(KEY_TAB);  

Далее с этого момента пошел отсчет в 3 секунды.
Если в течении 3 секунд ничего не происходит - то Keyboard.releaseAll(); 
Если в течении 3 секунд снова: 
(data>=release_button - button_release_range && data<=release_button + button_release_range)
То: 
Keyboard.press(KEY_TAB);   
Keyboard.release(KEY_TAB);
И тут уже отсчет только одну секунду и:
Если в течении 1 секунды ничего не происходит - то Keyboard.releaseAll();   
Если в течении 1 секунды снова: 
(data>=release_button - button_release_range && data<=release_button + button_release_range)
то снова отсчет в 1 секунду
И так пока не сработает Keyboard.releaseAll();
}  

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Angels13, если уж Вы цитируете сообщение, то хотя бы пишите, что имеете в виду. А то после цитирования с одной стороны совершенно очевидно, что ни один из трех рекомендуемых мной пунктов не выполнен, а с другой - появляется код, который делает что-то странное, но что он должен делать на самом деле, непонятно, т.к. Вы этого не написали.

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

vanka2255 пишет:

ардуино нано . Подключенно 3 кнопки к земле на D10 D11 D12 Диоды 5 штук на D2 D3 D4 D5 D6  и транзистор упровляющий включением форсунок на стенде промывки форсунок. Нужно организовать 5 режимов промывки каждый из которых бы выбирался кнопками и у каждого была своя частота и скважность.

прекрасно - создавай свою тему, публикуй там свой код, если не умеешь, то сюда Ищу исполнителя