# pygame-mbot-01.py vom 21.11.2024 import sys from pygame.locals import * COM_Port = "COM14" print(f"Starte Verbindung zu {COM_Port}") from pygame_mbot_module import * ser = ser_init( COM_Port, 115200 ) if ser=="error": sys.exit("Serielle Verbindung zu {COM_Port} nicht hergestellt!") print(f"Verbindung zu {COM_Port} steht") print("Warte auf Daten: ", end="") fenster = mache_fenster("PyGame mBot 01",800, 600) # Schalter 's1' definieren s1_x = 100; s1_y = 100; s1_farbe = rot_aus # Schalter 's1' zeichnen s1 = pygame.draw.circle(fenster, s1_farbe, (s1_x,s1_y), 30, 0) pygame.draw.circle(fenster, schwarz, (s1_x,s1_y), 33, 5) # Lampe definieren und zeichnen l1_x = 700; l1_y = 100; l1_farbe = gruen_aus l1 = pygame.draw.circle(fenster, l1_farbe, (l1_x,l1_y), 30, 0) pygame.draw.circle(fenster, grau, (l1_x,l1_y), 33, 5) def taster(x,y,l,h,f): rect = Rect(x, y, l, h) return rect,f def zeige_taster(rect,f): pygame.draw.rect(fenster, f , rect, 0, border_radius = 35) pygame.draw.rect(fenster, schwarz , rect, 5, border_radius = 35) r1_laenge = 700; r1_farbe = rot daten = "Warte auf Daten" t1, t1_farbe = taster(350,70,90,60,blau_aus) t1_start = 0 t1_dauer = 0.5 def Fenster_zeigen(): fenster.fill(grau) s1 = pygame.draw.circle(fenster, s1_farbe, (s1_x,s1_y), 30, 0) pygame.draw.circle(fenster, schwarz, (s1_x,s1_y), 33, 5) l1 = pygame.draw.circle(fenster, l1_farbe, (l1_x,l1_y), 30, 0) pygame.draw.circle(fenster, schwarz , (l1_x,l1_y), 33, 5) zeige_taster(t1, t1_farbe) # Balkendiagramm für Helligkeit pygame.draw.rect(fenster, r1_farbe, Rect(50, 400, r1_laenge, 80), 0) pygame.draw.rect(fenster, schwarz, Rect(50, 400, 700, 80), 5) text_typer_xy(daten, 400,300,33,rot) pygame.display.update() Fenster_zeigen() ende = False while not ende: # Schleife Hauptprogramm msg = ser.readline() # liest Bytearray mit '\r\n' print(msg) daten = msg.decode().strip() werte = daten.split(",") if len(werte) != 3: continue line, hell, entf = werte r1_laenge = entf if entf==400: r1_farbe = rot r1_laenge = 700 else: r1_farbe = blau r1_laenge = int(entf) / 400 * 700 # Farbe für Lampen l1_farbe = gruen_ein if int(line)//2==1 else gruen_aus for event in pygame.event.get(): # Überprüfen auf Nutzeraktion # Beenden bei [ESC] oder 'Fenster schließen' if event.type==QUIT or (event.type==KEYDOWN and event.key==K_ESCAPE): ende = True if event.type == pygame.MOUSEBUTTONDOWN: if s1.collidepoint(event.pos): if s1_farbe==rot_aus: print("Schalter EIN") s1_farbe = rot_ein ser.write("rgb 111 0 0\n".encode()) else: print("Schalter aus") s1_farbe = rot_aus ser.write("rgb 0 0 0\n".encode()) if t1.collidepoint(event.pos): print("Schalter EIN") t1_farbe = blau_ein t1_start = time.time() ser.write("rgb 0 0 222\n".encode()) s1_farbe = rot_aus # Taster wieder freigeben if t1_farbe == blau_ein and t1_start + t1_dauer < time.time(): t1_farbe = blau_aus ser.write("rgb 0 0 0\n".encode()) Fenster_zeigen() print("\n\n ### ENDE ###") pygame.quit() sys.exit() # statt ser.close()