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

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:

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)))
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.

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.

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) 
  • lehrkraefte/sbt/informatik/glf22/robotik-mit-svcode/reusecode.txt
  • Last modified: 2023/05/12 21:30
  • by Karlheinz Schubert