I need help with my coding. I'm still learning on how to use interval millis().
Currently I'm working on a water heater with a safety feature. This means that you can only pour water out when you activate the child-lock feature. The child-lock feature will turn on for 5 seconds and within that 5 seconds if you pour the water out, the timer will pause until you finish pouring your water and the 5 second timer will start again and the system goes off after that.
If the child lock feature on for 5 second without any action, it will turn off the system again. My lecturer does not allow me to use the delay() function so I already did my coding using millis().
This is my code so far:
const int redLed = 2;
const int greenLed = 3;
const int yellowLed = 4;
const int greenbigLed = 7;
const int buttonPin1 = 5;
const int buttonPin2 = 6;
int buttonState1 = 0;
int buttonState2 = 0;
float tempC ;
int analogPin = A0;
int yellowLedState = 0;
const long interval1 =0;
const long interval2 = 5000;
unsigned long previousMillis = 0;
void setup() {
// put your setup code here, to run once:
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,INPUT);
pinMode(6,INPUT);
Serial.begin(9600);
digitalWrite(yellowLed,yellowLedState);
}
void loop() {
// put your main code here, to run repeatedly:
int analogValue = analogRead(analogPin);
int buttonState1 = digitalRead(buttonPin1);
int buttonState2 = digitalRead(buttonPin2);
int yellowLedState = digitalRead(yellowLed);
tempC = analogValue / 10 ;
Serial.println(tempC);
unsigned long currentMillis = millis();
unsigned long currentMillis2 = millis();
if (tempC <= 89.9 && tempC >= 0){
digitalWrite(redLed,HIGH);
digitalWrite(greenLed,LOW);
}else if(tempC == 102){
digitalWrite(redLed,LOW);
digitalWrite(greenLed,HIGH);
}
if(currentMillis - previousMillis >= interval2){
previousMillis = currentMillis;
if(buttonState1 == HIGH){
// if(currentMillis2 - previousMillis2 >=interval2){
if (yellowLedState == LOW) {
yellowLedState = HIGH;
}
digitalWrite(yellowLed, yellowLedState);
} else{
digitalWrite(yellowLed,LOW);
}
}
if (buttonState2 == HIGH && yellowLedState == HIGH){
digitalWrite(greenbigLed, HIGH);
}else{
digitalWrite(greenbigLed,LOW);
}
}
Now, I'm able to pour out water when child lock feature activated, but the problem is the timer (interval) still ticking.
Is there any solution on how can I pause the interval whenever I'm pouring water (button2) and the interval starts back 5 sec when I release button2 (pouring water)?
I would glad if someone can help me. Ask me anything about my code.