Lösung: Arduino UNO Ereigniszähler

Pin-Zuordnungen

D0 - D7:    PD0 - PD7   
D10:    PB2   

Programmablaufplan

Schaltplan

Programmablaufplan

C-Quelltext:

#include <avr/io.h>
#include <stdint.h>
#include <util/delay.h>

int main(void)
{

  DDRB = 0b00000000;  // PortB auf Input
  PORTB = 0b00000100; // PB1 und PB2 Pullup
  DDRD = 0b11111111;  // PortD auf Output

  uint8_t zaehler = 0;

  while (1)
  {
    while (PINB & 0b00000100) // Warten auf Tastendruck
    {
    }
    zaehler++;       // Zähler inkrement
    PORTD = zaehler; // Zähler an PortD ausgeben
    _delay_ms(500);
  }
}

Quelltext: Erklärung

Compiler-Direktiven

#include

#include <avr/io.h>: AVR-I/O Bibliothek einbinden

#include <stdint.h>: Standard-Integer Bibliothek einbinden

#include <util/delay.h>: Delay Bibliothek einbinden

main() Funktion

while (!(PINB & 0b00000100))...

Auf Tastendruck an PB2 warten.
Der Pullup an PB2 muss aktiviert sein.
Es muss eine Bitmaske verwendet werden.

_delay_ms(500);

Dieses Delay sorgt dafür, dass der Zähler nicht unkontrolliert hochzählt.