Hi Everyone!
Having some trouble with millis. Wanted to control a blower depending on a sensor. The sensor debounce time works well since it is from arduino sample code however blower() function time randomly changes. Sometimes it waits for the 5000 interval sometimes longer sometimes shorter. Probably something simple however I cant figure out what.
int firstState = LOW;
unsigned long previousMillis = 0;
unsigned long interval = 5000;
int sensState = HIGH;
int buttonState = LOW;
int lastButtonState = HIGH;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 5000;
const int vmot = 8;
const int atmo = 9;
const int gran = 10;
const int sens = A4;
void setup() {
pinMode(vmot, OUTPUT);
pinMode(atmo, OUTPUT);
pinMode(gran, OUTPUT);
pinMode(sens, INPUT_PULLUP);
}
void sensor() {
int reading = digitalRead(sens);
if (reading != lastButtonState) {
lastDebounceTime = millis(); }
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == HIGH) {
sensState = LOW;
} else {
sensState = HIGH;
}
}
}
lastButtonState = reading;
}
void blower() {
if (sensState == LOW) {
if (firstState == LOW) {
digitalWrite(vmot, HIGH);
digitalWrite(atmo, HIGH);
digitalWrite(gran, LOW);
}
if ((millis() - previousMillis) >= interval) {
previousMillis = millis();
if (digitalRead(vmot)== HIGH) {
firstState = HIGH; }
}
if (firstState == HIGH) {
digitalWrite(vmot, HIGH);
digitalWrite(atmo, LOW);
digitalWrite(gran, HIGH);
}
}
else {
if (firstState == HIGH) {
digitalWrite(atmo, HIGH);
digitalWrite(vmot, HIGH);
digitalWrite(gran, LOW);
}
if ((millis() - previousMillis) >= interval) {
previousMillis = millis();
if (digitalRead(atmo)== HIGH) {
firstState = LOW; }
}
if (firstState == LOW) {
digitalWrite(vmot, LOW);
digitalWrite(atmo, LOW);
digitalWrite(gran, LOW);
}
}
}
void loop() {
sensor();
blower();
}
