Mit dickerem Kondensator vor 7805 meint Kjion den C1.

Der 7805 ist schon ok. Die Verlustleistung ist grob (U_Out-U_IN)*I_OUT. Ein anderer Regler wie Low-Drop nutzt da nix, denn Linearregler verbrutzeln die Spannungsdifferenz als Wärme. Wenn noch Motoren hinten dran hängen, wird's warm. Zum Steuern sollte es keine Probleme geben.

Auf Ereignisse kann man prinzipiell auf 2 Arten reageren:
  • Interrupts: wenn die Hardware es zulässt, kann der Controller bei einem Ereignis (bestimmter Timer-Wert, Taster gedrückt, ADC ist fertig, ANA-Comp wechselt Vorzeichen, ...) reagieren, unterbricht die nomale Programm-Ausführung und springt in eine Interrupt-Routine zur Behandlung des Ereignisses.
  • Polling (von 'to poll': abfragen): Man guckt selber nach, idR in bestimmten Zeitabständen oder in einer Warteschleife: Hat Port den Wert geändert, ist ein Flag gesetzt, ...?

Ja nach Hardware und Programm-Erfordernissen wird man den einen oder anderen Weg wählen, uU auch eine Kombination aus beiden: Interrupt leitet ein Ereignis ein und die weitere Behandlung macht man über Polling.
Für Taster ganz angenehm: Damit guck zB alle 10 ms im Timer-Interrupt ob Taster gedrückt wurden, damit sind sie zugleich entprellt

Taster über A/D-Wandler und Spannungsteiler geht natürlich. Oder geschickte Ausnutzung der vorhandenen Taster (Menüstruktur zur Steuerung, Doppelclick, langer o. kurzer Tastendruck, ...)

Zum UART: Wenn zB der PC Daten sendet und der µC ist nicht bereit, können Daten verloren gehen. Gepuffert wird nur einmal. Wenn das Programm zum Empfang nicht bereit ist -- aus welchen Gründen auch immer -- und nicht unterbrochen werden soll oder so, musst du dem PC das irgendwie sagen. Üblicherweise verwendet man dann CTS (Clear To Send) und RTS (Request To Send). PC-seitig hab man das Problem kaum, denn die PC-UARTs haben ne FiFo.

Falls Ports nicht reichen sollten, kannst du immer noch Port-Expander nehmen und an I2C hängen oder ne Bastellösung mit 74*595 (8 Bit-Latch, seriell in/parallel out) o.ä.

Zum Board: später wird es sich als günstig rausstellen, VCC und GCC an den Steckverbindern zu wiederholen. Wenn du zB was über I2C anschliesst, brauchst du vier Leitungen, nicht zwei:
SDA, SCL, VCC und GND.