Kann mir jemand sagen warum der Button nicht funktioniert

Ich versuche eine ampelschaltung zu bauen kann denn Knopf aber einfach nicht so him bekomme das er nicht die ganze Zeit an oder aus ist. Kann jemand helfen?


Bitte lies dir den Thread Wie man dieses Forum benutzt - bitte lesen , der oben angepinnt ist, durch und beherzige die dortigen Tips.
Programmcode solltest Du niemals als Photo posten. Ausserdem sollte er immer vollständig sein. Wie man Code postet ist in den Tips enthalten.
Beim Verdrahten dieser kleinen Taster sollte man immer 2 diagonal gegenüberliegende Anschlüsse benutzen, Das funktioniert dann, egal wie Du den Taster einsteckst.

Willkommen im Forum,
schau mall hier:

Dort hat @noiasca schön alles beschrieben sogar daine Ampel ist da

Moin @justknoxyk ,

Vorgeplänkel:

damit wir Deinen Code komplett lesen und bewerten können, mache bitte Folgendes:

  • Arduino IDE öffnen und Deinen Sketch laden
  • In der Menüleiste "Edit"
    • Einmal "Auto Format" durchführen
    • Danach "Copy for Forum..."
  • Den so formatierten Code hier in einen Post einfügen

Das Ergebnis sieht dann so aus:

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

Alternativ kannst Du nach dem Formatieren den Code auch mit der Copy-Funktion in die Zwischenablage bringen. Dann musst Du im Post Editor selbst Code-Tags erzeugen und den Sketch innerhalb dieser Tags einfügen. Die Code Tags erzeugt man mit diesem Button

image

Wenn es für Deine Verdrahtung eine Vorlage im Netz gibt, hilft es schon diese zu verlinken. Ansonsten gerne auch eine handschriftliche Zeichnung erstellen und posten; das ist weit besser als Fotos, zumal man bei Deinem Foto einen Teil der Verdrahtung "erahnen" muss ... :slight_smile:

Zu Deinem Sketch

Was so schon sichtbar ist, sind die delay()-Aufrufe mit Wartezeiten von z.T. 5 und 10 Sekunden.

In dieser Zeit kann man auf dem Taster, selbst wenn er bestmöglich angeschlossen ist, herumdrücken, soviel man will. Das wird alles komplett ignoriert ... weil der Controller nichts davon mitbekommt. Delay heißt für ihn: Däumchendrehen und ggf. noch Interrupts abarbeiten ...

Der arme Fussgänger muss den Knopf die ganze Zeit drücken, bis der "Normalbetrieb" einmal kurz wieder in die loop() zurückkehrt, um ansonsten gleich blitzschnell wieder in den (mindestens 15 sekündigen) "Normalbetrieb" zu verschwinden ...

Das "Problem" sind die vielen Ampelbeispiele, die für eine stumpfe Steuerung ohne externen Einfluss genügen, aber jede Reaktion auf einen externen Impuls de meiste Zeit ignorieren.

Die Lösung ist, die delays() durch sogenannten millis()-Funktionen (eine zeitabhängige Steuerung des Ablaufs) zu ersetzen und die Abarbeitung der Ampel in Form einer sogenannten "state machine" umzusetzen.

Das klingt erst einmal verwirrend, lässt sich aber erlernen ... :slight_smile:

Und wenn man's drauf hat, kann man mit diesen Prinzipien vieles lösen, was ansonsten "Kopfschmerzen" bereitet ...

Ich suche mal nach ein paar Beispielen zum Lernen, ok?

Gruß
ec2021

Hier ein ganz einfaches Beispiel mit Erläuterungen zum Einsatz von millis():

https://wokwi.com/projects/360903822433974273

und hier ein Beispiel, speziell für Dich:

/*
  Forum:https://forum.arduino.cc/t/kann-mir-jemand-sagen-warum-der-button-nicht-funktioniert/1446985/5
  Wokwi:https://wokwi.com/projects/465825401866695681

  ec2021

  Ampel-Statemachine mit Fussgänger-Taste
  Hier: Keine Led, nur Serielle Textausgabe

*/

enum class Phase {ROT, ROT_GELB, GRUEN, GELB};
constexpr unsigned long GruenDauer   {5000};
constexpr unsigned long GelbDauer    {3000};
constexpr unsigned long RotDauer     {5000};
constexpr unsigned long RotGelbDauer {3000};
constexpr byte tasterPin {2};

Phase AmpelPhase;
unsigned long phasenStart = 0;
boolean tasteGedrueckt = false;

void setup() {
  Serial.begin(115200);
  pinMode(tasterPin, INPUT_PULLUP);
  // StartBedingungen setzen:

  phasenStart = millis();
  Serial.println("Grün");
  AmpelPhase = Phase::GRUEN;

}

void loop() {
  AmpelMaschine();
}

void AmpelMaschine() {
  switch (AmpelPhase) {
    case Phase::ROT:
      if (millis() - phasenStart > RotDauer) {
        AmpelPhase = Phase::ROT_GELB;
        Serial.println("Rot Gelb");
        phasenStart = millis();
      }
      break;
    case Phase::ROT_GELB:
      if (millis() - phasenStart > RotGelbDauer) {
        AmpelPhase = Phase::GRUEN;
        Serial.println("Grün");
        phasenStart = millis();
      }
      break;
    case Phase::GRUEN:
      TasterAbfrage();
      if (millis() - phasenStart > GruenDauer || tasteGedrueckt) {
        tasteGedrueckt = false;
        AmpelPhase = Phase::GELB;
        Serial.println("Gelb");
        phasenStart = millis();
      }
      break;
    case Phase::GELB:
      if (millis() - phasenStart > GelbDauer) {
        AmpelPhase = Phase::ROT;
        Serial.println("Rot");
        phasenStart = millis();
      }
      break;
  }
}
void TasterAbfrage() {
  if (digitalRead(tasterPin) == LOW) {
    tasteGedrueckt = true;
    delay(30); // Einfaches "Debouncen", 30 ms sind hier zu verkraften ;-)
  }

}

Zum Ausprobieren und Erweitern auf Wokwi: https://wokwi.com/projects/465825401866695681

Viel Spaß!
ec2021

grafik

Das ist falsch, Dein Code compiliert nicht.

Richtich:
grafik

Und wenn Du Deinen bis zr Unkenntlichkeit verstümmelten Screenshot durch echten Code ersetzt, wird Dir auch bestimmt die Lösung gezeigt.

Die Tasterabfrage allein in die Grünphase zu legen ist ungeschickt.

Auch das || würde ich gegen ein && tauschen.
Sonst hast Du den Effekt, dass bei Tastendruck das grün nur für Flugtaxis reicht, die sowieso im Anflug sind.
Wenn man das weiter denkt, kommt noch ein Step dazu.
Mir war grad so. :wink:

/*
  Forum:https://forum.arduino.cc/t/kann-mir-jemand-sagen-warum-der-button-nicht-funktioniert/1446985/7

  based on: 
  Wokwi:https://wokwi.com/projects/465825401866695681
  ec2021


  Ampel-Statemachine mit Fussgänger-Taste
  Hier: Keine Led, nur Serielle Textausgabe

*/

enum class Phase {ROT, ROT_GELB, GRUEN, GRUENSIGNAL, GELB};
constexpr unsigned long minGruenDauer {3000};
constexpr unsigned long GruenDauer{2000};       
constexpr unsigned long GelbDauer {3000};
constexpr unsigned long RotDauer {5000};
constexpr unsigned long RotGelbDauer {3000};
constexpr byte tasterPin {2};

Phase AmpelPhase;
unsigned long phasenStart = 0;
boolean tasteGedrueckt = false;

void setup()
{
  Serial.begin(115200);
  pinMode(tasterPin, INPUT_PULLUP);
  // StartBedingungen setzen:
  phasenStart = millis();
  Serial.println("Grün");
  AmpelPhase = Phase::GRUEN;
}

void loop()
{
  TasterAbfrage();
  AmpelMaschine();
}

void AmpelMaschine()
{
  switch (AmpelPhase)
  {
    case Phase::ROT:
      if (millis() - phasenStart > RotDauer)
      {
        AmpelPhase = Phase::ROT_GELB;
        Serial.println("Rot Gelb");
        phasenStart = millis();
      }

      break;

    case Phase::ROT_GELB:
      if (millis() - phasenStart > RotGelbDauer)
      {
        AmpelPhase = Phase::GRUEN;
        Serial.println("Grün");
        phasenStart = millis();
      }

      break;

    case Phase::GRUEN:
      if ((tasteGedrueckt == true) || (millis() - phasenStart > minGruenDauer))
      {
        AmpelPhase = Phase::GRUENSIGNAL;

        if (tasteGedrueckt != true)
        { Serial.println(F("Zwangsweise: Signal kommt")); }

        phasenStart = millis();
      }

      break;

    case Phase::GRUENSIGNAL:
        if (millis() - phasenStart > GruenDauer)
        {
          tasteGedrueckt = false;
          AmpelPhase = Phase::GELB;
          Serial.println("Gelb");
          phasenStart = millis();
        }

      break;

    case Phase::GELB:
      if (millis() - phasenStart > GelbDauer)
      {
        AmpelPhase = Phase::ROT;
        Serial.println("Rot");
        phasenStart = millis();
      }

      break;
  }
}
void TasterAbfrage()
{
  if (digitalRead(tasterPin) == LOW)
  {
    if (tasteGedrueckt != true)
    {
      Serial.println(F("Signal kommt"));
      tasteGedrueckt = true;
      //delay(30); // Einfaches "Debouncen", 30 ms sind hier zu verkraften ;-)
    }
  }
}

HIer ist es wieder || weil die zwei Zeiten sich addieren :-)

Sollte er schon... nur passiert nichts mit dem Funktionspointer was dem Compiler zumindest eine Warnung Wert sein sollte.

@justknoxyk bitte poste

  • Code als Text
  • einen Schaltplan

Kannst du einmal beschreiben wie die Ampelschaltung funktionieren soll?
Hast du dich schon mal mit nicht blockierender Programmierung und Zustandsautomaten beschäftigt?

Gut erkannt (wie immer) :slight_smile: Die Tasterabfrage habe ich in diesem Beispiel tatsächlich in die Grünphase der Fahrzeuge gelegt, damit der unmittelbare Eingriff nur in dieser Phase zuschlägt (und mir gerade die Zeit weglief; das Beispiel habe ich etwas eilig aus dem Ärmel geschüttelt, siehst Du auch an dem simplen Debouncing und den Code-Wiederholungen der millis() Funktionen, die quasi nach einer separaten Funktion schreien) ...

Schon klar, dass dadurch Tasteneingaben während der übrigen Phasen ignoriert werden.

Für eine sachgerechte Ampelsteuerung muss man natürlich jederzeit den Tastendruck erkennen.

Wie die weitere Umsetzung dann aussieht, hängt von der gewünschten Gesamtfunktion ab:

  • Standardampel-Ablauf mit zeitlicher Verkürzung der betroffenen Grünphase wenn Taster betätigt wurde
  • Bedarfsampel, die für Fahrzeuge grundsätzlich oder zumindest sehr lange Grün zeigt und nur bei Bedarf einmal innerhalb eines bestimmten Zeitintervalls auf Rot schaltet

Ich hoffe jedenfalls, dass der grundsätzlichen Aufbau so für unseren Thread Owner nachvollziehbar ist, auch wenn an den Details noch zu feilen sein wird...

So und hier drei weiter geführte Sketche zum Anschauen:

textAmpel I
/*
  Forum:https://forum.arduino.cc/t/kann-mir-jemand-sagen-warum-der-button-nicht-funktioniert/1446985/5
  Wokwi:https://wokwi.com/projects/465893371924846593

  ec2021

  Ampel-Statemachine mit Fussgänger-Taste, die unabhängig von den Phasen abgefragt wird
  beim Übergang von der Grün-Phase in die Gelb-Phase werden aller vorherigen 
  Tasteneingaben verworfen
  
  Hier: Keine Led, nur Serielle Textausgabe

*/

enum class Phase {ROT, ROT_GELB, GRUEN, GELB};
constexpr unsigned long GruenStandard  {10000};
constexpr unsigned long GruenVerkuerzt { 3000};
constexpr unsigned long GelbDauer      { 3000};
constexpr unsigned long RotDauer       { 5000};
constexpr unsigned long RotGelbDauer   { 3000};
constexpr byte tasterPin {2};

Phase AmpelPhase;
unsigned long phasenStart = 0;
boolean tasteGedrueckt = false;

void setup() {
  Serial.begin(115200);
  pinMode(tasterPin, INPUT_PULLUP);
  // StartBedingungen setzen:

  phasenStart = millis();
  Serial.println("Grün");
  AmpelPhase = Phase::GRUEN;

}

void loop() {
  TasterAbfrage();
  AmpelMaschine();
}

void AmpelMaschine() {
  switch (AmpelPhase) {
    case Phase::ROT:
      if (millis() - phasenStart > RotDauer) {
        AmpelPhase = Phase::ROT_GELB;
        Serial.println("Rot Gelb");
        phasenStart = millis();
      }
      break;
    case Phase::ROT_GELB:
      if (millis() - phasenStart > RotGelbDauer) {
        AmpelPhase = Phase::GRUEN;
        Serial.println("Grün");
        phasenStart = millis();
      }
      break;
    case Phase::GRUEN:
      if (millis() - phasenStart > ((tasteGedrueckt) ? GruenVerkuerzt : GruenStandard)) {
        // Hier wird der Tasten-Status zurückgesetzt, unabhängig davon, ob die
        // nun folgende Phase aus Zeit- oder aus Tastengründen eingeleitet wurde.
        // Damit verfallen hier alle vor und während der Grünphase getätigten
        // Tasteneingaben
        tasteGedrueckt = false;
        AmpelPhase = Phase::GELB;
        Serial.println("Gelb");
        phasenStart = millis();
      }
      break;
    case Phase::GELB:
      if (millis() - phasenStart > GelbDauer) {
        AmpelPhase = Phase::ROT;
        Serial.println("Rot");
        phasenStart = millis();
      }
      break;
  }
}
void TasterAbfrage() {
  if (digitalRead(tasterPin) == LOW) {
    tasteGedrueckt = true;
    delay(30); // Einfaches "Debouncen", 30 ms sind hier zu verkraften ;-)
  }

}

/*
      Die Zeile

      if (millis() - phasenStart > ((tasteGedrueckt) ? GruenVerkuerzt : GruenStandard)) {...}

      könnte man auch so schreiben

      unsigned long dauer;
      if (tasteGedrueckt)  {
        dauer = GruenVerkuerzt;
      } else {
        dauer = GruenStandard;
      }
      if (millis() - phasenStart > dauer) {...}
*/

siehe https://wokwi.com/projects/465893371924846593

textAmpel II
/*
  Forum:https://forum.arduino.cc/t/kann-mir-jemand-sagen-warum-der-button-nicht-funktioniert/1446985/5
  Wokwi:https://wokwi.com/projects/465894655305497601

  ec2021

  Ampel-Statemachine mit Fussgänger-Taste, die unabhängig von den Phasen abgefragt wird
  beim Übergang von der Grün-Phase in die Gelb-Phase werden aller vorherigen
  Tasteneingaben verworfen

  Hier: Keine Led, nur Serielle Textausgabe

*/

enum class Phase {ROT, ROT_GELB, GRUEN, GELB};
constexpr unsigned long GruenStandard  {10000};
constexpr unsigned long GruenVerkuerzt { 3000};
constexpr unsigned long GelbDauer      { 3000};
constexpr unsigned long RotDauer       { 5000};
constexpr unsigned long RotGelbDauer   { 3000};
constexpr byte tasterPin {2};

Phase AmpelPhase;
unsigned long phasenStart = 0;
boolean tasteGedrueckt = false;

void setup() {
  Serial.begin(115200);
  pinMode(tasterPin, INPUT_PULLUP);
  // StartBedingungen setzen:
  phasenWechsel(Phase::GRUEN, "Grün");
}

void loop() {
  TasterAbfrage();
  AmpelMaschine();
}

void AmpelMaschine() {
  switch (AmpelPhase) {
    case Phase::ROT:
      if (zeitAbgelaufen(RotDauer)) {
        phasenWechsel(Phase::ROT_GELB, "Rot Gelb");
      }
      break;
    case Phase::ROT_GELB:
      if (zeitAbgelaufen(RotGelbDauer)) {
        phasenWechsel(Phase::GRUEN, "Grün");
      }
      break;
    case Phase::GRUEN:
      if (zeitAbgelaufen((tasteGedrueckt) ? GruenVerkuerzt : GruenStandard)) {
        // Hier wird der Tasten-Status zurückgesetzt, unabhängig davon, ob die
        // nun folgende Phase aus Zeit- oder aus Tastengründen eingeleitet wurde.
        // Damit verfallen hier alle vor und während der Grünphase getätigten
        // Tasteneingaben
        tasteGedrueckt = false;
        phasenWechsel(Phase::GELB, "Gelb");
      }
      break;
    case Phase::GELB:
      if (zeitAbgelaufen(GelbDauer)) {
        phasenWechsel(Phase::ROT, "Rot");
      }
      break;
  }
}
void TasterAbfrage() {
  if (digitalRead(tasterPin) == LOW) {
    tasteGedrueckt = true;
    delay(30); // Einfaches "Debouncen", 30 ms sind hier zu verkraften ;-)
  }
}

void phasenWechsel(Phase naechstePhase, char * txt) {
  AmpelPhase = naechstePhase;
  Serial.println(txt);
  phasenStart = millis();
}

boolean zeitAbgelaufen(unsigned long intervall) {
  return (millis() - phasenStart > intervall);

}

siehe https://wokwi.com/projects/465894655305497601

textAmpel III
/*
  Forum:https://forum.arduino.cc/t/kann-mir-jemand-sagen-warum-der-button-nicht-funktioniert/1446985/5
  Wokwi:https://wokwi.com/projects/465896081261023233

  ec2021

  Ampel-Statemachine mit Fussgänger-Taste, die unabhängig von den Phasen abgefragt wird
  beim Übergang von der Grün-Phase in die Gelb-Phase werden aller vorherigen
  Tasteneingaben verworfen

  Hier: Keine Led, nur Serielle Textausgabe
  Allerdings zeigt diese Version auch die Dauer der letzten Phase an

*/

enum class Phase {ROT, ROT_GELB, GRUEN, GELB, UNBEKANNT};
constexpr unsigned long GruenStandard  {10000};
constexpr unsigned long GruenVerkuerzt { 3000};
constexpr unsigned long GelbDauer      { 3000};
constexpr unsigned long RotDauer       { 5000};
constexpr unsigned long RotGelbDauer   { 3000};
constexpr byte tasterPin {2};

Phase AmpelPhase = Phase::UNBEKANNT;
unsigned long phasenStart = 0;
boolean tasteGedrueckt = false;

void setup() {
  Serial.begin(115200);
  pinMode(tasterPin, INPUT_PULLUP);
  delay(10);
  // StartBedingungen setzen:
  phasenWechsel(Phase::GRUEN, "Grün");
}

void loop() {
  TasterAbfrage();
  AmpelMaschine();
}

void AmpelMaschine() {
  switch (AmpelPhase) {
    case Phase::ROT:
      if (zeitAbgelaufen(RotDauer)) {
        phasenWechsel(Phase::ROT_GELB, "RotGelb");
      }
      break;
    case Phase::ROT_GELB:
      if (zeitAbgelaufen(RotGelbDauer)) {
        phasenWechsel(Phase::GRUEN, "Grün");
      }
      break;
    case Phase::GRUEN:
      if (zeitAbgelaufen((tasteGedrueckt) ? GruenVerkuerzt : GruenStandard)) {
        // Hier wird der Tasten-Status zurückgesetzt, unabhängig davon, ob die
        // nun folgende Phase aus Zeit- oder aus Tastengründen eingeleitet wurde.
        // Damit verfallen hier alle vor und während der Grünphase getätigten
        // Tasteneingaben
        tasteGedrueckt = false;
        phasenWechsel(Phase::GELB, "Gelb");
      }
      break;
    case Phase::GELB:
      if (zeitAbgelaufen(GelbDauer)) {
        phasenWechsel(Phase::ROT, "Rot");
      }
      break;
  }
}
void TasterAbfrage() {
  if (digitalRead(tasterPin) == LOW) {
    tasteGedrueckt = true;
    delay(30); // Einfaches "Debouncen", 30 ms sind hier zu verkraften ;-)
  }
}

void phasenWechsel(Phase naechstePhase, char * txt) {
  if (AmpelPhase != Phase::UNBEKANNT) {
    if (AmpelPhase == Phase::ROT_GELB) {
      Serial.print(": ");
    } else {
      Serial.print(":\t ");
    };
    Serial.print((millis() - phasenStart) / 1000);
    Serial.println(" s");
  }
  AmpelPhase = naechstePhase;
  Serial.print(txt);
  phasenStart = millis();
}

boolean zeitAbgelaufen(unsigned long intervall) {
  return (millis() - phasenStart > intervall);

}

siehe https://wokwi.com/projects/465896081261023233

Die wesentlichen Eigenschaften:

  • textAmpel I berücksichtigt das jederzeitige Betätigen der Taste und verkürzt ggf. die Gründauer
  • textAmpel II - wie tecxtAmpel I - aber es zeigt, wie man wiederkehrenden Code in eine Funktion auslagern kann; das verbessert Lesbarkeit und die vereinfacht Pflege und Weiterführung des Programms, da Änderungen an der (aus loop() ) ausgelagerten Funktion sofort überall dort greifen, wo diese eingesetzt wird
  • textAmpel III - wie textAmpel II mit zusätzlicher Ausgabe der Dauer der gerade absolvierten Phase

Du kannst die Beispiele nehmen und z.B. an den entsprechenden Stellen der AmpelMaschine die passenden Led der Ampel ein- bzw. ausschalten.

Viel Spaß!
ec2021

Das macht eine Standard-SIEMENS Steuerung auch nicht :sweat_smile:

Immerhin ist da ein Feedback "Signal kommt. Bitte warten" vorhanden, das dann auch nicht kommt :rofl:

Generell ist der Sinn solcher Ampel-Sketche ja nicht, eine Ampel zu schalten, sondern dem angehenden Programmierer zu zeigen, wie kompliziert solch eine einfache Aufgabe ist.

Wenn @my_xy_projekt oder ich eine Ampelsteuerung programmieren, ist das natürlich besser gelöst ... :slight_smile:

Scherz beiseite:

Man muss bei einer konkreten Ampel natürlich entscheiden, zu welchem Zeitpunkt sich der Tastendruck auswirken darf, um ein kontinuierliches Blockieren zu vermeiden.

Die einfachste Lösung - vor allem bei einer Bedarfsampel - ist es, die Taste nur während der Grünphase auszuwerten und diese dann sofort zu beenden. In allen anderen Phasen ist die Bestätigung auch weniger sinnvoll. Ggf. würde man vermutlich eine Verzögerung einbauen, damit nicht sofort wieder blockiert wird.

Die jetzt programmierte kontinuierliche Zeitsteuerung registriert grundsätzlich immer einen Tastendruck und reduziert die Dauer der Grünphase, wobei die Tasteneingabe mit Ende der laufenden Grünphase gelöscht wird. Das ist m.E. vollkommen ok, da nach der Grünphase ja eh umgehend eine Rotphase folgt, die genutzt werden kann.

?????

Das bezieht sich auf den Code:

Wenn die Grünphase verlassen wird, kann man die vorherige Tastenbetätigung löschen. Sie muss nicht mehr ausgewertet werden, da dann nach kurzer Gelbphase die gewünschte Rotphase folgt.

Bei einer kompletten Ampelsteuerung inklusive Fußgängerampel würde man Tastenbetätigungen vermutlich sowieso nur dann akzeptieren, wenn das Fußgängersignal Rot anzeigt und als positive Rückmeldung "Signal kommt" anzeigen (oder eben nicht während noch Fußgänger-Grün leuchtet).

OK Verstehe ;)

Die Richtlinien für Lichtsignalanlagen kann man hier

https://www.fgsv-verlag.de/rilsa

für schlappe 84 Euro erwerben...

Ein PDF mit Änderungen ist kostenlos verfügbar. Dort kann man sich ein Bild von der Akribie machen, mit der die Vorgaben für die Abläufe dort bis ins kleinste Detail dokumentiert sind.

Da steckt Know-how und Erfahrung drin ...

Für unsere Zwecke reicht aber eine kleine State Machine...

Kann ich ggfls. besorgen - Bin ja Zugangsberechtigt bei der HTW-Biblio :slight_smile:

Das wäre mir neu.
Dass die Taster, bzw. die berührungslosen Handaufleger nicht funktionieren, schon eher.
Aber: wenn Du unten drunter greifst, gibt es einen mechanischen Taster, den Du nach oben drücken kannst :-)

Dan sollte zu 100% Radau machen, bei mir ist eine Ampel für Seh und Hörbehinderte die macht wirklich Radau

Bei denen, wo ein Akustik-Geber dran ist piepen die mächtig, aber der Taster löst auch aus wenn die Ampeln ohne die Dinger ausgestattet sind.

Ich kenn sogar mindestens 2, da ist die Grünphase länger wenn die von unten gedrückt werden.