This repository has been archived by the owner on May 16, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path17_0107_0077.ino
119 lines (110 loc) · 2.72 KB
/
17_0107_0077.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#define LED_1 4 // RED
#define LED_2 3 // YELLOW
#define LED_3 2 // GREEN
#define BTN_1 13
#define BTN_2 12
#define BTN_3 11
int led[3] = {LED_1, LED_2, LED_3};
int button[3] = {BTN_1, BTN_2, BTN_3};
int ledState[3] = {LOW, LOW, LOW};
int lastButtonState[3] = {LOW, HIGH, HIGH};
int buttonState[3];
unsigned long long int debounceDelay = 50;
unsigned long long int lastDebounceTime[3];
int reading[3];
int ledTime[3] = {3000, 2000, 3000};
unsigned long long int lastTime[3] = {0, 0, 0};
unsigned long long int blinkYellow = 500;
unsigned long long int blinkYellowTime = 0;
int isActive = 0;
void setup()
{
pinMode(LED_1, OUTPUT);
pinMode(LED_2, OUTPUT);
pinMode(LED_3, OUTPUT);
pinMode(BTN_1, INPUT); // PULL DOWN
pinMode(BTN_2, INPUT); // PULL UP
pinMode(BTN_3, INPUT_PULLUP); // PULLUP BUILTIN
// Serial.begin(9600);
}
int debounce(int i)
{
int isChange = 0;
reading[i] = digitalRead(button[i]);
if (reading[i] != lastButtonState[i])
{
lastDebounceTime[i] = millis();
}
if ((millis() - lastDebounceTime[i]) > debounceDelay)
{
if (reading[i] != buttonState[i])
{
buttonState[i] = reading[i];
isChange = 1;
}
}
lastButtonState[i] = reading[i];
return isChange;
}
void loop()
{
if (debounce(0))
{
if (buttonState[0] == HIGH)
{
ledState[0] = !ledState[0];
digitalWrite(led[0], ledState[0]);
lastTime[0] = millis();
}
}
if (debounce(2))
{
if (buttonState[2] == LOW && !ledState[0] || (ledState[0] && ledState[2]))
{
ledState[2] = !ledState[2];
digitalWrite(led[2], ledState[2]);
lastTime[2] = millis();
}
}
if (debounce(1))
{
if (buttonState[1] == LOW && !ledState[0] && !ledState[2] && !isActive)
{
blinkYellowTime = millis();
lastTime[1] = millis();
ledState[1] = !ledState[1];
digitalWrite(led[1],ledState[1]);
isActive = 1;
}
}
if ((millis() - blinkYellowTime) >= blinkYellow && isActive && (millis() - lastTime[1]) < ledTime[1])
{
blinkYellowTime = millis();
ledState[1] = !ledState[1];
digitalWrite(led[1], ledState[1]);
}
if((millis() - lastTime[1]) > ledTime[1]) {
isActive = 0;
}
if ((millis() - lastTime[0]) > ledTime[0] && lastTime[0] != 0)
{
ledState[0] = LOW;
lastButtonState[0] = LOW;
digitalWrite(led[0], ledState[0]);
lastTime[0] = 0;
}
if ((millis() - lastTime[2]) > ledTime[2] && lastTime[2] != 0)
{
ledState[2] = LOW;
lastButtonState[2] = HIGH;
digitalWrite(led[2], ledState[2]);
lastTime[2] = 0;
}
if ((millis() - lastTime[1]) > ledTime[1] && lastTime[1] != 0)
{
ledState[1] = LOW;
lastButtonState[1] = HIGH;
digitalWrite(led[1], ledState[1]);
lastTime[1] = 0;
}
}