Помогите с флагом для реле

Тема в разделе "Arduino & Shields", создана пользователем A.R., 25 дек 2017.

  1. A.R.

    A.R. Нуб

    Код (C++):


    int FLAG= 0;

    void setup()
    {
    Serial.begin(9600);
    }

    void loop()
    {
    if(FLAG == 0)  
            {
             digitalWrite(PIN_RELAY, HIGH);
             FLAG = 1;
             Serial.println("РЕЛЕ ВКЛЮЧИЛОСЬ");                                                                            
             }  
    }
     
    При исполнении кода реле включается, флаг устанавливается - все ОК. Но как только loop начинает повтор - реле отключается, хотя флаг равен 1. Как решить? То есть, чтобы реле было включено. пока не поступит команда на выключение.
     
  2. Kamikadze

    Kamikadze Гик

    Код (C++):
    boolean New = 0;
    boolean oldNew = 0;
    int FLAG= 0;
    int PIN_RELAY = 12;

    void setup()
    {
      Serial.begin(9600);
      pinMode(PIN_RELAY, OUTPUT);
    }

    void loop()
    {
      if(FLAG == 0)
      {
        New = !New;
        FLAG =1;
      }
      if (New != oldNew)
      {
        digitalWrite(PIN_RELAY, HIGH);
        FLAG = 1;
        Serial.println("РЕЛЕ ВКЛЮЧИЛОСЬ");
        oldNew = New;
      }
    }
     
    Последнее редактирование: 25 дек 2017
    A.R. нравится это.
  3. A.R.

    A.R. Нуб

    Kamikadze, спасибо! Все работает!
     
  4. vvr

    vvr Инженерище

    а в чём хоть смысл этого кода.
     
  5. akl

    akl Гуру

    в приведенном скетче нету ничего, что могло бы отключить реле - он неполный походу?
     
  6. vvr

    vvr Инженерище

    пурга какая то)))
     
    БАРМАТОГРАФ нравится это.
  7. Airbus

    Airbus Радиохулиган Модератор

    Видимо переключение реле по внешнему сигналу
     
  8. vvr

    vvr Инженерище

    где внешний сигнал)))
     
  9. Airbus

    Airbus Радиохулиган Модератор

    У топикстартера в голове.Но это будет следующая тема как отключить?
     
    Gritsan нравится это.
  10. DetSimen

    DetSimen Guest

    ААААААААААА!!!! ПАМАГИТИ!!!! Как спустить флаг с реле???!!!

    Ждём.
     
    NikitOS нравится это.
  11. b707

    b707 Гуру

    Kamikadze, вот так было бы короче и надежнее :)
    Код (C++):

    int PIN_RELAY = 12;

    void setup()
    {
      Serial.begin(9600);
      pinMode(PIN_RELAY, OUTPUT);
      digitalWrite(PIN_RELAY, HIGH);
      Serial.println("РЕЛЕ ВКЛЮЧИЛОСЬ");
    }

    void loop()  {}
     
    vvr и Airbus нравится это.
  12. Airbus

    Airbus Радиохулиган Модератор

    Так то да.У Каимкадзе в коде тоже с флагами какая то Ересь.
     
  13. b707

    b707 Гуру

    Вы ничего не напутали? В приведенном коде реле включается и остается включенным, никакой "повтор loop()" ему не страшен. Вероятно, вы тестировали не на этом коде, а на немного другом. Приведмие его - и тогда можно будет обсудить ошибки.
     
  14. b707

    b707 Гуру

    Ага, не понятно, зачем Камикадзе такие сложности с кучей булевых переменных - у ТС в первом сообщении вполне рабочий код. Там только pinMode(PIN_RELAY, OUTPUT); в сетапе не хватает.
     
  15. vvr

    vvr Инженерище

    а ещё будет отдельный пост по поводу вывода русских букоф в сериал
     
    NikitOS и b707 нравится это.
  16. b707

    b707 Гуру

    потому что нефиг - учите английский
     
  17. Kamikadze

    Kamikadze Гик

    Очевидно, что это не полный код а его фрагмент (ибо буть это полный скетч ТС бы сказал не о том что реле щелкает, а о отм что компилятор ругается на не объявленную переменную) как и то, что при некотором условии реле должно включаться например: digitalRead(kakoitoPin) == HIGH Как очевидно и то, что есть условие которое отключает реле, при этом опрашивая было нажатие или нет (за что как раз и отвечает флаг), и собственно если это все например в цикле, и было нажатие то вырубить реле нужно назад по прошествию некоторого времени например, так вот если не будет проверочных булевых переменных при каждой итерации в цикле реле будет включаться и выключаться ибо одного условия не достаточно, или я больной и мне пора вместе с тс лечиться... но ответ на это дать может только ТС
     
  18. A.R.

    A.R. Нуб

    Да, код неполный - полный больше 500 строк, так что я его не выкладывал. Ошибка была в том, что в коде были еще условия проверки и тип float сравнивался как 1.00 и 1.0 (показания температуры) Отсюда и неправильная работа. А код для того, чтобы в каждом цикле не подавалась команда на включение реле, вот и все)
     
    Последнее редактирование: 25 дек 2017
  19. NikitOS

    NikitOS Король шутов Администратор

    А автора не волнует что Си и Ардуино не понимают русский?
     
  20. A.R.

    A.R. Нуб

    Это для примера, там на самом деле другие команды.