Работа через радиоканал с оптронами и 3 режимами

Тема в разделе "Arduino & Shields", создана пользователем msyeard, 1 фев 2020.

  1. msyeard

    msyeard Нуб

    Код (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
     
  2. Asper Daffy

    Asper Daffy Иксперд

    А почему тогда flag становится нулём не по нажатию кнопки, а по чётности количества инвертирований state_optron ?
     
  3. msyeard

    msyeard Нуб

    А как зделать обнуление на нажатие кнопки?
     
  4. msyeard

    msyeard Нуб

    Нужно перенести flag=0 в скобки к if(digitalRead(2)==LOW&&flag==1)?
     
  5. Asper Daffy

    Asper Daffy Иксперд

    Нужно сначала расписать словами что делается чётко, ясно и однозначно, а потом просто записать это в виде программы.
     
    Daniil, parovoZZ и Ramterdam нравится это.
  6. msyeard

    msyeard Нуб

    Мне не хватает знаний ещё скорее всего а этот код можно довести до ума?
     
  7. Asper Daffy

    Asper Daffy Иксперд

    Прокачивайте знания.
    Там нечего доводить, там всего несколько строк. Нужно просто написать такие же строки, но правильно
     
    Последнее редактирование: 1 фев 2020
  8. msyeard

    msyeard Нуб

    Помогите пожалуйста уже незнаю что делать и читал и примеры другие брал все равно не получается у меня.Просто это уже не первый вариант кода наверно уже 3 и все не работоспособные.
     
  9. Asper Daffy

    Asper Daffy Иксперд

    Так я и помогаю. Я же Вам говорю, "нужно расписать словами что делается чётко, ясно и однозначно". Делайте это! Не видел пока Вашей попытки. Я что ли за Вас это буду делать? Пример как надо расписывать Вам, кажется, уже давали, но Вы даже не пытаетесь (не зря там в примере написано, что начинающие всегда плюют на самое важное).
     
    Daniil и alp69 нравится это.
  10. msyeard

    msyeard Нуб

    Щас сидел думал додумался только ещё 1 флаг добавить на зацикливание цикла зделал серавно не работает.
     
  11. msyeard

    msyeard Нуб

    Да читал всеравно не понимаю
     
  12. Asper Daffy

    Asper Daffy Иксперд

    Чего конкретно Вы не понимаете? Того, что прежде, чем программировать нужно простыми русскими словами написать что именно Вы собрались программировать? Этого не понимаете? Или чего?
     
  13. msyeard

    msyeard Нуб

    Если бы мне не написали про то что цикл будет 1 раз всего выполнятся я бы так и думал что все нормально будет.
     
  14. msyeard

    msyeard Нуб

    Не подскажете каво можно попросить за вознаграждение написать такой скетч?
     
  15. parovoZZ

    parovoZZ Гуру

    в русском языке отсутствует приставка "з".

    ну не, таких у нас нет.

    говорят же: составляй алгоритм. Для составления алгоритма знаний много не надо. Но нужна логика.