ich bastle gerade an einem Skript, welches theoretisch einen 3D Drucker steuern könnte. Ob ich jemals das ganze in die Praxis umsetze, bleibt abzuwarten, allerdings interessiert mich die theoretische Umsetzung. Für meine Tests habe ich drei LEDs für die drei Motoren stellvertretend genommen.
Hierfür stelle ich mir vor, dass ich eine Text Datei bekomme (in der praktisch das zu druckende Objekt als 0 und 1 hinterlegt ist):
Code: Alles auswählen
3D_Druck
motorx,motory,motorz
0,0,0
0,0,0
1,1,1
0,0,0
0,1,1
0,0,0
1,1,1
0,0,0
0,1,1
0,0,0
Code: Alles auswählen
#!/usr/bin/env python
import threading
import RPi.GPIO as gpio
import time
gpio.cleanup()
gpio.setwarnings(False)
gpio.setmode(gpio.BCM)
#pins + dateinamen
motorpinx = 4
motorpiny = 17
motorpinz = 27
dateix = "3D_x.txt"
dateiy = "3D_y.txt"
dateiz = "3D_z.txt"
class motor (threading.Thread):
def __init__(self, pin, dateiname):
#erste anlaufstelle, wenn motor() erschaffen wird
#uebergabe der ganzen variablen
threading.Thread.__init__(self)
self.pin = pin
self.pin = int(self.pin)
self.dateiname = dateiname
#initiieren der motorpins
gpio.setup(self.pin, gpio.OUT)
gpio.output(self.pin, False)
def run(self):
#gehe auf Position Null
for i in range (5):
gpio.output(self.pin, True)
time.sleep(0.3)
gpio.output(self.pin, False)
time.sleep(0.3)
#fuehre eingaben aus
#erst datei lesen, dann jedes einzelne zeichen umsetzen in 1 (an) oder 0 (aus)
dateiname = self.dateiname
motor_file_in_read = open(dateiname)
motor_file_in = motor_file_in_read.read()
for zeichen in range(len(motor_file_in)):
if motor_file_in[zeichen] == "1":
gpio.output(self.pin, True)
time.sleep(0.7)
gpio.output(self.pin, False)
time.sleep(0.3)
else:
time.sleep(1)
motor_file_in_read.close()
#gehe auf Position Null
for i in range (5):
gpio.output(self.pin, True)
time.sleep(0.3)
gpio.output(self.pin, False)
time.sleep(0.3)
def main():
#alle einzelnen linien aus der ursprungsdatei
lines = []
#code-dateien auf null setzen
deleting = open("3D_x.txt", "w")
deleting.write("")
deleting = open("3D_y.txt", "w")
deleting.write("")
deleting = open("3D_z.txt", "w")
deleting.write("")
#alle eingangs- +ausgangsdateien öffnen
file_in = open("3D_Druck.txt")
file_outx = open("3D_x.txt", "w")
file_outy = open("3D_y.txt", "w")
file_outz = open("3D_z.txt", "w")
#jede einzelne zeile aus ursprungsdatei einlesen
for line in file_in.readlines():
lines.append(line)
file_in.close()
#ueberpruefen, ob datei wirklich ein 3D_Auftrag beinhaltet + erste beiden zeilen loeschen, sonst Fehler
#entsprechen: "3D_Druck" + "motorx,motory,motorz,extruder\n"
if lines[0] == "3D_Druck\n":
lines.remove("3D_Druck\n")
lines.remove("motorx,motory,motorz,extruder\n")
else:
raise NameError("kein 3D_Auftrag")
#fuer jede zeile wird der absatz entfernt und anschließend die ziffern (0 und 1) in ausgangsdatei geschrieben
for i in range(len(lines)):
lines[i] = lines[i].replace("\n", "")
a = lines[i]
file_outx.write(a[0])
file_outy.write(a[2])
file_outz.write(a[4])
#alle dateien schließen
file_in.close()
file_outx.close()
file_outy.close()
file_outz.close()
#einzelne motoren erschaffen
motorx = motor(motorpinx, dateix)
motory = motor(motorpiny, dateiy)
motorz = motor(motorpinz, dateiz)
#motoren starten
motorx.start()
motory.start()
motorz.start()
if __name__=='__main__':
main()
3 LEDs für Motoren x,y,z
Meine Frage ist jetzt, unabhängig von der Hardware: laufen damit wirklich alle drei initiierten Threads (motorx, motory & motorz) ganz genau gleichzeitig? Weil dies ist natürlich nötig, um eine gute Qualität für den Druck zu gewährleisten. Und hat jemand eine Idee, was ich noch verbessern könnte?
Also meine LEDs blinken (sichtbar) gleichzeitig, allerdings heißt das noch lange nicht, das dem auch so ist...
Für die, die auch die Hardware verstehen wollen: später soll dann eine 0 heißen: nichts. eine 1 heißt: nach "vorne" und eine -1 heißt: nach "hinten".
Vielen Dank für Eure Antworten
VG
elchico
PS: meine Kommentare sind etwas unschön, die waren eigentlich auch nur für mich bestimmt. Tut mir Leid, falls deswegen beim lesen Schwierigkeiten entstehen könnten.