1. /*
  2.  * Projekt: Ampelsteuerung
  3.  * Datei: Ampelsteuerung.cpp
  4.  *
  5.  * Datum: 20.03.2020
  6.  * Autor: Niklas Menke (niklas-menke.com)
  7.  *
  8.  * Version: 2.0.0
  9.  * Datum: 03.10.2020
  10.  * Changelog:
  11.  * 2.0.0:
  12.  * - Türtaster hinzugefügt
  13.  */
  14.  
  15. #define F_CPU 1200000UL
  16. #include <avr/io.h>
  17. #include <util/delay.h>
  18.  
  19. int main(void)
  20. {
  21. // Eingänge
  22. const uint8_t tuer = 0 | (1<<PB4);
  23.  
  24. // Ausgänge:
  25. const uint8_t gruen = 0 | (1<<PB2);
  26. const uint8_t gelb = 0 | (1<<PB1);
  27. const uint8_t rot = 0 | (1<<PB0);
  28.  
  29. DDRB = gruen | gelb | rot; // Pins als Ausgänge setzen
  30. PORTB = tuer | gruen; // Pullup-Widerstand für den Türtaster aktivieren und Grün einschalten
  31.  
  32. // Ampelschaltung
  33. while (1)
  34. {
  35. if(!(PINB & tuer)) { // Wenn Türtaster betätigt wurde (GND-Signal)
  36. _delay_ms(100); // 100 Millisekunde warten (einfache Entprellung)
  37.  
  38. if(!(PINB & tuer)) { // Wenn der Türtaster immer noch betätigt ist, dann von Grün auf Rot schalten
  39. PORTB &= ~gruen;
  40. PORTB |= gelb;
  41. _delay_ms(1000);
  42. PORTB &= ~gelb;
  43. PORTB |= rot;
  44.  
  45. while(!(PINB & tuer)); // Rot zeigen, solange der Türtaster betätigt ist
  46.  
  47. _delay_ms(2500); // Zeit zum Tür öffnen und herausgehen geben und dann wieder auf Grün schalten
  48. PORTB |= gelb;
  49. _delay_ms(1000);
  50. PORTB &= ~(gelb | rot);
  51. PORTB |= gruen;
  52. }
  53. }
  54. }
  55. }