Jetzt alles zusammen

Jetzt hast du gelernt, wie du den Minutenzeiger mit dem Schrittmotor steuerst und wie du die LEDs mit dem Expander Chip zum leuchten bekommst. Jetzt müssen wir nur noch beides kominieren, damit deine Uhr einsatzfähig ist.

Wenn du beide Skripte zusammen gefügt hast, sollte das etwa so aussehen:

import os
import time
from datetime import datetime as dt
import motor
import smbus

motor.setup()

bus = smbus.SMBus(1)
bus.write_byte_data(0x20, 0x00, 0x00)
bus.write_byte_data(0x20, 0x01, 0x00)

current_position = 0

def set_hour(now):
  now = dt.now()
  hour = now.hour % 12
  leds = 1 << hour
  bus.write_byte_data(0x20, 0x14, 0xff & leds)
  bus.write_byte_data(0x20, 0x15, 0xff & (leds >> 8))

try:
  while True:
    time.sleep(60 - float(dt.now().strftime('%S.%f')))

    now = dt.now()
    set_hour(now)

    new_position = round((now.minute*60 + now.second)*512/3600)
    move = (new_position - current_position + 512) % 512
    motor.move(move)
    current_position = new_position

except:
  GPIO.cleanup()

Das Allermeiste kennst du ja schon. Zu Beginn führen wir die setup-Methode des Motor-Skirpt aus und initialisieren den Extender Chip. Dein Code zum aktualisieren der Stunden-Anzeige setzen wir in eine Funktion, die wir später nach Belieben ausführen können. In der while True-Schleife warten wir zu Beginn auf die nächste volle Minute. Du kannst die Zeile wie vorhin auch weglassen, wenn du eine Stufenlose Minutenanzeige möchtest. Füge dann allerdings am Ende der Schleife time.sleep(1) hinzu.