//****************************************************************************//
// Hochschule Hamm-Lippstadt - Studiengang B. Mechatronik - SoSe 22 *
//*****************************************************************************
// Modul : GET-Praktikum *
// *
// Datum : 10. 01. 2023 *
// *
// Funktion : Ampel in einer Kreuzung steuern *
// *
// Implementation : Arduino IDE vers. 1.8.16 *
// *
// Hardware : Arduino MEGA *
// *
// Device : LED-leuchte *
// *
// Prüfer : Prof. Schneider,Prof.Göbel und Herr Ebmeyer *
// *
// Authoren :Delmas Ngoumtsa & Christian Teyou
// *
// Gruppe : 2.5 *
// *
//*****************************************************************************
int rote_LED1=26;
int orange_LED1=24; // Ampel für Verkehr auf Straße 1
int gruene_LED1=22;
int rote_LED2=31;
int orange_LED2=33; // Ampel für Verkehr auf Straße 2
int gruene_LED2=35;
bool Taster1 = 0; // Taster für Fußgänger,die die Traße 1 überqueren möchten
bool Taster2 = 0; // Taster für Fußgänger,die die Traße 2 überqueren möchten
int Pin_Taster1=13;// Pin wo die Pin_Taster1 eingelesen wird
int Pin_Taster2=12;// Pin wo die Pin_Taster2 eingelesen wird
unsigned long Zeit = 0;
unsigned long ZeitLang = 1000;// Zeit Ansteurung
unsigned long ZeitKurz = 500;
int fussgruene_LED1=36;// Ampel für Fußgänger auf Straße 1
int fussorange_LED1=38;
int fussrote_LED1=40;
int fussgruene_LED2=49;// Ampel für Fußgänger auf Straße 2
int fussorange_LED2=51;
int fussrote_LED2=53;
int i ; // Anzahl Inkrimete
int Weiss1V = 10; // Weiße Melder für vordere Ampel für Verkehr auf Straße 1
int Weiss1R = 8; // Weiße Melder für Rückseite Ampel für Verkehr auf Straße 1
int Weiss2V = 6; // Weiße Melder für vordere Ampel für Verkehr auf Straße 2
int Weiss2R = 4; // Weiße Melder für Rückseite Ampel für Verkehr auf Straße 2
int ECHO1V = 32; // Pins des 1. vorderen Ultraschallsensor für Verkehr auf Straße 1
int TRIG1V = 30;
float Abstand1V = 0; // gelieferte Abstand von der 1. vorderen Ultraschallsensor für Verkehr auf Straße 1
int ECHO2V = 25; // Pins des 2. vorderen Ultraschallsensor für Verkehr auf Straße 1
int TRIG2V = 23;
float Abstand2V = 0; // gelieferte Abstand von der 2. vorderen Ultraschallsensor für Verkehr auf Straße 1
int ECHO1R = 44; // Pins des 1. Rückseite Ultraschallsensor für Verkehr auf Straße 1
int TRIG1R = 42;
float Abstand1R = 0; // gelieferte Abstand von der 1. Rückseite Ultraschallsensor für Verkehr auf Straße 1
int ECHO2R = 43; // Pins des 2. Rückseite Ultraschallsensor für Verkehr auf Straße 1
int TRIG2R = 41;
float Abstand2R = 0; // gelieferte Abstand von der 2. Rückseite Ultraschallsensor für Verkehr auf Straße 1
int a1V ; // Taster für Bedingung des 1. vorderen Ultraschallsensor für Verkehr auf Straße 1
int a2V ; // Taster für Bedingung des 2. vorderen Ultraschallsensor für Verkehr auf Straße 1
int tW = 30;// Zeit des Weißen Melder für Verkehrsampel
void setup()
{
pinMode(Weiss1V, OUTPUT);
pinMode(Weiss1R, OUTPUT);
pinMode (rote_LED1,OUTPUT);
pinMode (orange_LED1,OUTPUT);
pinMode (gruene_LED1,OUTPUT);
pinMode (Pin_Taster1,INPUT);
pinMode (fussrote_LED1,OUTPUT);
pinMode (fussgruene_LED1,OUTPUT);
pinMode (fussorange_LED1,OUTPUT);
pinMode(Weiss2V, OUTPUT);
pinMode(Weiss2R, OUTPUT);
pinMode (rote_LED2,OUTPUT);
pinMode (orange_LED2,OUTPUT);
pinMode (gruene_LED2,OUTPUT);
pinMode (Pin_Taster2,INPUT);
pinMode (fussrote_LED2,OUTPUT);
pinMode (fussgruene_LED2,OUTPUT);
pinMode (fussorange_LED2,OUTPUT);
pinMode (ECHO1V,INPUT);
pinMode (TRIG1V,OUTPUT);
pinMode (ECHO2V,INPUT);
pinMode (TRIG2V,OUTPUT);
pinMode (ECHO1R,INPUT);
pinMode (TRIG1R,OUTPUT);
pinMode (ECHO2R,INPUT);
pinMode (TRIG2R,OUTPUT);
Serial.begin(9600);
}
void loop()
{
Serial.print("Abstand ist : ");
Serial.print(Abstand1V);
Serial.println(" cm");
Serial.print("Abstand ist : ");
Serial.print(Abstand1R);
Serial.println(" cm");
Zeit = millis();
Serial.print("Zeit = ");
Serial.println( Zeit);
for ( i= 0 ; i < 100; i++ )
{
Serial.print("Ziklus Nr. ");
Serial.println( i );
if( Zeit < 5000 )
{
digitalWrite (rote_LED1,LOW);
digitalWrite (fussrote_LED1,HIGH);
digitalWrite (orange_LED1,LOW);
digitalWrite (fussorange_LED1,LOW);
digitalWrite (gruene_LED1,HIGH);
digitalWrite (fussgruene_LED1,LOW);
Zweite_Ultraschallt();
}
if( Zeit > 5000 && Zeit < 8000)
{
digitalWrite (orange_LED1,HIGH);
digitalWrite (fussorange_LED1,HIGH);
digitalWrite (rote_LED1,LOW);
digitalWrite (fussrote_LED1,HIGH);
digitalWrite (gruene_LED1,LOW);
digitalWrite (fussgruene_LED1,LOW);
digitalWrite (orange_LED2,HIGH);
digitalWrite (fussorange_LED2,HIGH);
digitalWrite (rote_LED2,LOW);
digitalWrite (fussrote_LED2,LOW);
digitalWrite (gruene_LED2,LOW);
digitalWrite (fussgruene_LED2,HIGH);
}
if( Zeit > 8000 && Zeit < 15000)
{
digitalWrite (orange_LED2,LOW);
digitalWrite (fussorange_LED2,LOW);
digitalWrite (rote_LED2,LOW);
digitalWrite (fussrote_LED2,HIGH);
digitalWrite (gruene_LED2,HIGH);
digitalWrite (fussgruene_LED2,LOW);
Erste_Ultraschallt();
}
Schalter1();
Schalter2();
if( Zeit > 15000)
{
Zeit = Zeit - 16000;
if( Zeit < 3000 )
{
digitalWrite (rote_LED1,LOW);
digitalWrite (fussrote_LED1,HIGH);
digitalWrite (orange_LED1,LOW);
digitalWrite (fussorange_LED1,LOW);
digitalWrite (gruene_LED1,HIGH);
digitalWrite (fussgruene_LED1,LOW);
Zweite_Ultraschallt();
}
if( Zeit > 5000 && Zeit < 8000)
{
digitalWrite (orange_LED1,HIGH);
digitalWrite (fussorange_LED1,HIGH);
digitalWrite (rote_LED1,LOW);
digitalWrite (fussrote_LED1,HIGH);
digitalWrite (gruene_LED1,LOW);
digitalWrite (fussgruene_LED1,LOW);
digitalWrite (orange_LED2,HIGH);
digitalWrite (fussorange_LED2,HIGH);
digitalWrite (rote_LED2,LOW);
digitalWrite (fussrote_LED2,LOW);
digitalWrite (gruene_LED2,LOW);
digitalWrite (fussgruene_LED2,HIGH);
}
if( Zeit > 8000 && Zeit < 15000)
{
digitalWrite (orange_LED2,LOW);
digitalWrite (fussorange_LED2,LOW);
digitalWrite (rote_LED2,LOW);
digitalWrite (fussrote_LED2,HIGH);
digitalWrite (gruene_LED2,HIGH);
digitalWrite (fussgruene_LED2,LOW);
Erste_Ultraschallt();
}
}
}
}
void Schalter1()
{
Taster1 =digitalRead(Pin_Taster1);
if ( Taster1 == LOW)
{
delay(0);
digitalWrite (orange_LED1,HIGH);
digitalWrite (fussorange_LED1,HIGH);
digitalWrite (rote_LED1,LOW);
digitalWrite (fussrote_LED1,HIGH);
digitalWrite (gruene_LED1,LOW);
digitalWrite (fussgruene_LED1,LOW);
delay(3000);
digitalWrite (orange_LED1,LOW);
digitalWrite (fussorange_LED1,LOW);
Erste_Ultraschallt();
}
}
void Schalter2()
{
Taster2 =digitalRead(Pin_Taster2);
if ( Taster2 == LOW)
{
delay(0);
digitalWrite (orange_LED2,HIGH);
digitalWrite (fussorange_LED2,HIGH);
digitalWrite (rote_LED2,LOW);
digitalWrite (fussrote_LED2,HIGH);
digitalWrite (gruene_LED2,LOW);
digitalWrite (fussgruene_LED2,LOW);
delay(3000);
digitalWrite (orange_LED2,LOW);
digitalWrite (fussorange_LED2,LOW);
Zweite_Ultraschallt();
}
}
void Erste_Ultraschallt()
{
Erste_Ultraschallt1();
}
void Zweite_Ultraschallt()
{
Zweite_Ultraschallt1();
}
void Erste_Ultraschallt1()
{
digitalWrite (TRIG1V,LOW);
delayMicroseconds(2);
digitalWrite (TRIG1V,HIGH);
delayMicroseconds(2);
digitalWrite (TRIG1V,LOW);
float Distance1V = pulseIn(ECHO1V,HIGH);
Abstand1V = Distance1V / 58.0;
Serial.print("Abstand ist : ");
Serial.print(Abstand1V);
Serial.println(" cm");
digitalWrite (TRIG1R,LOW);
delayMicroseconds(2);
digitalWrite (TRIG1R,HIGH);
delayMicroseconds(2);
digitalWrite (TRIG1R,LOW);
float Distance1R = pulseIn(ECHO1R,HIGH);
Abstand1R = Distance1R / 58.0;
Serial.print("Abstand ist : ");
Serial.print(Abstand1R);
Serial.println(" cm");
a1V = digitalRead (rote_LED1);
digitalWrite (rote_LED1,HIGH);
digitalWrite (fussrote_LED1,LOW);
digitalWrite (orange_LED1,LOW);
digitalWrite (fussorange_LED1,LOW);
digitalWrite (gruene_LED1,LOW);
digitalWrite (fussgruene_LED1,HIGH);
if(a1V == LOW && Abstand1V <10)
{
digitalWrite(Weiss1V,HIGH );
delay(10);
digitalWrite(Weiss1V,LOW );
delay(5);
digitalWrite(Weiss1V,HIGH );
delay(10);
digitalWrite(Weiss1V,LOW );
delay(5);
}
delay(tW);
digitalWrite(Weiss1V,LOW );
if(a1V == LOW && Abstand1R <10)
{
digitalWrite(Weiss1R,HIGH );
delay(10);
digitalWrite(Weiss1R,LOW );
delay(5);
digitalWrite(Weiss1R,HIGH );
delay(10);
digitalWrite(Weiss1R,LOW );
delay(5);
}
delay(tW);
digitalWrite(Weiss1R,LOW );
digitalWrite (rote_LED1,LOW);
delay(0 );
}
void Zweite_Ultraschallt1()
{
digitalWrite (TRIG2V,LOW);
delayMicroseconds(2);
digitalWrite (TRIG2V,HIGH);
delayMicroseconds(2);
digitalWrite (TRIG2V,LOW);
float Distance2V = pulseIn(ECHO2V,HIGH);
Abstand2V = Distance2V / 58.0;
Serial.print("Abstand ist : ");
Serial.print(Abstand2V);
Serial.println(" cm");
digitalWrite (TRIG2R,LOW);
delayMicroseconds(2);
digitalWrite (TRIG2R,HIGH);
delayMicroseconds(2);
digitalWrite (TRIG2R,LOW);
float Distance2R = pulseIn(ECHO2R,HIGH);
Abstand2R = Distance2R / 58.0;
Serial.print("Abstand ist : ");
Serial.print(Abstand2R);
Serial.println(" cm");
a2V = digitalRead (rote_LED2);
digitalWrite (rote_LED2,HIGH);
digitalWrite (fussrote_LED2,LOW);
digitalWrite (orange_LED2,LOW);
digitalWrite (fussorange_LED2,LOW);
digitalWrite (gruene_LED2,LOW);
digitalWrite (fussgruene_LED2,HIGH);
if(a2V == LOW && Abstand2V <10)
{
digitalWrite(Weiss2V,HIGH );
delay(10);
digitalWrite(Weiss2V,LOW );
delay(5);
digitalWrite(Weiss2V,HIGH );
delay(10);
digitalWrite(Weiss2V,LOW );
delay(5);
}
delay(tW);
digitalWrite(Weiss2V,LOW );
if(a2V == LOW && Abstand2R <10)
{
digitalWrite(Weiss2R,HIGH );
delay(10);
digitalWrite(Weiss2R,LOW );
delay(5);
digitalWrite(Weiss2R,HIGH );
delay(10);
digitalWrite(Weiss2R,LOW );
delay(5);
}
delay(tW);
digitalWrite(Weiss2R,LOW );
digitalWrite (rote_LED2,LOW);
delay(0 );
}