Доброго времени суток!!! Я новичок в этой теме и поэтому прошу Вашей помощи, есть задача сделать управления нагрузкой по условию: если нажата кнопка 1 включается действие 1. включается действие 2 на "А" сек. включается действие 3: если кнопка 2 не нажата, действие 3 постоянно если кнопка 2 нажата, действие 3 длиться "В" сек. при отпускании кнопки 1 действие 1 длиться "С" сек. "А","В","С" переменные, они берутся с аналоговых входов и с помощью функции map, переводятся в нужный интервал, С переменными я разобрался а условие поставило меня в тупик, прошу Вашей помощи.
Сколько раз было мужики подходили старые электронщики - надо сделать при наступлении заранее выставленного времени на выходе в течение 3 секунд единица, потом опять ноль, на другом выводе инверсно и т.д. Но они хотя бы это понятно могли изложить, а тут я даже на свежую голову не могу врубиться действительно - "Прошу Вашей помощи".
Условие "кнопка нажата" срабатывает все время пока нажата кнопка, или один раз при изменении статуса?
Код (C++): //определение переменных времени(если прочитаны то уже есть) int Asec; int Bsec; int Csec; //присвоена кнопка(некий код кнопки) - прочитано где-то и присвоен код #define _Key1 1 #define _Key2 2 //тут код кнопки - где-то прочитан/присвоен int key; switch(key) { case _Key1: //активируем действие 1 sleep(Asec); //деактивируем действие 1 break; case _Key2: //активируем действие 2 sleep(Bsec); //деактивируем действие 2 break; default: //активируем действие 3 sleep(Csec); //деактивируем действие 3 break; } Каков вопрос, таков и ответ. Вместо sleep у Вас возможно wait или что-то иное... для GCC это sleep(sec) в секундах. Я конечно понимаю, что контрольная или что-то иное... но всё равно не ясно что надо.
иметься 3 таймера А, В и С, каждый таймер определяет длительность своей операции, как только нажали кнопку "1" и удерживаем стартуют все операция "1", "2"(время работы определяется таймером "А"), "3"(если кнопка "2" не нажата, операция выполняется пока нажата кнопка "1", если кнопка "2" нажата время операции зависит от таймера "В"), как только отпустили кнопку "1" операции "2" и "3" отключаются ,а операция "1" длиться в зависимости от таймера "С".
Всёравно туманно и запутанно. Что значит "выполняется операция". Это какое-то единичное действие, типа установить единицу на выводе, или это будет постоянно грузить процессор? Нодо ведь ещё постоянно отслеживать состояние кнопок. А что делать если время С не истекло а кнопка 1 нажата. Перезапускать или ждать завершения временного интервала С? Объясните что вы строите, тогда вам быстрее помогут.
перезапускается, Собирается осциллятор, 1 операция - предгаз 2 операция - запуск осциллятора. 3 операция - запуск ММА аппарата.
Вопрос был примерно про следующее: В бесконечном цикле проверяется состояние кнопки1. Вариант 1 При каждом прохождении цикла, пока нажата кнопка1, операции 1, 2 и 3 постоянно перезапускаются. Вариант 2 При каждом прохождении цикла, пока нажата кнопка1, операции 1, 2 и 3 не перезапускаются, если они уже запущены или отработали заданное время. Заодно вопрос. Состояние кнопки2 учитывается и в процессе удержания кнопки1, или только на момент нажатия кнопки1?
В чем тогда разница между "действие выполняется постоянно" и "действие выполняется в течении времени", если оно постоянно перезапускается?
Если действие выполняется в течении времени это так называемый импульсный режим с регулировкой времени импульса.
Короче - ясно, что ничего не ясно (для меня). Как-то так, что ли хотите? Если допустить, что действие - это функция, а аргумент функции - заданное время (если не указано - ограничения по времени нет). Кнопки в отжатое состояние - состояние LOW. Код (C++): void loop() { static bool prev_btn_state = LOW; if (digitalRead(BTN1_PIN) == HIGH) { prev_btn_state = HIGH; action1(); action2(time_A); if (digitalRead(BTN2_PIN) == HIGH) { action3(time_B); } else { action3(); } } else { if (prev_btn_state == HIGH) { prev_btn_state = LOW; action1(time_C); } } }