Hi.
I have tried several things, without being able to find the problem with this timer.
The first counter fine, but then starts the problem.
I ask for help because I've tried even without being able to solve the problem myself
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
const int analogPin = A0;
int val = 0;
int relay = 9;
int interval=3000;
int interval2=60000;
//int interval2=900000;
int interval3=1800000;
int interval4=2700000;
int interval5=3600000;
unsigned long previousMillis=0;
void setup() {
Serial.begin(9600);
pinMode(9,OUTPUT);
pinMode(8,OUTPUT);
pinMode(3,INPUT);
pinMode(4,INPUT);
pinMode(5,INPUT);
pinMode(6,INPUT);
pinMode(7,INPUT);
}
void loop() {
Serial.println(millis());
//extern volatile unsigned long timer0_overflow_count;
unsigned long currentMillis = millis();
val = analogRead(analogPin);
val = map (val, 0, 1023, 5000, 30000);
if ((digitalRead(3) == HIGH) && ((currentMillis - previousMillis) >= (interval)){
digitalWrite(relay, HIGH);
delay(val*2);
digitalWrite(relay, LOW);
previousMillis = currentMillis;
}
//{extern volatile unsigned long timer0_overflow_count;
// unsigned long currentMillis = millis();
// val = analogRead(analogPin);
// val = map (val, 0, 1023, 5000, 30000);}
else if ((digitalRead(4) == HIGH) && ((unsigned long)currentMillis - previousMillis) >= (interval2)){
digitalWrite(relay, HIGH);
delay(val*2);
digitalWrite(relay, LOW);
previousMillis = currentMillis;
}
//{extern volatile unsigned long timer0_overflow_count;
// unsigned long currentMillis = millis();
// val = analogRead(analogPin);
// val = map (val, 0, 1023, 5000, 30000);}
else if ((digitalRead(5) == HIGH) + (unsigned long) (currentMillis - previousMillis) >= (interval3)){
//digitalWrite(led,(state)?HIGH:LOW);
digitalWrite(relay, HIGH);
delay(val*2);
digitalWrite(relay, LOW);
previousMillis = currentMillis;
}
// extern volatile unsigned long timer0_overflow_count;
// unsigned long currentMillis4 = millis();
// val = analogRead(analogPin);
// val = map (val, 0, 1023, 5000, 30000);
else if (digitalRead(6) == HIGH && currentMillis - previousMillis >= interval4) {
//digitalWrite(led,(state)?HIGH:LOW);
digitalWrite(relay, HIGH);
delay(val*2);
digitalWrite(relay, LOW);
previousMillis = currentMillis;
}
// extern volatile unsigned long timer0_overflow_count;
// unsigned long currentMillis5 = millis();
// val = analogRead(analogPin);
// val = map (val, 0, 1023, 5000, 30000);
else if (digitalRead(7) == HIGH && currentMillis - previousMillis >= interval5) {
digitalWrite(relay, HIGH);
delay(val*2);
digitalWrite(relay, LOW);
previousMillis = currentMillis;
}
else if (digitalRead(3) == LOW && digitalRead(4)== LOW && digitalRead(5)== LOW && digitalRead(6)== LOW && digitalRead(7)== LOW){
digitalWrite(relay, LOW);
previousMillis = currentMillis;}
// if (digitalRead(3) == HIGH && digitalRead(4)== HIGH && digitalRead(5)== HIGH && digitalRead(6)== HIGH && digitalRead(7)== HIGH){
//crossTime = millis();
}
//
// previousMillis = currentMillis;}