struct TrafficLight {
const uint8_t greenPin;
const uint8_t yellowPin;
const uint8_t redPin;
void begin() {
pinMode(greenPin, OUTPUT);
pinMode(yellowPin, OUTPUT);
pinMode(redPin, OUTPUT);
}
void off() {
digitalWrite(greenPin, LOW);
digitalWrite(yellowPin, LOW);
digitalWrite(redPin, LOW);
}
void red() {
off();
digitalWrite(redPin, HIGH);
}
void yellow() {
off();
digitalWrite(yellowPin, HIGH);
}
void green() {
off();
digitalWrite(greenPin, HIGH);
}
};
TrafficLight lights[] = {
{2, 3, 4},
{5, 6, 7},
{8, 9, 10}
};
void setup() {
for (TrafficLight& aTrafficLight : lights) aTrafficLight.begin();
}
void loop() {
for (TrafficLight& aTrafficLight : lights) aTrafficLight.red(); // all lights red
delay(300);
for (TrafficLight& aTrafficLight : lights) aTrafficLight.yellow(); // all lights yellow
delay(300);
for (TrafficLight& aTrafficLight : lights) aTrafficLight.green(); // all lights green
delay(300);
}
lights[0]
lights[1]
lights[2]