Прошу помощи в создании примитивной сигнализации. Посмотрите код.

Нет ответов
lav522
Offline
Зарегистрирован: 18.08.2016

Хочу создать примитивнейшую сигнализацию на дверь с помощью зуммера, ультрозвукового дальномера (SR04), переключателя на две позиции, светодиода и собственно ардуино. В программировании полный ноль, но уж очень захотелось сделать самому. 

Что я от нее хочу: при одном положении выключетеля - светодиод не горит, сонар не измеряет, в общем все спит. Как только включаю второе положение - задержка на пару сек, чтобы успел отойти, затем загорается светик и начинает работать SR04. При фиксировании изменения начинает пищать зуммер, при том зуммер у меня без генератора, хотелось бы узнать, возможно ли, чтобы при фиксации движения запускался цикл типа: 

tone(ALARM, 2000);

delay(100);

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

Собственно вопрос в том, как переделать код, чтобы зуммер продолжал пищать и после того, как перестанет фиксироваться движение. Пока смог добиться всего, о чем писал выше, только без начальной задержки и главное, зуммер пищит, только пока фиксируется движение, как только человек проходит, он замолкает :(

Вот код:

#define ALARM 5
#define LED 7
#define SWITCH 8
int echoPin = 11; 
int trigPin = 12;
 
 
 
void setup(){
  pinMode(ALARM, OUTPUT);
  pinMode(SWITCH, INPUT_PULLUP);
  pinMode(LED, OUTPUT);
  pinMode(trigPin, OUTPUT);
  Serial.begin(9600);
}
 
void loop (){
  
  int var = digitalRead(SWITCH);
  
 switch(var){
  case 1:
   digitalWrite(LED, HIGH); 
  int duration, cm; 
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2); 
  digitalWrite(trigPin, HIGH); 
  delayMicroseconds(10); 
  digitalWrite(trigPin, LOW); 
  duration = pulseIn(echoPin, HIGH); 
  cm = duration / 58; 
  delay(10);
   
   /*Serial.println(cm);
   delay(300);*/
 
  if (cm<45 || cm>60){
     
    tone(ALARM, 2000);
   
    delay(100);
    
    case 0:
    
    
      noTone(ALARM);
      digitalWrite(LED, LOW);
    }
  }
  }