Ampelanlage für DC-Car System

Benutzeravatar
e69-fan
Beiträge: 282
Registriert: Mi 20. Jan 2021, 10:32
Wohnort: Murnau am Staffelsee

Ampelanlage für DC-Car System

Beitrag von e69-fan »

Hallo Franz,

ich habe mich mal auf Deinen Seiten mit
millis() anstelle von delay()
beschäftigt, komme aber bei einem komplexeren Ablauf nicht weiter.

Bei mir ist eine Ampelanlage in Betrieb, aber dazu müssten jetzt die "delays" verschwinden, da noch ein Hallsensor und ein Relais hinzukommen soll.
Bahnhofsampel.png

Der mittlere Teil ist eine einspurige Straße , die entweder von links nach rechts oder von rechts nach links durchfahren wird.

Omnibusse welche von der linken Seite kommen, werden von einem Hallsensor erkannt und ein Servo
lenkt den Omnibus auf die Spur "Bushalt".

Stop vor der jeweiligen "roten Ampel" erfolgt durch ein externes Infrarotsinal per Relais an das Fahrzeug.

Zur Zeit läuft folgender Sketch auf einem nano - die delays haben hier keine Auswirkung auf den Ablauf.
So, nun soll noch ein Hallsensor und ein Relais rein -

:oops: :oops: :oops:

Code: Alles auswählen

// Ampelsteuerung mit langer Rotphase für Engstelle und Verzögerung für Bus. geschaltenes Relais zum schalten der IR


// Seite 1 Bahnhof rechts
int red_1    = 4;     // Rot
int yellow_1 = 3;     // Gelb
int green_1  = 2;     // Grün


// Seite 2 Bahnhof links
int red_2    = 7;     // Rot
int yellow_2 = 6;     // Gelb
int green_2  = 5;     // Grün


// Seite 3 Busspur
int green_3  = 8;     // Grün
int yellow_3 = 9;     // Gelb
int red_3    = 10;    // Rot

// Relais
int relais_10 = 11;    // Relais Seite 1  Bahnhof rechts
int relais_11 = 12;    // Relais Seite 2a Bahnhof links
int relais_12 = 13;    // Relais Seite 2b Busspur

void setup() {


  pinMode(red_1, OUTPUT);
  pinMode(yellow_1, OUTPUT);
  pinMode(green_1, OUTPUT);


  pinMode(red_2, OUTPUT);
  pinMode(yellow_2, OUTPUT);
  pinMode(green_2, OUTPUT);


  pinMode(red_3, OUTPUT);
  pinMode(yellow_3, OUTPUT);
  pinMode(green_3, OUTPUT);



  pinMode(relais_10, OUTPUT);
  pinMode(relais_11, OUTPUT);
  pinMode(relais_12, OUTPUT);
}

void loop() {


  // A = Starteinstellung
  digitalWrite(red_1, HIGH);        // Rot auf Seite 1 Bahnhof rechts ein
  digitalWrite(relais_10, HIGH);    // An dieser Stelle würde das Relais von Seite 1 einsschalten
  digitalWrite(green_2, HIGH);      // Grün auf Seite 2a ein
  digitalWrite(relais_11, LOW);     // An dieser Stelle würde das Relais von Seite 2 ausschalten
  digitalWrite(green_3, HIGH);      // Grün auf Seite 2b Busspur ein
  digitalWrite(relais_12, LOW);     // An dieser Stelle würde das Relais von Seite 2b ausschalten

  // B = Grünphase von Seite 2a

  // -------------------------------------------------------------------------------------------
  delay(10000);               // Ampelphase mit z.B. 10 Sekunden Länge
  // -------------------------------------------------------------------------------------------


  // C = Ende der Grünphase von Seite 2b Busspur
  digitalWrite(green_3, LOW);       // Grünes Licht aus
  digitalWrite(relais_12, HIGH);    // An dieser Stelle würde das Relais von Seite 2b einsschalten
  digitalWrite(yellow_3, HIGH);     // Gelbes Licht ein

  // -------------------------------------------------------------------------------------------
  delay(1000);
  // -------------------------------------------------------------------------------------------

  digitalWrite(red_3, HIGH);        // Rotes Licht ein
  digitalWrite(yellow_3, LOW);      // Gelbes Licht aus

  // -------------------------------------------------------------------------------------------
  delay(2000);                      // 2 Sekunden Pause bevor Bahnhof links auf grün stellt
  // -------------------------------------------------------------------------------------------

  // D = Ende der Grünphase von Seite 2a Bahnhof links
  digitalWrite(green_2, LOW);       // Grünes Licht aus
  digitalWrite(relais_11, HIGH);    // An dieser Stelle würde das Relais von Seite 2a einsschalten
  digitalWrite(yellow_2, HIGH);     // Gelbes Licht ein

  // -------------------------------------------------------------------------------------------
  delay(1000);
  // -------------------------------------------------------------------------------------------

  digitalWrite(red_2, HIGH);     // Rotes Licht ein
  digitalWrite(yellow_2, LOW);   // Gelbes Licht aus

  // E = Beidseitige Rotphase 10 Sekunden

  // -------------------------------------------------------------------------------------------
  delay(10000);                // 10 Sekunden Pause
  // -------------------------------------------------------------------------------------------

  // F = Beginn der Grünphase von Seite 1
  digitalWrite(red_1, LOW);      // Rotes Licht aus
  digitalWrite(green_1, HIGH);   // Grünes Licht an
  digitalWrite(relais_10, LOW);  // An dieser Stelle würde das Relais von Seite 1 ausschalten

  // G = Grünphase von 1

  // -------------------------------------------------------------------------------------------
  delay(10000);                // Ampelphase mit z.B. 10 Sekunden Länge
  // -------------------------------------------------------------------------------------------

  // H = Ende der Grünphase von 1
  digitalWrite(green_1, LOW);     // Grünes Licht aus
  digitalWrite(relais_10, HIGH);  // An dieser Stelle würde das Relais von Seite 1 einschalten
  digitalWrite(yellow_1, HIGH);   // Gelbes Licht an

  // -------------------------------------------------------------------------------------------
  delay(1000);                    // 1 Sekunde Pause
  // -------------------------------------------------------------------------------------------

  digitalWrite(yellow_1, LOW);    // Gelbes Licht aus
  digitalWrite(red_1, HIGH);      // Rotes Licht an

  // I = Beidseitige Rotphase 10 Sekunden

  // -------------------------------------------------------------------------------------------
  delay(10000);
  // -------------------------------------------------------------------------------------------

  // J = Beginn der Grünphase von Seite 2a und 2b
  digitalWrite(red_2, LOW);      // Rotes Licht aus
  digitalWrite(red_3, LOW);      // Rotes Licht aus

}

Vielleich gibt es einen praktikablen Lösungsansatz?

Schönen Nachmittag, ich such jetzt meine Lammfellstiefel raus.
Grüße aus der Heimat der E69
Benutzeravatar
e69-fan
Beiträge: 282
Registriert: Mi 20. Jan 2021, 10:32
Wohnort: Murnau am Staffelsee

Re: Ampelanlage für DC-Car System

Beitrag von e69-fan »

wird neu bearbeitet / @ e69-fan
Zuletzt geändert von e69-fan am So 22. Aug 2021, 15:37, insgesamt 2-mal geändert.
Grüße aus der Heimat der E69
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Ampelanlage für DC-Car System

Beitrag von Admin »

Ich schaue die nächsten Tage mal, wie weit die Lib´s zusammen passen. Die für VL53L0X und TCA9548A mit den Mobatools.

Franz
Benutzeravatar
e69-fan
Beiträge: 282
Registriert: Mi 20. Jan 2021, 10:32
Wohnort: Murnau am Staffelsee

Re: Ampelanlage für DC-Car System

Beitrag von e69-fan »

Guten Morgen,

Überprüfung wäre gut für weitere Projekte.


:(V):


Das ist was neues und läuft auf einem eigenen nano - also hier kein Multiplexer , keine VL53L0X - nur mobaTools.



Schönen Tag
Zuletzt geändert von e69-fan am So 22. Aug 2021, 15:35, insgesamt 2-mal geändert.
Grüße aus der Heimat der E69
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Ampelanlage für DC-Car System

Beitrag von Admin »

e69-fan hat geschrieben: Do 19. Aug 2021, 04:37 Das ist was neues und läuft auf einem eigenen nano - also hier kein Multiplexer , keine VL53L0X - nur mobaTools.
Was ist was "neues" ? Da ist kein Link dahinter :(o):
Benutzeravatar
e69-fan
Beiträge: 282
Registriert: Mi 20. Jan 2021, 10:32
Wohnort: Murnau am Staffelsee

Re: Ampelanlage für DC-Car System

Beitrag von e69-fan »

N e u b e g i n n / Schritt 1

Hallo Franz,

damit wir nicht gänzlich durcheinanderkommen, starte ich das Thema neu.

An einem nano sind 2 Ampelanlagen angeschlossen - also 6x pinout belegt. Alle weiteren Ausgänge sind nicht belegt.
Um eine schnelle Anpassung der Abläufe zu ermöglichen - Tabellenform.
2xAmpelanlage - Bahnhof.jpg
2xAmpelanlage - Bahnhof.jpg (11.87 KiB) 1023 mal betrachtet
Der Sketch dazu:

Code: Alles auswählen

/*
 * https://www.stummiforum.de/t163493f21-Arduino-Zeitsteuerungen-ohne-Delay-ein-kleines-Tutorial-1.html
 * Beitrag: 27
 * 
 * modifiziert von e69-fan
  */
  
 // Ampelsteuerung
 
// Ampelsteuerung an einer einfachen Kreuzung
// Die Ampelphasen werden über eine Tabelle definiert
 
#include <MobaTools.h>
 
// Definition der Ausgangspins:

const byte hRotPin   = A0;  // Ampel an der Hauptstraße, rechts
const byte hGelbPin  = A1;
const byte hGruenPin = A2;

const byte nRotPin   = A3;  // Ampel an der Hauptstraße, links
const byte nGelbPin  = A4;
const byte nGruenPin = A5;
 

// Tabelle für die Ampelzustände

// Ampelphase:                1  | 2  | 3  | 4  | 5  | 6  | 7  | 8
// --------------------------------------------------------------------------
// Tabellenindex:             0  | 1  | 2  | 3  | 4  | 5  | 6  | 7
// --------------------------------------------------------------------------
const byte zeitDauer  [] = {  3  , 3  , 3  , 3  , 3  , 3  , 3  , 3  };          // Tabellenindex 1 (30) und Index 4 (20) wurden für Demo verkleinert
// --------------------------------------------------------------------------
const bool hauptRot   [] = { OFF ,OFF , ON , ON , ON , ON , ON , ON };
const bool hauptGelb  [] = { OFF , ON ,OFF ,OFF ,OFF ,OFF ,OFF , ON };
const bool hauptGruen [] = {  ON ,OFF ,OFF ,OFF ,OFF ,OFF ,OFF ,OFF };
// --------------------------------------------------------------------------
const bool nebenRot   [] = {  ON , ON , ON , ON ,OFF ,OFF , ON , ON };
const bool nebenGelb  [] = { OFF ,OFF ,OFF , ON ,OFF , ON ,OFF ,OFF };
const bool nebenGruen [] = { OFF ,OFF ,OFF ,OFF , ON ,OFF ,OFF ,OFF };
// --------------------------------------------------------------------------
 
const byte tabMax = sizeof(zeitDauer)-1; // Tabellenindex startet bei 0 ( deshalb die -1 für den höchsten Index )
byte ampelTabIx;   // läuft von 0 .. 7
 
// Einrichten der notwendigen MoBaTools Objekte:
MoToTimer AmpelTimer;
MoToSoftLed hRot;
MoToSoftLed hGelb;
MoToSoftLed hGruen;
MoToSoftLed nRot;
MoToSoftLed nGelb;
MoToSoftLed nGruen;
 

void setup() {
    // Softled Objekte initiieren
    
    hRot.attach( hRotPin );
    hRot.riseTime( 200 );
    hGelb.attach( hGelbPin );
    hGelb.riseTime( 200 );
    hGruen.attach( hGruenPin );
    hGruen.riseTime( 200 );
// --------------------------------------------------------------------------    
    nRot.attach( nRotPin );
    nRot.riseTime( 200 );
    nGelb.attach( nGelbPin );
    nGelb.riseTime( 200 );
    nGruen.attach( nGruenPin );
    nGruen.riseTime( 200 );
// --------------------------------------------------------------------------
 
    ampelTabIx = 2;  // Das System startet mit Rot auf allen Straßen
    
}
 
void loop() {
    // Tabellengesteuerte Ampel
    
    if( !AmpelTimer.running() ) {
        // Zeit abgelaufen
        // Ampel schalten
        
        hRot.write( hauptRot[ampelTabIx] );
        hGelb.write( hauptGelb[ampelTabIx] );
        hGruen.write( hauptGruen[ampelTabIx] );
        nRot.write( nebenRot[ampelTabIx] );
        nGelb.write( nebenGelb[ampelTabIx] );
        nGruen.write( nebenGruen[ampelTabIx] );
        
        // Zeit setzen ( da der Timer in ms rechnet, müssen die Tabellenwerte mit 1000 multipliziert werden )
                
        AmpelTimer.setTime( zeitDauer[ampelTabIx] * 1000 );
        
                                      // Merker weiterrückem
        if( ampelTabIx >= tabMax ) {
                                      // Tabellenende erreicht
            ampelTabIx = 0;
            
        } else {
          
            ampelTabIx++;
        }
    }
}

So, jetzt kann man mit den Zeiten und Reihenfolgen herumspielen.


Bei Schritt 2 kommt eine Ergänzung hinzu: jede Ampel schaltet bei "Grün" ein Relais.
Grüße aus der Heimat der E69
Benutzeravatar
e69-fan
Beiträge: 282
Registriert: Mi 20. Jan 2021, 10:32
Wohnort: Murnau am Staffelsee

Re: Ampelanlage für DC-Car System

Beitrag von e69-fan »

Schritt 2
Ampelanlage - Bahnhof.png
Ampelanlage - Bahnhof.png (10.32 KiB) 1019 mal betrachtet

Ich habe nun die Ampel für die Bushaltestelle in die Tabelle reingenommen.

Code: Alles auswählen

// Ampelsteuerung mit Bushaltestelle

// Ampelsteuerung an einer einspurigen Strasse mit Bushaltestelle
// Die Ampelphasen werden über eine Tabelle definiert

#include <MobaTools.h>

// Definition der Ausgangspins:
const byte hRotPin   = A0;    // Ampel an der Hauptstraße
const byte hGelbPin  = A1;    // Ampel an der Hauptstraße
const byte hGruenPin = A2;    // Ampel an der Hauptstraße
// ------------------------------------------------------------------------------------

const byte nRotPin   = A3;    // Ampel an der Nebenstraße
const byte nGelbPin  = A4;    // Ampel an der Nebenstraße
const byte nGruenPin = A5;    // Ampel an der Nebenstraße

// ------------------------------------------------------------------------------------
const byte BusRotPin   = 4;    // Bus-Ampel Nebenstrasse
const byte BusGelbPin  = 5;    // Bus-Ampel Nebenstrasse
const byte BusGruenPin = 2;    // Bus-Ampel Nebenstrasse




// Tabelle für die Ampelzustände
// Ampelphase:                     1  | 2  | 3  | 4  | 5  | 6  | 7  | 8  |9   | 10
// Tabellenindex:                  0  | 1  | 2  | 3  | 4  | 5  | 6  | 7  | 8  | 9

const byte zeitDauer        [] = { 15 , 2  , 2  , 3  , 2  , 15 , 2  , 2  , 3  , 2   };

const bool hauptRot         [] = { OFF, OFF, OFF,  ON,  ON,  ON,  ON,  ON,  ON,  ON };
const bool hauptGelb        [] = { OFF, OFF,  ON, OFF, OFF, OFF, OFF, OFF, OFF,  ON };
const bool hauptGruen       [] = {  ON,  ON, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF };

const bool nebenRot         [] = {  ON,  ON,  ON,  ON,  ON, OFF, OFF, OFF,  ON,  ON };
const bool nebenGelb        [] = { OFF, OFF, OFF, OFF,  ON, OFF, OFF,  ON, OFF, OFF };
const bool nebenGruen       [] = { OFF, OFF, OFF, OFF, OFF,  ON,  ON, OFF, OFF, OFF };

const bool nebenBusRot      [] = {  ON,  ON,  ON,  ON,  ON, OFF, OFF, OFF,  ON,  ON };
const bool nebenBusGelb     [] = { OFF, OFF, OFF, OFF,  ON, OFF, OFF,  ON, OFF, OFF };
const bool nebenBusGruen    [] = { OFF, OFF, OFF, OFF, OFF,  ON,  ON, OFF, OFF, OFF };

const byte tabMax = sizeof(zeitDauer) - 1; // Tabellenindex startet bei 0 ( deshalb die -1 für den höchsten Index )
byte ampelTabIx;   // läuft von 0 .. 9

// Einrichten der notwendigen MoBaTools Objekte:
MoToTimer AmpelTimer;
MoToSoftLed hRot;
MoToSoftLed hGelb;
MoToSoftLed hGruen;
MoToSoftLed nRot;
MoToSoftLed nGelb;
MoToSoftLed nGruen;
MoToSoftLed BusRot;
MoToSoftLed BusGelb;
MoToSoftLed BusGruen;

void setup() {
  
  // Softled Objekte initiieren
  
  hRot.attach( hRotPin );
  hRot.riseTime( 200 );
  hGelb.attach( hGelbPin );
  hGelb.riseTime( 200 );
  hGruen.attach( hGruenPin );
  hGruen.riseTime( 200 );
  nRot.attach( nRotPin );
  nRot.riseTime( 200 );
  nGelb.attach( nGelbPin );
  nGelb.riseTime( 200 );
  nGruen.attach( nGruenPin );
  nGruen.riseTime( 200 );
  BusRot.attach( BusRotPin );
  BusRot.riseTime( 200 );
  BusGelb.attach( BusGelbPin );
  BusGelb.riseTime( 200 );
  BusGruen.attach( BusGruenPin );
  BusGruen.riseTime( 200 );
   
  ampelTabIx = 3;             // Das System startet mit "alle Ampeln Rot"
}

void loop() {

  // Tabellengesteuerte Ampel
  
  if ( !AmpelTimer.running() ) {
    // Zeit abgelaufen
    
    // Ampel schalten
    hRot.write( hauptRot[ampelTabIx] );
    hGelb.write( hauptGelb[ampelTabIx] );
    hGruen.write( hauptGruen[ampelTabIx] );
    nRot.write( nebenRot[ampelTabIx] );
    nGelb.write( nebenGelb[ampelTabIx] );
    nGruen.write( nebenGruen[ampelTabIx] );
    BusRot.write( nebenBusRot[ampelTabIx] );
    BusGelb.write( nebenBusGelb[ampelTabIx] );
    BusGruen.write( nebenBusGruen[ampelTabIx] );
    

    // Zeit setzen ( da der Timer in ms rechnet, müssen die Tabellenwerte mit 1000
    // multipliziert werden )
    AmpelTimer.setTime( zeitDauer[ampelTabIx] * 1000 );

    // Merker weiterrückem
    if ( ampelTabIx >= tabMax ) {

      // Tabellenende erreicht
      ampelTabIx = 0;

    } else {

      ampelTabIx++;
    }
  }
}

Die beiden linken Ampeln laufen parallel - ist Absicht da ich noch Relais einbauen will.
Grüße aus der Heimat der E69
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Ampelanlage für DC-Car System

Beitrag von Admin »

OK, an dem Nano ist sonst nichts dran oder? Das läuft dann ja schon so wie es ist.
Benutzeravatar
e69-fan
Beiträge: 282
Registriert: Mi 20. Jan 2021, 10:32
Wohnort: Murnau am Staffelsee

Re: Ampelanlage für DC-Car System

Beitrag von e69-fan »

Schritt 3

Ich habe nun die "array Tabelle" angepasst - Ampel für "neben2 und Ampel für "nebenBus schalten nicht mehr gleichzeitig. und so kann der Sketch auch für eine einfache T-Kreuzung verwendet werden.

Hier mal der aktuelle Sketch:

Code: Alles auswählen

/*
 * https://www.stummiforum.de/t163493f21-Arduino-Zeitsteuerungen-ohne-Delay-ein-kleines-Tutorial-1.html
 * Beitrag: 27
 */
  
// Ampelsteuerung an einer einspurigen Strasse mit Bushaltestelle
// Die Ampelphasen werden über eine Tabelle definiert
 
#include <MobaTools.h>
 
// Definition der Ausgangspins:

const byte hRotPin   = A0;  // Ampel an der Hauptstrasse, rechts
const byte hGelbPin  = A1;
const byte hGruenPin = A2;

const byte nRotPin   = A3;  // Ampel an der Hauptstrasse, links
const byte nGelbPin  = A4;
const byte nGruenPin = A5;

const byte BusRotPin   = 2;  // Ampel an der Bushaltestelle 
const byte BusGelbPin  = 3;
const byte BusGruenPin = 4;
 

// Tabelle für die Ampelzustände

// Ampelphase:                1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  10 |  11 |  12
// -------------------------------------------------------------------------------------------------------
// Tabellenindex:             0  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  10 |  11
// -------------------------------------------------------------------------------------------------------
const byte zeitDauer  [] = { 30  ,  3  ,  3  ,  3  , 20  ,  3  ,  3  ,  3  ,  10 ,  3  ,  3  ,   3 };
// -------------------------------------------------------------------------------------------------------
const bool hauptRot   [] = { OFF , OFF ,  ON ,  ON ,  ON ,  ON ,  ON ,  ON ,  ON ,  ON ,  ON ,  ON };
const bool hauptGelb  [] = { OFF ,  ON , OFF , OFF , OFF , OFF , OFF , OFF , OFF , OFF , OFF ,  ON };
const bool hauptGruen [] = {  ON , OFF , OFF , OFF , OFF , OFF , OFF , OFF , OFF , OFF , OFF , OFF };
const bool nebenRot   [] = {  ON ,  ON ,  ON ,  ON , OFF , OFF ,  ON ,  ON ,  ON ,  ON ,  ON ,  ON };
const bool nebenGelb  [] = { OFF , OFF , OFF ,  ON , OFF ,  ON , OFF , OFF , OFF , OFF , OFF , OFF };
const bool nebenGruen [] = { OFF , OFF , OFF , OFF ,  ON , OFF , OFF , OFF , OFF , OFF , OFF , OFF };

const bool BusRot     [] = {  ON ,  ON ,  ON ,  ON ,  ON ,  ON ,  ON ,  ON , OFF , OFF ,  ON ,  ON };
const bool BusGelb    [] = { OFF , OFF , OFF , OFF , OFF , OFF , OFF ,  ON , OFF ,  ON , OFF , OFF };
const bool BusGruen   [] = { OFF , OFF , OFF , OFF , OFF , OFF , OFF , OFF ,  ON , OFF , OFF , OFF };
 
const byte tabMax = sizeof(zeitDauer)-1; // Tabellenindex startet bei 0 ( deshalb die -1 für den höchsten Index )
byte ampelTabIx;   // läuft von 0 .. 7
 
// Einrichten der notwendigen MoBaTools Objekte:
MoToTimer AmpelTimer;
MoToSoftLed hRot;
MoToSoftLed hGelb;
MoToSoftLed hGruen;
MoToSoftLed nRot;
MoToSoftLed nGelb;
MoToSoftLed nGruen;
MoToSoftLed nBusRot;
MoToSoftLed nBusGelb;
MoToSoftLed nBusGruen;
 

void setup() {
    // Softled Objekte initiieren
    
    hRot.attach( hRotPin );
    hRot.riseTime( 200 );
    hGelb.attach( hGelbPin );
    hGelb.riseTime( 200 );
    hGruen.attach( hGruenPin );
    hGruen.riseTime( 200 );
// --------------------------------------------------------------------------    
    nRot.attach( nRotPin );
    nRot.riseTime( 200 );
    nGelb.attach( nGelbPin );
    nGelb.riseTime( 200 );
    nGruen.attach( nGruenPin );
    nGruen.riseTime( 200 );
    // --------------------------------------------------------------------------    
    nBusRot.attach( BusRotPin );
    nBusRot.riseTime( 200 );
    nBusGelb.attach( BusGelbPin );
    nBusGelb.riseTime( 200 );
    nBusGruen.attach( BusGruenPin );
    nBusGruen.riseTime( 200 );
// --------------------------------------------------------------------------
 
    ampelTabIx = 2;  // Das System startet mit " alle Ampeln = ROT "
    
}
 
void loop() {
    // Tabellengesteuerte Ampel
    
    if( !AmpelTimer.running() ) {
        // Zeit abgelaufen
        // Ampel schalten
        
        hRot.write( hauptRot[ampelTabIx] );
        hGelb.write( hauptGelb[ampelTabIx] );
        hGruen.write( hauptGruen[ampelTabIx] );
        nRot.write( nebenRot[ampelTabIx] );
        nGelb.write( nebenGelb[ampelTabIx] );
        nGruen.write( nebenGruen[ampelTabIx] );
        nBusRot.write( BusRot[ampelTabIx] );
        nBusGelb.write( BusGelb[ampelTabIx] );
        nBusGruen.write( BusGruen[ampelTabIx] );
        
        // Zeit setzen ( da der Timer in ms rechnet, müssen die Tabellenwerte mit 1000 multipliziert werden )
                
        AmpelTimer.setTime( zeitDauer[ampelTabIx] * 1000 );
        
                                      // Merker weiterrückem
        if( ampelTabIx >= tabMax ) {
                                      // Tabellenende erreicht
            ampelTabIx = 0;
            
        } else {
          
            ampelTabIx++;
        }
    }
}

Als nächstes möchte ich Relais einbinden welche bei Grün umschalten.

Ich habe aber keinen Plan wie man den Zustand des Relais (low/high) eventuell als Variable in das array bringt.

Wahrscheinlich bin ich da auf dem falschen Weg und wäre für Hilfe dankbar.
Grüße aus der Heimat der E69
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Ampelanlage für DC-Car System

Beitrag von Admin »

Bei grün ein oder bei grün aus?
Antworten

Zurück zu „Hardware / Schaltungstechnik“

Wer ist online?

Mitglieder in diesem Forum: Ahrefs [Bot] und 6 Gäste