int led = 13; int alarmSignal = 12; bool alarmON = false; const int turnOffDelay = 1000; int timeTurnOff; int crossingSineSignal = 2; bool crossingSineActive = false; int crossingSineThreshold = 20; int ldr = A0; int ldrVal; int ldrThreshold = 50; int btn = 3; int btnVal; int pir = 4; bool pirVal = false; int intensityDivider = 4; int intensityCounter = 0; void setup() { // Uso del Monitor Serial para calibración y reporte Serial.begin(9600); pinMode(led, OUTPUT); pinMode(alarmSignal, OUTPUT); // resistencia interna de carga para fototransistor optoacoplado pinMode(crossingSineSignal, INPUT_PULLUP); pinMode(btn, INPUT_PULLUP); // sensor pull up pinMode(ldr, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(crossingSineSignal), crossingSine, RISING); } void loop() { btnVal = digitalRead(btn); digitalWrite(led, btnVal); pirVal = digitalRead(pir); ldrVal = analogRead(A0); if(alarmON) { if(millis() > timeTurnOff || ldrVal <= ldrThreshold) { alarmON = false; } } else { digitalWrite(alarmSignal, false); } if(btnVal && ldrVal > ldrThreshold && pirVal) { timeTurnOff = millis() + turnOffDelay; alarmON = true; } } void crossingSine() { Serial.println(millis(),DEC); if(alarmON) { intensityCounter++; if(intensityCounter >= intensityDivider) { intensityCounter = 0; digitalWrite(alarmSignal, true); }else { digitalWrite(alarmSignal, false); } } }