Auch wenn Du keinen Konstruktor benötigst, tendiere ich eher zu diesem Ansatz:
class Ampel
{
private:
const byte rotPin;
const byte gelbPin ;
const byte gruenPin;
public:
Ampel(const byte rotPin, const byte gelbPin, const byte gruenPin) : rotPin(rotPin), gelbPin(gelbPin), gruenPin(gruenPin)
{}
void init()
{
pinMode(rotPin, OUTPUT);
pinMode(gelbPin, OUTPUT);
pinMode(gruenPin, OUTPUT);
}
void setrot()
{
digitalWrite(rotPin, HIGH);
digitalWrite(gelbPin, LOW);
digitalWrite(gruenPin, LOW);
}
void setrotgelb()
{
digitalWrite(rotPin, HIGH);
digitalWrite(gelbPin, HIGH);
digitalWrite(gruenPin, LOW);
}
void setgelb()
{
digitalWrite(rotPin, LOW);
digitalWrite(gelbPin, HIGH);
digitalWrite(gruenPin, LOW);
}
void setgruen()
{
digitalWrite(rotPin, LOW);
digitalWrite(gelbPin, LOW);
digitalWrite(gruenPin, HIGH);
}
};
Ampel ampel[] =
{
{2, 3, 4}
};
void setup()
{
ampel[0].init();
ampel[0].setrot();
}
void loop()
{
uint32_t jetzt = millis();
static uint32_t vorhin = 0;
const uint32_t intervall = 2000;
static uint8_t schritt = 0;
if (jetzt - vorhin >= intervall)
{
vorhin = jetzt;
switch (schritt)
{
case 0:
ampel[0].setrotgelb();
schritt++;
break;
case 1:
ampel[0].setgruen();
schritt++;
break;
case 2:
ampel[0].setgelb();
schritt++;
break;
case 3:
ampel[0].setrot();
schritt = 0;
break;
}
}
}