Код (C++): #define OPTRON_PIN 6 // Вывод к котрому подключена нагрузка #define TIME_ON_OPTRON 5000 // Время в течении, которого на выводе 1 #define TIME_OFF_OPTRON 5000 // Время в течении, которого на выводе 0 boolean state_optron = 0; // Переменная для хранения состояния вывода unsigned long new_millis_optron = millis(); // Переменная для хранения времени int flag = 0; void setup() { pinMode(OPTRON_PIN, OUTPUT); } void loop() { if(digitalRead(2)==HIGH&&flag==0)//если кнопка нажата // и перемення flag равна 0 , то ... { flag=1; //это нужно для того что бы с каждым нажатием кнопки } if(digitalRead(2)==LOW&&flag==1) //если кнопка НЕ нажата //и переменная flag равна - 1 ,то ... { if (millis() > new_millis_optron) state_optron = !state_optron; digitalWrite(OPTRON_PIN, state_optron); if (state_optron){ new_millis_optron = millis() + TIME_ON_OPTRON; } else { new_millis_optron = millis() + TIME_OFF_OPTRON; flag=0;//обнуляем переменную flag } } } Добрый день столкнулся с проблемой мучаюсь уже 4 день писал уже на многих форумах не где не смогли помочь.Суть вот в чем есть радиоприемник при нажатии кнопки +5v подается на контакт 6 .После этого запускается цикл контакт 13 включен 5 мин, 13выключен 5мин и так до тех пор пока на контакт 6 не прийдет снова +5v кнопки на предатчике тактовые тоесть после отпускания кнопки напряжение не подается приходится програмно фиксацию мудрить.Уже не знаю что делать даже готов заплатить за рабочий скетч.Тоесть при отжатой кнопке if(digitalRead(2)==LOW&&flag==1) должен цикл таймера повторятся постоянно пока не прийдет повторный сигнал +5v
А почему тогда flag становится нулём не по нажатию кнопки, а по чётности количества инвертирований state_optron ?
Нужно сначала расписать словами что делается чётко, ясно и однозначно, а потом просто записать это в виде программы.
Прокачивайте знания. Там нечего доводить, там всего несколько строк. Нужно просто написать такие же строки, но правильно
Помогите пожалуйста уже незнаю что делать и читал и примеры другие брал все равно не получается у меня.Просто это уже не первый вариант кода наверно уже 3 и все не работоспособные.
Так я и помогаю. Я же Вам говорю, "нужно расписать словами что делается чётко, ясно и однозначно". Делайте это! Не видел пока Вашей попытки. Я что ли за Вас это буду делать? Пример как надо расписывать Вам, кажется, уже давали, но Вы даже не пытаетесь (не зря там в примере написано, что начинающие всегда плюют на самое важное).
Щас сидел думал додумался только ещё 1 флаг добавить на зацикливание цикла зделал серавно не работает.
Чего конкретно Вы не понимаете? Того, что прежде, чем программировать нужно простыми русскими словами написать что именно Вы собрались программировать? Этого не понимаете? Или чего?
Если бы мне не написали про то что цикл будет 1 раз всего выполнятся я бы так и думал что все нормально будет.
в русском языке отсутствует приставка "з". ну не, таких у нас нет. говорят же: составляй алгоритм. Для составления алгоритма знаний много не надо. Но нужна логика.