Arduino IDE

Тема в разделе "Arduino & Shields", создана пользователем Уыфгдщм, 4 мар 2017.

  1. Уыфгдщм

    Уыфгдщм Нерд

    Здравствуйте.Написал программу для лампы 220V которая включается за счёт движения(PIR датчик) и фоторезистора(проверяет освещенность помещения,если темно,то вкл,если светло,то выкл). Проблема в том,что если во время того как лампа горит и есть движение,если значение на фоторезисторе станет>300(светло),то лампа будет гореть пока не станет темно. Не могли бы вы подсказать,что нужно исправить в скетче,чтобы если во время того как горит лампа и значение на фоторезисторе изменилось на "светло" лампа переставала гореть
     

    Вложения:

    • Move_light.ino
      Размер файла:
      1,5 КБ
      Просмотров:
      327
  2. sslobodyan

    sslobodyan Гик

    Судя по коду, реле отключается по digitalWrite(relayPin, HIGH)? Тогда вот так.

    Код (C++):
    int sensor = A0; //фоторезистор
    unsigned int value = 0;
    long unsigned int lowIn;
    int calibrationTime = 30;

    long unsigned int pause = 700; //Пауза, после которой движение считается оконченным

    boolean lockLow = true;
    boolean takeLowTime;

    int pirPin = 2;    //вывод подключения PIR датчика
    int ledPin = 13;   //вывод сигнального диода
    int relayPin = 4;  //реле пин

    void setup()
    {
      pinMode(pirPin, INPUT);
      pinMode(ledPin, OUTPUT);
      pinMode(relayPin, OUTPUT);

      digitalWrite(relayPin, HIGH);
      delay(4000);
      digitalWrite(pirPin, LOW);

      for (int i = 0; i < calibrationTime; i++) //время колибровки
      {
        i % 2 ? digitalWrite(ledPin, HIGH) : digitalWrite(ledPin, LOW);
        delay(1000);
      }
      //По окончанию калибровки зажжем сигнальный диод
      digitalWrite(ledPin, HIGH);
      delay(50);
    }
    void loop() {
      value = analogRead(sensor);
      if (value < 300) {
        if (digitalRead(pirPin) == HIGH)
        {

          if (lockLow)
          {
            lockLow = false;
            digitalWrite(relayPin, LOW);
            delay(50);
          }
          takeLowTime = true;
        }

        //Ели движения нет
        if (digitalRead(pirPin) == LOW)
        {
          if (takeLowTime)
          {
            lowIn = millis();
            takeLowTime = false;
          }
          if (!lockLow && millis() - lowIn > pause)
          {
            lockLow = true;
            digitalWrite(relayPin, HIGH);
            delay(50);
          }
        }
      }
      else {
        digitalWrite(relayPin, HIGH);
        delay(2);
      }

    }
     
     
    Уыфгдщм нравится это.
  3. Уыфгдщм

    Уыфгдщм Нерд

    Спасибо большое! Очень помогли