Having problems with this code, first "motion" works fine but the second "motion2" will trigger only once after first "motion" timers have run out.
#include <Wire.h>
#include "RTClib.h"
#include <Time.h>
#include <TimeAlarms.h>
int pirpin = 12;
int lastpir;
int pirpin2 = 7;
int lastpir2;
const int led1 = 3;
const int led2 = 5;
const int led3 = 6;
const int led4 = 9;
const int led5 = A3;
const int led6 = A0;
unsigned long startTime;
unsigned long startTime2;
unsigned long startTime3;
unsigned long timer1 = 60000;
unsigned long timer2 = 120000;
unsigned long timer3 = 30000;
unsigned long timer4 = 5000;
int led1val = 128; //välisukse poolne
int led2val = 255; //välisuksest järgmine
int led3val = 128; //jne...
int led4val = 128; //
int led5val = 255; //köök
RTC_DS1307 RTC;
void setup()
{
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(pirpin, INPUT);
pinMode(pirpin2, INPUT);
Serial.begin(9600);
Wire.begin();
RTC.begin();
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
RTC.adjust(DateTime(__DATE__, __TIME__));
}
DateTime now = RTC.now();
setTime(hour(), minute(), second(), day(), month(), year());
setTime(now.hour(),now.minute(),now.second(),now.day(),now.month(),now.year());
// Alarmid (Hour, Minute, Second)
Alarm.alarmRepeat(5,0,0, Alarm1); //
Alarm.alarmRepeat(8,0,0, Alarm2); //
Alarm.alarmRepeat(12,30,0, Alarm3); //
Alarm.alarmRepeat(15,30,0, Alarm4); //
Alarm.alarmRepeat(17,30,0, Alarm5); //
Alarm.alarmRepeat(0,0,0, Alarm6); //
/* Alarm.alarmRepeat(23,0,0, Alarm7); //
Alarm.alarmRepeat(6,45,0, Alarm8); //
Alarm.alarmRepeat(0,0,0, Alarm9); //
Alarm.alarmRepeat(0,0,0, Alarm10); //
*/
}
void loop(){
DateTime now = RTC.now();
setTime(now.hour(),now.minute(),now.second(),now.day(),now.month(),now.year()); // set time & date
Alarm.delay(1000); //clock display delay
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.print(" Pir2 ");
Serial.print(digitalRead(pirpin2));
Serial.println("~~");
Serial.print(analogRead(led5));
motion();
motion2();
}
void motion(){
int pir = digitalRead(pirpin);
if (pir == HIGH && lastpir == LOW)
{
startTime = millis();
analogWrite(led1, led1val);
analogWrite(led2, led2val);
analogWrite(led3, led3val);
analogWrite(led4, led4val);
}
lastpir = pir;
{
if (millis() - startTime > timer1)
analogWrite(led1, 0);
if (millis() - startTime > timer2)
analogWrite(led2, 0);
if (millis() - startTime > timer3)
analogWrite(led3, 0);
if (millis() - startTime > timer4)
analogWrite(led4, 0);
}
}
void motion2(){
int pir2 = digitalRead(pirpin2);
if (pir2 == HIGH && lastpir2 == LOW)
{
startTime2 = millis();
analogWrite(led5, led5val);
digitalWrite(led6, HIGH);
}
lastpir2 = pir2;
{
if (millis() - startTime2 > timer3)
analogWrite(led5, 0);
digitalWrite(led6, LOW);
}
}
// Alarm Functions
void Alarm1(){ //5:00
led1val = 150;
led2val = 75;
led3val = 0;
led4val = 0;
/* EEPROM.write(1, 150);
EEPROM.write(2, 100);
EEPROM.write(3, 0);
EEPROM.write(4, 0);
*/
}
void Alarm2(){ //8:00
led1val = 255;
led2val = 150;
led3val = 255;
led4val = 0;
led5val = 0;
/* EEPROM.write(1, 0);
EEPROM.write(2, 150);
EEPROM.write(3, 0);
EEPROM.write(4, 0);
*/
}
void Alarm3(){ //12:30
led1val = 180;
led2val = 150;
led3val = 75;
led4val = 50;
/* EEPROM.write(1, 150);
EEPROM.write(2, 100);
EEPROM.write(3, 0);
EEPROM.write(4, 0);
*/
}
void Alarm4(){ //15:00
led1val = 100;
led2val = 150;
led3val = 50;
led4val = 11;
led5val = 255;
/* EEPROM.write(1, 150);
EEPROM.write(2, 100);
EEPROM.write(3, 0);
EEPROM.write(4, 0);
*/
}
void Alarm5(){ //17:30
led1val = 33;
led2val = 75;
led3val = 50;
led4val = 50;
led5val = 100;
/* EEPROM.write(1, 150);
EEPROM.write(2, 100);
EEPROM.write(3, 0);
EEPROM.write(4, 0);
*/
}
void Alarm6(){ //00:00
led1val = 100;
led2val = 75;
led3val = 0;
led4val = 50;
led5val = 80;
}
/*
void Alarm7(){
led1val = 130;
led2val = 60;
led3val = 30;
led4val = 0;
}
void Alarm8(){
led1val = 100;
led2val = 100;
led3val = 30;
led4val = 0;
}
*/