funktion def i(): und variablennamen hochzählen

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
obstkuchen
User
Beiträge: 13
Registriert: Dienstag 10. Februar 2015, 23:42

Hallo,
ich baue gerade einen automatischen Anschlag für unsere Kappsäge mit einem Schrittmotor im Halbschritt.
Nun habe ich 2 Fragen bezüglich der Programmierung in Python.
1. Habe ich eine Funktion gefunden womit ich die einzelnen Schritte initialisieren kann, die ich später einfach wieder aufrufen kann. Nur ich weiß nicht wie die heißt bzw. wie man diese nennt
z.b.

Code: Alles auswählen

def schritt8():
2. Wie kann ich die Schritte einfacher wieder aufrufen?

Code: Alles auswählen

i = 1
While 1:
Schritt i ()
…
…
i = i +1
Geht ja nicht :K

Die 2. Frage hat folgenden Hintergrund nach dem Grundstellung fahren ist der Motor z.b. bei schritt 6 aber mein Programm fängt ja immer bei schritt 1 an somit zuckt der Motor Kurtz und bei momentan nur 96 Schritte / Umdrehung macht das schon ein paar 10.el mm aus.

Hier mal mein kompletter Code:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import wiringpi2 as wiringpi
import signal
import sys
from time import sleep
wiringpi.wiringPiSetup()

wiringpi.pinMode(1, 1)
wiringpi.pinMode(2, 1)
wiringpi.pinMode(3, 1)
wiringpi.pinMode(4, 1)

wiringpi.digitalWrite(1, 0)
wiringpi.digitalWrite(2, 0)
wiringpi.digitalWrite(3, 0)
wiringpi.digitalWrite(4, 0)

def schritt1():
        wiringpi.digitalWrite(1,1)
        wiringpi.digitalWrite(2,0)
        wiringpi.digitalWrite(3,1)
        wiringpi.digitalWrite(4,0)
        sleep(geschwindigkeit)
def schritt2():
        wiringpi.digitalWrite(1,1)
        wiringpi.digitalWrite(2,0)
        wiringpi.digitalWrite(3,0)
        wiringpi.digitalWrite(4,0)
        sleep(geschwindigkeit)
def schritt3():
        wiringpi.digitalWrite(1,1)
        wiringpi.digitalWrite(2,0)
        wiringpi.digitalWrite(3,0)
        wiringpi.digitalWrite(4,1)
        sleep(geschwindigkeit)
def schritt4():
        wiringpi.digitalWrite(1,0)
        wiringpi.digitalWrite(2,0)
        wiringpi.digitalWrite(3,0)
        wiringpi.digitalWrite(4,1)
        sleep(geschwindigkeit)
def schritt5():
        wiringpi.digitalWrite(1,0)
        wiringpi.digitalWrite(2,1)
        wiringpi.digitalWrite(3,0)
        wiringpi.digitalWrite(4,1)
        sleep(geschwindigkeit)
def schritt6():
        wiringpi.digitalWrite(1,0)
        wiringpi.digitalWrite(2,1)
        wiringpi.digitalWrite(3,0)
        wiringpi.digitalWrite(4,0)
        sleep(geschwindigkeit)
def schritt7():
        wiringpi.digitalWrite(1,0)
        wiringpi.digitalWrite(2,1)
        wiringpi.digitalWrite(3,1)
        wiringpi.digitalWrite(4,0)
        sleep(geschwindigkeit)
def schritt8():
        wiringpi.digitalWrite(1,0)
        wiringpi.digitalWrite(2,0)
        wiringpi.digitalWrite(3,1)
        wiringpi.digitalWrite(4,0)
        sleep(geschwindigkeit)
def allesaus():
        wiringpi.digitalWrite(1,0)
        wiringpi.digitalWrite(2,0)
        wiringpi.digitalWrite(3,0)
        wiringpi.digitalWrite(4,0)
        print "alles aus"

sleep(0.1)

try:
        mmzufahren = input("Wieviele mm sollen gefahren werden? ")
        geschwindigkeit = 0.02
        mmproschritt = 0.726875
        mmgefahren = 0
        halbschritt = mmproschritt / 2

        while 1:
                schritt1()
                mmgefahren = mmgefahren + mmproschritt
                print mmgefahren , "mm"
                if mmgefahren + halbschritt >= mmzufahren:
                        brake

                schritt2()
                mmgefahren = mmgefahren + mmproschritt
                print mmgefahren , "mm"
                if mmgefahren + halbschritt >= mmzufahren:
                        brake

                schritt3()
                mmgefahren = mmgefahren + mmproschritt
                print mmgefahren , "mm"
                if mmgefahren + halbschritt >= mmzufahren:
                        brake

                schritt4()
                mmgefahren = mmgefahren + mmproschritt
                print mmgefahren , "mm"
                if mmgefahren + halbschritt >= mmzufahren:
                        brake

                schritt5()
                mmgefahren = mmgefahren + mmproschritt
                print mmgefahren , "mm"
                if mmgefahren + halbschritt >= mmzufahren:
                        brake

                schritt6()
                mmgefahren = mmgefahren + mmproschritt
                print mmgefahren , "mm"
                if mmgefahren + halbschritt >= mmzufahren:
                        brake

                schritt7()
                mmgefahren = mmgefahren + mmproschritt
                print mmgefahren , "mm"
                if mmgefahren + halbschritt >= mmzufahren:
                        brake

                schritt8()
                mmgefahren = mmgefahren + mmproschritt
                print mmgefahren , "mm"
                if mmgefahren + halbschritt >= mmzufahren:
                        brake
except:
        allesaus()
        sys.exit
Mit freuntlichem Gruß
Heiko
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wenn man meint, man müsste Variablen oder Funktionsnamen hochzählen, dass weiß man auch automatisch, dass das nicht der richtige Weg ist.

In einem Fall hinterlegst du die Werte als Tupel von Tupeln (oder Liste von Listen) und iterierst darüber:

Code: Alles auswählen

...

def make_cut(data):
    for d in data:
        wiringpi.digitalWrite(d[0], d[1])
    sleep(geschwindigkeit)

steps = (((1, 1), (2, 0), (3, 1), (4, 0)),
         ((1, 1), (2, 0), (3, 0), (4, 0)))

for step in steps:
    make_cut(step)

...
Und ein nacktes `except` am Ende ist auch suboptimal. Normalerweise fängt man gezielt Fehler ab und nicht pauschal alle.

Gruß, noisefloor
obstkuchen
User
Beiträge: 13
Registriert: Dienstag 10. Februar 2015, 23:42

Ja super danke, es läuft, jetzt muss ich nur noch herausfinden warum :)

Mit dem except am Ende ist doch gut, egal was passiert, er nimmt dem Strom von den spulen.

Oder?

MfG
Heiko
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

das wäre ehr was für try...finally, e.g: https://docs.python.org/2.7/reference/c ... l#index-13

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

@obstkuchen: Bei dem ``except`` nimmt er am Ende eben nicht den Strom weg *egal* was passiert, sondern nur wenn etwas passiert. Sollte das fehlerfrei durchlaufen bleibt der Strom an.
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

und sys.exit (sic) tut nunmal gar nix :D
obstkuchen
User
Beiträge: 13
Registriert: Dienstag 10. Februar 2015, 23:42

oh jau und break ist auch falsch geschrieben :K
Antworten