Поругайте код сигнализации

Нет ответов
art100
Offline
Зарегистрирован: 09.03.2014

Все вроде работает

Что-то мне мой код не нравится

// art100 wo write 2050107 HC-SR501
//pins-----------------------------
#define PINHCSR501  2//PIR сенсор 
#define PINLED13   13//
//consts---------------------------
int               TimeWait  =   10;// sek 30;  
long unsigned int TimeTmp   =    0;// 
long unsigned int TimePause = 5000; // 
boolean FlagMotion    = true; 
boolean FlagMotionEnd = true;    

//---------------------------------------------------
void setup(){
  Serial.begin(9600);                                      //протокол в терминал разделитель ;
  pinMode(PINHCSR501, INPUT);digitalWrite(PINHCSR501, LOW);//собственно умный детектор
  pinMode(PINLED13, OUTPUT);                               //контролька

  Serial.println("Signalisation.");//readme
  Serial.print("TimeWait sek:");Serial.print(TimeWait);Serial.print(":");
  for(int i=0; i<TimeWait; i++){  Serial.print("."); delay(1000); }
  Serial.println("done"); 
  Serial.println("Started.");
  Serial.println("Time alarm :( Time end :)"); 
}
//=============================================================================================
void loop(){
  if(digitalRead(PINHCSR501)==HIGH){//если тревога
    digitalWrite(PINLED13,HIGH);//тревога на контрольку
    if(FlagMotion){
      FlagMotion=false;//флаг сбросим 
      Serial.print(millis()/1000);Serial.print("; sek motion detected; ");delay(50);//в протокол
    }
    FlagMotionEnd=true;//флаг поднимем
  }
  if(digitalRead(PINHCSR501)== LOW){//если нет изменений
    digitalWrite(PINLED13, LOW); //гасим контрольку
    if(FlagMotionEnd){//если флаг о конце протокола есть
      TimeTmp      = millis();//запомнили время
      FlagMotionEnd=    false;//флаг сбросим
    }
    if(!FlagMotion && millis() - TimeTmp > TimePause){//чето тут дурью попахивает
      FlagMotion = true;//флаг поднимем
      Serial.print((millis()-TimePause)/1000);Serial.println("; sek motion ended;");delay(50);
    }
  }
}
//=============================================================================================

Может кто полезную мысль выскажет?

Протоко вроде пишу.

Но что-то мне не нравится. :(

Signalisation.
TimeWait sek:10:..........done
Started.
Time alarm :( Time end :)
13; sek motion detected; 15; sek motion ended;
40; sek motion detected; 43; sek motion ended;
67; sek motion detected; 70; sek motion ended;
103; sek motion detected; 105; sek motion ended;
147; sek motion detected; 150; sek motion ended;
163; sek motion detected; 173; sek motion ended;
187; sek motion detected; 190; sek motion ended;
200; sek motion detected; 238; sek motion ended;