lehrkraefte:sbt:informatik:glf22:robotik-mit-svcode:reusecode

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:sbt:informatik:glf22:robotik-mit-svcode:reusecode [2023/05/12 19:27] Karlheinz Schubertlehrkraefte:sbt:informatik:glf22:robotik-mit-svcode:reusecode [2023/05/12 19:30] (current) – [Wiederverwendung von Python Code in meherern Programmen] Karlheinz Schubert
Line 1: Line 1:
 +====== Wiederverwendung von Python Code in meherern Programmen ======
 +
 +Wie können wir die in der Basislektion ermittelten Daten (Raddurchmesser, Spur) und die Imports wieder verwenden?
 +
 +→ Wir lagern sie in die Datei ''ev3geometrie.py'' aus, die wir dann als Import in anderen Programmen verwenden können:
 +
 +===== Neues Bibliothks-Modul: ev3Geometrie.py =====
 +
 +<WRAP center round todo>
 +<code python ev3Geometrie.py>
 +#!/usr/bin/env pybricks-micropython
 +# imports nach https://fginfo.ksbg.ch/dokuwiki/doku.php?id=lehrkraefte:blc:informatik:glf22:robotik-mit-svcode:programm-struktur
 +from pybricks.hubs import EV3Brick
 +from pybricks.ev3devices import Motor, TouchSensor, ColorSensor, InfraredSensor, UltrasonicSensor, GyroSensor
 +from pybricks.parameters import Port, Stop, Direction, Button, Color
 +from pybricks.tools import wait, StopWatch, DataLog
 +from pybricks.robotics import DriveBase
 +from pybricks.media.ev3dev import SoundFile, ImageFile
 +
 +from math import pi  # Wert pi importieren
 +
 +# Create your objects here.
 +ev3 = EV3Brick()
 +ev3.speaker.beep()
 +
 +links = Motor(Port.A)
 +rechts = Motor(Port.B)
 +
 +# ----------------
 +dRad = 5.40  # [cm] Raddurchmesser gemessen
 +spur = 10.5  # [cm] Radabstand gemessen
 +# --------------
 +uRad = dRad * pi  # [cm] Radmufang
 +grad_pro_cm = 360 / uRad  # [°/cm]
 +cm_pro_grad = uRad / 360  # [cm/°]
 +print("dRad={}cm, uRad={}cm, spur={}cm, Wegwinkel={}°/cm, Winkelweg={}cm/°".format(dRad, int(uRad), spur, int(grad_pro_cm), int(cm_pro_grad)))
 +</code>
 +</WRAP>
 +
 +
 +===== Programme, die das Bibliothks-Modul: ev3Geometrie.py verwenden =====
 +<WRAP center round todo>
 +<code python gerade-100cm.py>
 +#!/usr/bin/env pybricks-micropython
 +
 +import ev3Geometrie as g
 +
 +distanz = 100  # 100cm soll der Roboter fahren
 +
 +# 120 Grad/s Drehgeschwindigkeit, Drehwinkel, nicht warten, sondern gleich den nächsten Befehl.
 +g.links.run_angle(520, distanz * g.grad_pro_cm, wait=False)
 +g.rechts.run_angle(520, distanz * g.grad_pro_cm, wait=True)  # Dito, aber warten, bis fertig gedreht.
 +</code>
 +Um nicht immer ev3Geometrie schreiben zu müssen, importiert man es mit '' as g''. Dadurch kann man mit ''g.'' auf die Elemente des Basismoduls zugreifen.
 +</WRAP>
 +
 +
 +<WRAP center round todo>
 +<code python kreis-80cm.py>
 +#!/usr/bin/env pybricks-micropython
 +
 +import ev3Geometrie as g
 +from math import pi  # Wert pi importieren
 +
 +# Kreis mit Durchmesser d und geschwindigkeit v fahren
 +v = 400
 +d = 80
 +di = d - (2 * g.spur)
 +u = d * pi
 +ui = di * pi
 +vi = v * ui / u
 +print("va={}, vi={}, da={}, di={}, ua={}, ui={}".format(v, int(vi), d, int(di), int(u), int(ui)))
 +
 +g.links.run_angle(v, u * g.grad_pro_cm, wait=False)
 +g.rechts.run_angle(vi, ui * g.grad_pro_cm, wait=True) 
 +</code>
 +</WRAP>