Wech­sel­b­lin­ker

Ardui­no UNO

int GELB_L= 7;
int GELB_R = 5;

void setup() 
{
  pinMode(GELB_L, OUTPUT);
  pinMode(GELB_R, OUTPUT);
}

void loop()
{
  digitalWrite(GELB_L, HIGH);  // Schritt 1
  digitalWrite(GELB_R, LOW);   // Schritt 2
  delay(1000);                 // Schritt 3
  digitalWrite(GELB_L, LOW);   // Schritt 4
  digitalWrite(GELB_R, HIGH);  // Schritt 5
  delay(1000);                 // Schritt 6
}

ESP32-Wroom

int GELB_L = 26;
int GELB_R = 27;

void setup() 
{
  pinMode(GELB_L, OUTPUT);
  pinMode(GELB_R, OUTPUT);
}

void loop()
{
  digitalWrite(GELB_L, HIGH);  // Schritt 1
  digitalWrite(GELB_R, LOW);   // Schritt 2
  delay(1000);                 // Schritt 3
  digitalWrite(GELB_L, LOW);   // Schritt 4
  digitalWrite(GELB_R, HIGH);  // Schritt 5
  delay(1000);                 // Schritt 6
}

Wemos D1 Mini

Zwei Ampeln

// linke Ampel
int ROT_L = 8;
int GELB_L = 9;
int GRUEN_L = 10;

// rechte Ampel
int ROT_R = 5;
int GELB_R = 6;
int GRUEN_R = 7;

void setup() 
{
  pinMode(ROT_L, OUTPUT);
  pinMode(GELB_L, OUTPUT);
  pinMode(GRUEN_L, OUTPUT);
  pinMode(ROT_R, OUTPUT);
  pinMode(GELB_R, OUTPUT);
  pinMode(GRUEN_R, OUTPUT);
}

void loop()
{
  // beim Start zeigen beide Ampeln rot
  digitalWrite(ROT_L, HIGH);
  digitalWrite(ROT_R, HIGH);

  // 1 Sekunde Sicherheitszone
  delay(1000);

  // linke Ampel wird über rot/gelb auf grün geschaltet
  // GELB_L -> an, 1 Sekunde warten, GELB_L -> aus, ROT_L -> aus, GRUEN_L -> an
  digitalWrite(GELB_L, HIGH);
  delay(1000);
  digitalWrite(GELB_L, LOW);
  digitalWrite(ROT_L, LOW);
  digitalWrite(GRUEN_L, HIGH);
  delay(5000);

  // linke Ampel wird von grün -> gelb auf rot geschaltet  
  // GRUEN_L -> aus, GELB_L -> an, 1 Sekunde warten, GELB_L aus, ROT_L -> an
  digitalWrite(GRUEN_L, LOW);
  digitalWrite(GELB_L, HIGH);
  delay(1000);
  digitalWrite(GELB_L, LOW);
  digitalWrite(ROT_L, HIGH);

  // 1 Sekunde Sicherheitszone, beide Ampeln bleiben rot
  delay(1000);

  // rechte Ampel über rot-gelb auf grün schalten
  // GELB_R -> an, 1 Sekunde warten, GELB_R -> aus, ROT_R -> aus, GRUEN_R -> an
  digitalWrite(GELB_R, HIGH);
  delay(1000);
  digitalWrite(GELB_R, LOW);
  digitalWrite(ROT_R, LOW);
  digitalWrite(GRUEN_R, HIGH);
  delay(5000);

  // rechte Ampel wird von grün -> gelb auf rot geschaltet  
  // GRUEN_R -> aus, GELB_R -> an, 1 Sekunde warten, GELB_R aus,loop beginnt von vornan
  digitalWrite(GRUEN_R, LOW);
  digitalWrite(GELB_R, HIGH);
  delay(1000);
  digitalWrite(GELB_R, LOW);
}

Letzte Aktualisierung:

Ampel

Ardui­no UNO

int ROT = 5;
int GELB = 6;
int GRUEN = 7;

void setup() 
{
  pinMode(ROT, OUTPUT);
  pinMode(GELB, OUTPUT);
  pinMode(GRUEN, OUTPUT);
}

void loop()
{
  digitalWrite(ROT, HIGH);   // Schritt  1
  digitalWrite(GELB, LOW);   // Schritt  2
  delay(5000);               // Schritt  3
  digitalWrite(GELB, HIGH);  // Schritt  4
  delay(1000);               // Schritt  5
  digitalWrite(ROT, LOW);    // Schritt  6
  digitalWrite(GELB, LOW);   // Schritt  7
  digitalWrite(GRUEN, HIGH); // Schritt  8
  delay(3000);               // Schritt  9
  digitalWrite(GRUEN, LOW);  // Schritt 10
  digitalWrite(GELB, HIGH);  // Schritt 11
  delay(1000);               // Schritt 12
}

Wemos D1 Mini

int ROT = D5;
int GELB = D6;
int GRUEN = D7;

void setup() 
{
  pinMode(ROT, OUTPUT);
  pinMode(GELB, OUTPUT);
  pinMode(GRUEN, OUTPUT);
}

void loop()
{
  digitalWrite(ROT, HIGH);   // Schritt  1
  digitalWrite(GELB, LOW);   // Schritt  2
  delay(5000);               // Schritt  3
  digitalWrite(GELB, HIGH);  // Schritt  4
  delay(1000);               // Schritt  5
  digitalWrite(ROT, LOW);    // Schritt  6
  digitalWrite(GELB, LOW);   // Schritt  7
  digitalWrite(GRUEN, HIGH); // Schritt  8
  delay(3000);               // Schritt  9
  digitalWrite(GRUEN, LOW);  // Schritt 10
  digitalWrite(GELB, HIGH);  // Schritt 11
  delay(1000);               // Schritt 12
}

ESP32-Wroom

int ROT = 26;
int GELB = 27;
int GRUEN = 14;

void setup() 
{
  pinMode(ROT, OUTPUT);
  pinMode(GELB, OUTPUT);
  pinMode(GRUEN, OUTPUT);
}

void loop()
{
  digitalWrite(ROT, HIGH);   // Schritt  1
  digitalWrite(GELB, LOW);   // Schritt  2
  delay(5000);               // Schritt  3
  digitalWrite(GELB, HIGH);  // Schritt  4
  delay(1000);               // Schritt  5
  digitalWrite(ROT, LOW);    // Schritt  6
  digitalWrite(GELB, LOW);   // Schritt  7
  digitalWrite(GRUEN, HIGH); // Schritt  8
  delay(3000);               // Schritt  9
  digitalWrite(GRUEN, LOW);  // Schritt 10
  digitalWrite(GELB, HIGH);  // Schritt 11
  delay(1000);               // Schritt 12
}

Letzte Aktualisierung:

Ampel mit Fuß­gän­ger­am­pel und Taster

// Fahrbahnampel
int ROT = 3;
int GELB = 4;
int GRUEN = 5;

// Fußgängerampel
int F_ROT = 6;
int F_GRUEN = 7;

// Taster
int TASTER = 12;

// Status des Taster
int TasterLesen;

void setup()
{
  // Fahrbahnampel
  pinMode(ROT, OUTPUT);
  pinMode(GELB, OUTPUT);
  pinMode(GRUEN, OUTPUT);

  // Fußgängerampel
  pinMode(F_ROT, OUTPUT);
  pinMode(F_GRUEN, OUTPUT); 
 
  // Taster
  pinMode(TASTER, INPUT_PULLUP);
}

void loop()
{
  // Ampel grün/Fußgängerampel rot
  digitalWrite(F_ROT, HIGH);
  digitalWrite(GRUEN, HIGH);

  // Zustand des Tasters lesen 
  TasterLesen = digitalRead(TASTER);
  delay(200);
 
  // PULLUP-Widerstand eingeschaltet-> LOW = Taster gedrückt
  if (TasterLesen == LOW)
  {
    // 1 s Pause
    delay(1000);

    // Fahrbahnampel grün aus
    digitalWrite(GRUEN, LOW);

    // Fahrbahnampel gelb an 
    digitalWrite(GELB, HIGH);
    delay(1000);
    digitalWrite(GELB, LOW);

    // Fahrbahnampel rot an
    digitalWrite(ROT, HIGH); 

    // 1 s Sicherheitszeit 
    delay(1000); 

    // Fußgängerampel auf grün schalten 
    digitalWrite(F_ROT, LOW);
    digitalWrite(F_GRUEN, HIGH);
    delay(5000); 

    // Fußgängerampel auf rot schalten
    digitalWrite(F_GRUEN, LOW);
    digitalWrite(F_ROT, HIGH);

    // 1 s Pause
    delay(1000);

    // Fahrbahnampel auf gelb und dann auf rot schalten
    digitalWrite(GELB, HIGH);
    delay(1000);
    digitalWrite(ROT, LOW);
    digitalWrite(GELB, LOW);
  }
}

Letzte Aktualisierung:

Ampel mit Fußgängerampel

Ardui­no UNO

int ROT = 3;
int GELB = 4;
int GRUEN = 5;
int F_ROT = 6;
int F_GRUEN = 7;

void setup() 
{
  pinMode(ROT, OUTPUT);
  pinMode(GELB, OUTPUT);
  pinMode(GRUEN, OUTPUT);
  pinMode(F_ROT, OUTPUT);
  pinMode(F_GRUEN, OUTPUT);
}

void loop() 
{ 
  digitalWrite(ROT, HIGH);
  digitalWrite(F_ROT, HIGH);

  // 1 Sekunde Sicherheitszone 
  delay(1000);
  
  // Fußgängerampel wird von rot auf grün geschaltet       
  digitalWrite(F_ROT, LOW);
  digitalWrite(F_GRUEN, HIGH);
  delay(3000);

  // Fußgängerampel wird von grün auf rot geschaltet
  // F_GRUEN -> aus, F_ROT -> an
  digitalWrite(F_GRUEN, LOW);
  digitalWrite(F_ROT, HIGH);

  // 1 Sekunde Sicherheitszone, beide Ampeln bleiben rot  
  delay(1000);

  // Fahrbahnampel auf rot-gelb und dann auf grün schalten
  // GELB -> an, 1 Sekunde warten, GELB und ROT -> aus, GRUEN -> an 
  digitalWrite(GELB, HIGH); 
  delay(1000); 
  digitalWrite(ROT, LOW);  
  digitalWrite(GELB, LOW); 
  digitalWrite(GRUEN, HIGH);

  // GRUEN -> 5 Sekunden, GRUEN -> aus, GELB 1 Sekunde an,
  // GELB aus 
  delay(3000);
  digitalWrite(GRUEN, LOW);
  digitalWrite(GELB, HIGH); 
  delay(1000);
  digitalWrite(GELB, LOW);
}

Wemos D1 Mini

int ROT = D5;
int GELB = D6;
int GRUEN = D7;
int F_ROT = D1;
int F_GRUEN = D2;

void setup() 
{
  pinMode(ROT, OUTPUT);
  pinMode(GELB, OUTPUT);
  pinMode(GRUEN, OUTPUT);
  pinMode(F_ROT, OUTPUT);
  pinMode(F_GRUEN, OUTPUT);
}

void loop() 
{ 
  digitalWrite(ROT, HIGH);
  digitalWrite(F_ROT, HIGH);

  // 1 Sekunde Sicherheitszone 
  delay(1000);
  
  // Fußgängerampel wird von rot auf grün geschaltet       
  digitalWrite(F_ROT, LOW);
  digitalWrite(F_GRUEN, HIGH);
  delay(3000);

  // Fußgängerampel wird von grün auf rot geschaltet
  // F_GRUEN -> aus, F_ROT -> an
  digitalWrite(F_GRUEN, LOW);
  digitalWrite(F_ROT, HIGH);

  // 1 Sekunde Sicherheitszone, beide Ampeln bleiben rot  
  delay(1000);

  // Fahrbahnampel auf rot-gelb und dann auf grün schalten
  // GELB -> an, 1 Sekunde warten, GELB und ROT -> aus, GRUEN -> an 
  digitalWrite(GELB, HIGH); 
  delay(1000); 
  digitalWrite(ROT, LOW);  
  digitalWrite(GELB, LOW); 
  digitalWrite(GRUEN, HIGH);

  // GRUEN -> 5 Sekunden, GRUEN -> aus, GELB 1 Sekunde an,
  // GELB aus 
  delay(3000);
  digitalWrite(GRUEN, LOW);
  digitalWrite(GELB, HIGH); 
  delay(1000);
  digitalWrite(GELB, LOW);
}

ESP32-Wroom

int ROT = 26;
int GELB = 27;
int GRUEN = 14;
int F_ROT = 13;
int F_GRUEN = 12;

void setup() 
{
  pinMode(ROT, OUTPUT);
  pinMode(GELB, OUTPUT);
  pinMode(GRUEN, OUTPUT);
  pinMode(F_ROT, OUTPUT);
  pinMode(F_GRUEN, OUTPUT);
}

void loop() 
{ 
  digitalWrite(ROT, HIGH);
  digitalWrite(F_ROT, HIGH);

  // 1 Sekunde Sicherheitszone 
  delay(1000);
  
  // Fußgängerampel wird von rot auf grün geschaltet       
  digitalWrite(F_ROT, LOW);
  digitalWrite(F_GRUEN, HIGH);
  delay(3000);

  // Fußgängerampel wird von grün auf rot geschaltet
  // F_GRUEN -> aus, F_ROT -> an
  digitalWrite(F_GRUEN, LOW);
  digitalWrite(F_ROT, HIGH);

  // 1 Sekunde Sicherheitszone, beide Ampeln bleiben rot  
  delay(1000);

  // Fahrbahnampel auf rot-gelb und dann auf grün schalten
  // GELB -> an, 1 Sekunde warten, GELB und ROT -> aus, GRUEN -> an 
  digitalWrite(GELB, HIGH); 
  delay(1000); 
  digitalWrite(ROT, LOW);  
  digitalWrite(GELB, LOW); 
  digitalWrite(GRUEN, HIGH);

  // GRUEN -> 5 Sekunden, GRUEN -> aus, GELB 1 Sekunde an,
  // GELB aus 
  delay(3000);
  digitalWrite(GRUEN, LOW);
  digitalWrite(GELB, HIGH); 
  delay(1000);
  digitalWrite(GELB, LOW);
}

Letzte Aktualisierung:

Voll­kom­me­ne Zahlen

bool Stopp = true;

void setup()
{
  // Seriellen Monitor starten
  Serial.begin(9600);

  // auf serielle Verbindung warten
  while (!Serial) {;}

  Serial.println("Die ersten 4 vollkommenen Zahlen:");
  Serial.println("---------------------------------");
}

bool Primzahl(float Zahl)
{
  // zum Testen nach int umwandeln
  int PruefZahl = round(Zahl);

  // nur bis zur Hälfte der Eingabe prüfen
  for (int i = 2 ; i <= PruefZahl / 2 ; i++)
  {
    // Teilbarkeit mit modulo testen
    // wenn kein Rest ⇒ Eingabe ist teilbar ⇒ false zurückgeben
    if (int(PruefZahl) % i == 0) return false;
  }

  // keine Teiler gefunden -> Primzahl = true zurückgeben
  return true;
}

void loop()
{
  while (Stopp)
  {
    /*
      eine vollkommene Zahl ist die Summe ihrer Teiler
      (ausgenommen 1 und die Zahl selbst)
      die ersten 4 vollkommenen Zahlen
    */
    for (int i = 2; i < 8; i++)
    {
      /*
        Formel zur Berechnung:
        2^(i-1) * (2^i - 1)
        wobei der Wert des Terms (2^i) - 1 eine Primzahl sein muss
      */

      // Wert des Terms pow(2, i) - 1 auf Primzahl untersuchen
      bool Suche = Primzahl(pow(2, i) - 1);

      // der Wert des Terms ist eine Primzahl (Suche = true)
      // -> vollkommene Zahl gefunden
      if (Suche)
      {
        // Ergebnis ist eine Zahl vom Typ float -> muss gerundet werden
        Serial.println(round(pow(2, (i - 1)) * (pow(2, i) - 1)));
      }
    }
    Serial.println("------------------------------------");
    Stopp = false;
  }
}

Letzte Aktualisierung: