#define r 13
#define y 12
#define g 11
const int btn = 4;
bool isR = false;
bool isY = false;
bool isG = false;
int a = 2;
int b = 3;
int c = 5;
int d = 6;
int e = 7;
int f = 8;
int g1 = 9;
int digits[] = {a, b, c, d, e, f, g1};
int one[] = {b, c};
int state = 0;
unsigned long previousMillis = 0;
int time = 20;
void setup() {
Serial.begin(115200);
Serial.println("start");
pinMode(btn, INPUT_PULLUP);
pinMode(r, OUTPUT);
pinMode(y, OUTPUT);
pinMode(g, OUTPUT);
for (int i = 0; i < sizeof(digits); i++) {
pinMode(digits[i], OUTPUT);
digitalWrite(digits[i], HIGH);
}
}
int lastState = HIGH;
void loop() {
int buttonState = digitalRead((btn));
if (isR) {
digitalWrite(b, LOW);
digitalWrite(c, LOW);
}
else if (isY) {
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(g1, LOW);
digitalWrite(e, LOW);
digitalWrite(d, LOW);
}
else if (isG) {
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(g1, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
}
else {
for (int i = 0; i < sizeof(digits); i++) {
digitalWrite(digits[i], HIGH);
}
}
if (buttonState != lastState) {
if (buttonState == LOW) {
if (state == 0) {
state = 1;
}
else {
state = 0;
}
Serial.println("Button click");
}
}
lastState = buttonState;
unsigned long currentMillis = millis();
if (currentMillis % 400 == 0) {
dg1(HIGH);
}
else {
dg1(LOW);
}
if ((currentMillis - previousMillis >= 500 && currentMillis - previousMillis < 1000) ||
(currentMillis - previousMillis >= 1500 && currentMillis - previousMillis < 2000)) {
dg2(HIGH);
}
else {
dg2(LOW);
}
if (currentMillis % 2000 == 0) {
previousMillis = currentMillis;
digitalWrite(r, LOW);
digitalWrite(y, LOW);
digitalWrite(g, LOW);
}
}
void dg1(int a) {
if (state == 0) {
digitalWrite(r, a);
digitalWrite(y, a);
if (a == HIGH) {
isR = true;
isY = true;
}
else {
isR = false;
isY = false;
}
}
else {
digitalWrite(g, a);
if (a == HIGH) {
isG = true;
}
else {
isG = false;
}
}
}
void dg2(int a) {
if (state == 1) {
digitalWrite(r, a);
digitalWrite(y, a);
if (a == HIGH) {
isR = true;
isY = true;
}
else {
isR = false;
isY = false;
}
}
else {
digitalWrite(g, a);
if (a == HIGH) {
isG = true;
}
else {
isG = false;
}
}
}