2 реле + 2 пир датчика

sergey.volodin.102
Offline
Зарегистрирован: 22.03.2016

помогите что не так в коде. датчики срабатвают реле тоже, но сразу оба

//Тестировалось на Arduino IDE 1.0.1
//Время калибровки датчика (10-60 сек. по даташиту)
int calibrationTime = 30;       

//Время, в которое был принят сигнал отсутствия движения(LOW)
long unsigned int lowIn1;
//Время, в которое был принят сигнал отсутствия движения(LOW)
long unsigned int lowIn2; 
//Флаг. false = значит движение уже обнаружено, true - уже известно, что движения нет
boolean lockLow1 = true;
//Флаг. false = значит движение уже обнаружено, true - уже известно, что движения нет
boolean lockLow2 = true;
//Флаг. Сигнализирует о необходимости запомнить время начала отсутствия движения
boolean takeLowTime1;
//Флаг. Сигнализирует о необходимости запомнить время начала отсутствия движения
boolean takeLowTime2;         

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

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

int pirPin2 = 3;    //вывод подключения PIR-2 датчика
int relayPin2 = 5;  //реле-2 пин

void setup()
{
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
  pinMode(pirPin1, INPUT);
  pinMode(relayPin1, OUTPUT);
 
  pinMode(pirPin2, INPUT);
  pinMode(relayPin2, OUTPUT);

  digitalWrite(relayPin1, HIGH);
  digitalWrite(relayPin2, HIGH);
  delay(4000);
  digitalWrite(pirPin1, LOW);
  digitalWrite(pirPin2, LOW);

  //дадим датчику время на калибровку
  Serial.print("Calibrating");
  for(int i = 0; i < calibrationTime; i++)

    {
    Serial.print(".");
    delay(1000);

    //Во время калибровки будет мигать сигнальный диод
    i % 2 ? digitalWrite(ledPin, HIGH) : digitalWrite(ledPin, LOW);
    delay(1000);
  }
  //По окончанию калибровки зажжем сигнальный диод 
  digitalWrite(ledPin, HIGH);
  Serial.println(" done");
  Serial.println("SENSOR ACTIVE");
  delay(50);
}

void loop()
{
  //Если обнаружено движение 1
  if(digitalRead(pirPin1) == HIGH)
  {
    //Если до этого момента еще не включили реле 1
    if(lockLow1)
    {
      lockLow1 = false;     
       Serial.println("Motion detected-1");
//Включаем реле 1.
      digitalWrite(relayPin1, LOW);
      delay(50);
    }        
    takeLowTime1 = true;
  }

//Если обнаружено движение 2 датчик
  if(digitalRead(pirPin2) == HIGH)
  {
    //Если до этого момента еще не включили реле 2
    if(lockLow2)
    {
      lockLow2 = false;     
      Serial.println("Motion detected-2");
//Включаем реле 2.
      digitalWrite(relayPin2, LOW);
      delay(50);
    }        
    takeLowTime2 = true;
  }

  //Ели движения нет 1
  if(digitalRead(pirPin1) == LOW)
  {      
    //Если время окончания движения еще не записано 1
    if(takeLowTime2)
    {
      lowIn1 = millis();          //Сохраним время окончания движения
      takeLowTime1 = false;       //Изменим значения флага, чтобы больше не брать время, пока не будет нового движения
    }
    //Если время без движение превышает паузу => движение окончено 1
    if(!lockLow1 && millis() - lowIn1 > pause)
    { 
      //Изменяем значение флага, чтобы эта часть кода исполнилась лишь раз, до нового движения 1
      lockLow1 = true;                
      digitalWrite(relayPin1, HIGH);
         Serial.println("Motion finished-1");
      delay(50);
    }  
  }

  //Ели движения нет 2 датчик
  if(digitalRead(pirPin2) == LOW)
  {      
    //Если время окончания движения еще не записано 2
    if(takeLowTime2)
    {
      lowIn2 = millis();          //Сохраним время окончания движения 2
      takeLowTime2 = false;       //Изменим значения флага, чтобы больше не брать время, пока не будет нового движения
    }
    //Если время без движение превышает паузу => движение окончено 2
    if(!lockLow2 && millis() - lowIn2 > pause)
    { 
      //Изменяем значение флага, чтобы эта часть кода исполнилась лишь раз, до нового движения 2
      lockLow2 = true;                
      digitalWrite(relayPin2, HIGH);
      Serial.println("Motion finished-2");
      delay(50);
    }  
  }
}

 

sergey.volodin.102
Offline
Зарегистрирован: 22.03.2016

вроде понял в чем ошибка. исправил. может как нибуть код ужать, чтоб весил меньше?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sergey.volodin.102 пишет:

может как нибуть код ужать, чтоб весил меньше?

С какой целью? 

И каково целевое значение размера кода, которое Вас устроит?