#include <IRremote.h>
int R1 = 2, G1 = 3, R2 = 4, G2 = 5, R3 = 6, G3 = 7, R4 = 8, G4 = 9;
int R[] = {2, 4, 6, 8};
int G[] = {3, 5, 7, 9};
int buttonPins[] = {A1, A2, A3, A4};
int density[] = {0, 0, 0, 0};
int Tdelay[] = {3000, 3000, 3000, 3000};
int i = 0;
int j = 1;
int value[] = {HIGH, HIGH, HIGH, HIGH};
unsigned long lastMillis = 0;
void setup() {
for (int i = 2 ; i <= 9 ; i++) {
pinMode(i, OUTPUT);
}
for (uint8_t i = 0; i < 4; i++) {
pinMode(buttonPins[i], INPUT_PULLUP);
}
}
void loop() {
unsigned long currMillis = millis();
int n = 0;
for (i = 0;i < 4;i++) {
Tdelay[i] = 3000;
}
for (i = 0;i < 4;i++) {
for (j = 0;j < 4;j++) {
if (density[i] > density[j]) {
Tdelay[i] = Tdelay[i] + 1000;
}
}
}
// Green 1
digitalWrite(R1, LOW);
digitalWrite(G1, HIGH);
digitalWrite(R2, HIGH);
digitalWrite(G2, LOW);
digitalWrite(R3, HIGH);
digitalWrite(G3, LOW);
digitalWrite(R4, HIGH);
digitalWrite(G4, LOW);
j = 1;
while (n == 0) {
currMillis = millis();
for (uint8_t k = 0; k < 4; k++) {
if (digitalRead(buttonPins[k]) != value[k]) {
if (value[k] == HIGH) {
density[k]++;
}
value[k] = digitalRead(buttonPins[k]);
}
}
if (density[n] >= 1) {
if (currMillis - lastMillis >= 1000*j) {
density[n] = density[n] - 1;
j++;
}
}
if (currMillis - lastMillis >= Tdelay[n]) {
lastMillis = currMillis;
n = 1;
}
}
// Green 2
digitalWrite(R1, HIGH);
digitalWrite(G1, LOW);
digitalWrite(R2, LOW);
digitalWrite(G2, HIGH);
digitalWrite(R3, HIGH);
digitalWrite(G3, LOW);
digitalWrite(R4, HIGH);
digitalWrite(G4, LOW);
j = 1;
while (n == 1) {
currMillis = millis();
for (uint8_t k = 0; k < 4; k++) {
if (digitalRead(buttonPins[k]) != value[k]) {
if (value[k] == HIGH) {
density[k]++;
}
value[k] = digitalRead(buttonPins[k]);
}
}
if (density[n] >= 1) {
if (currMillis - lastMillis >= 1000*j) {
density[n] = density[n] - 1;
j++;
}
}
if (currMillis - lastMillis >= Tdelay[n]) {
lastMillis = currMillis;
n = 2;
}
}
// Green 3
digitalWrite(R1, HIGH);
digitalWrite(G1, LOW);
digitalWrite(R2, HIGH);
digitalWrite(G2, LOW);
digitalWrite(R3, LOW);
digitalWrite(G3, HIGH);
digitalWrite(R4, HIGH);
digitalWrite(G4, LOW);
j = 1;
while (n == 2) {
currMillis = millis();
for (uint8_t k = 0; k < 4; k++) {
if (digitalRead(buttonPins[k]) != value[k]) {
if (value[k] == HIGH) {
density[k]++;
}
value[k] = digitalRead(buttonPins[k]);
}
}
if (density[n] >= 1) {
if (currMillis - lastMillis >= 1000*j) {
density[n] = density[n] - 1;
j++;
}
}
if (currMillis - lastMillis >= Tdelay[n]) {
lastMillis = currMillis;
n = 3;
}
}
// Green 4
digitalWrite(R1, HIGH);
digitalWrite(G1, LOW);
digitalWrite(R2, HIGH);
digitalWrite(G2, LOW);
digitalWrite(R3, HIGH);
digitalWrite(G3, LOW);
digitalWrite(R4, LOW);
digitalWrite(G4, HIGH);
j = 1;
while (n == 3) {
currMillis = millis();
for (uint8_t k = 0; k < 4; k++) {
if (digitalRead(buttonPins[k]) != value[k]) {
if (value[k] == HIGH) {
density[k]++;
}
value[k] = digitalRead(buttonPins[k]);
}
}
if (density[n] >= 1) {
if (currMillis - lastMillis >= 1000*j) {
density[n] = density[n] - 1;
j++;
}
}
if (currMillis - lastMillis >= Tdelay[n]) {
lastMillis = currMillis;
n = 0;
}
}
}