/*
* Projekt: Ampelsteuerung
* Datei: Ampelsteuerung.cpp
*
* Datum: 20.03.2020
* Autor: Niklas Menke (niklas-menke.com)
*
* Version: 2.0.0
* Datum: 03.10.2020
* Changelog:
* 2.0.0:
* - Türtaster hinzugefügt
*/
#define F_CPU 1200000UL
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
// Eingänge
const uint8_t tuer = 0 | (1<<PB4);
// Ausgänge:
const uint8_t gruen = 0 | (1<<PB2);
const uint8_t gelb = 0 | (1<<PB1);
const uint8_t rot = 0 | (1<<PB0);
DDRB = gruen | gelb | rot; // Pins als Ausgänge setzen
PORTB = tuer | gruen; // Pullup-Widerstand für den Türtaster aktivieren und Grün einschalten
// Ampelschaltung
while (1)
{
if(!(PINB & tuer)) { // Wenn Türtaster betätigt wurde (GND-Signal)
_delay_ms(100); // 100 Millisekunde warten (einfache Entprellung)
if(!(PINB & tuer)) { // Wenn der Türtaster immer noch betätigt ist, dann von Grün auf Rot schalten
PORTB &= ~gruen;
PORTB |= gelb;
_delay_ms(1000);
PORTB &= ~gelb;
PORTB |= rot;
while(!(PINB & tuer)); // Rot zeigen, solange der Türtaster betätigt ist
_delay_ms(2500); // Zeit zum Tür öffnen und herausgehen geben und dann wieder auf Grün schalten
PORTB |= gelb;
_delay_ms(1000);
PORTB &= ~(gelb | rot);
PORTB |= gruen;
}
}
}
}