83 lines
1.8 KiB
C++
83 lines
1.8 KiB
C++
#include <avr/wdt.h>
|
|
|
|
#define D2 2
|
|
#define D3 3
|
|
#define D4 4
|
|
#define D5 5
|
|
#define D6 6
|
|
#define A0_PIN A0
|
|
#define D10 10
|
|
#define D11 11
|
|
#define D12 12
|
|
|
|
int potValue = 0;
|
|
int timerDuration = 0;
|
|
unsigned long previousMillis = 0;
|
|
const long debounceDelay = 50;
|
|
|
|
void setup() {
|
|
pinMode(D2, INPUT_PULLUP);
|
|
pinMode(D3, INPUT_PULLUP);
|
|
pinMode(D4, INPUT_PULLUP);
|
|
pinMode(D5, INPUT_PULLUP);
|
|
pinMode(D6, INPUT_PULLUP);
|
|
pinMode(A0_PIN, INPUT);
|
|
pinMode(D10, OUTPUT);
|
|
pinMode(D11, OUTPUT);
|
|
pinMode(D12, OUTPUT);
|
|
|
|
digitalWrite(D10, LOW);
|
|
digitalWrite(D11, LOW);
|
|
digitalWrite(D12, LOW);
|
|
|
|
wdt_enable(WDTO_8S); // Enable watchdog with 8-second timeout
|
|
}
|
|
|
|
void loop() {
|
|
wdt_reset(); // Reset the watchdog timer
|
|
|
|
int d2State = digitalRead(D2);
|
|
int d3State = digitalRead(D3);
|
|
int d4State = digitalRead(D4);
|
|
int d5State = digitalRead(D5);
|
|
int d6State = digitalRead(D6);
|
|
|
|
// Washer
|
|
if (d2State == LOW && d6State == LOW) {
|
|
digitalWrite(D12, HIGH);
|
|
while (digitalRead(D6) == LOW) {
|
|
digitalWrite(D10, HIGH);
|
|
delay(15000); // 15 seconds
|
|
digitalWrite(D10, LOW);
|
|
}
|
|
digitalWrite(D12, LOW);
|
|
}
|
|
// Off
|
|
else if (d2State == LOW) {
|
|
digitalWrite(D10, LOW);
|
|
digitalWrite(D11, LOW);
|
|
}
|
|
// Pulse
|
|
else if (d3State == LOW) {
|
|
digitalWrite(D10, HIGH);
|
|
delay(500); // 0.5 seconds
|
|
digitalWrite(D10, LOW);
|
|
timerDuration = map(analogRead(A0_PIN), 0, 1023, 5000, 50000); // Mapping analog input to timer duration (5-50 seconds)
|
|
delay(timerDuration);
|
|
}
|
|
// Low
|
|
else if (d4State == LOW) {
|
|
digitalWrite(D10, HIGH);
|
|
}
|
|
// High
|
|
else if (d5State == LOW) {
|
|
digitalWrite(D10, HIGH);
|
|
digitalWrite(D11, HIGH);
|
|
}
|
|
else {
|
|
digitalWrite(D12, LOW); // Ensure D12 is low if none of the conditions are met
|
|
}
|
|
|
|
delay(10); // Small delay to debounce
|
|
}
|