#!/usr/bin/python
#-*- coding: utf-8 -*-
import sys
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM) # on déclare les GPIO en mode BCM
compteur = 0
pas = 0
gpio = [18,23,24,25]
for pin in gpio: # les GPIO en mode output
GPIO.setup(pin,GPIO.OUT)
GPIO.output(pin, False)
Seq = [[1,0,0,1], # la séquence voir datasheet du moteur pas à pas
[1,0,0,0],
[1,1,0,0],
[0,1,0,0],
[0,1,1,0],
[0,0,1,0],
[0,0,1,1],
[0,0,0,1]]
nbstep = len(Seq) # le nombre de pallier dans la séquence
# si il y a pas d'argument (paramètre par défaut)
if len(sys.argv) == 1: # 1 car le nom de programme est un argument
direction = 1 # sens horaire par défaut
data = 4096 # 4096 pas par défaut (1 tour)
timer = 1/float(1000) # 1ms entre chaque pas par défaut
# si il y a 1 seul argument (sens du moteur)
elif len(sys.argv) == 2: # 2 car nom de programme et sens du moteur
if int(sys.argv[1]) == -1 or int(sys.argv[1]) == 1 : # si le 1er argument est bien -1 ou 1
direction = int(sys.argv[1]) # on récupère le sens
data = 4096 # 4096 pas par défaut (1 tour)
timer = 1/float(1000) # 1ms entre chaque pas par défaut
else : # sinon
print "erreur le 1er argument est le sens: -1 ou 1" # on affiche l'info
GPIO.cleanup() # on libère les GPIO
exit() # on sort du programme
# si il y a 2 arguments (sens du moteur et nombre de pas)
elif len(sys.argv) == 3: # 3 car nom de programme, sens du moteur et nombre de pas
if int(sys.argv[1]) == -1 or int(sys.argv[1]) == 1 : # si le 1er argument est bien -1 ou 1
direction = int(sys.argv[1]) # on récupère le sens
data = int(sys.argv[2]) # on récupère le nombre de pas
timer = 1/float(1000) # 1ms entre chaque pas par défaut
else : # sinon
print "erreur le 1er argument est le sens: -1 ou 1" # on affiche l'info
GPIO.cleanup() # on libère les GPIO
exit() # on sort du programme
# si y a 3 arguments (sens du moteur, nombre de pas et temps entre chaque pas)
elif len(sys.argv) == 4: # 4 car nom de programme, sens du moteur, nombre de pas et temps en ms entre chaque pas
if int(sys.argv[1]) == -1 or int(sys.argv[1]) == 1 : # si le 1er argument est bien -1 ou 1
direction = int(sys.argv[1]) # on récupère le sens
data = int(sys.argv[2]) # on récupère le nombre de pas
timer = int(sys.argv[3])/float(1000) # on récupère le délai en milliseconde entre chaque
else : # sinon
print "erreur le 1er argument est le sens: -1 ou 1" # on affiche l'info
GPIO.cleanup() # on libère les GPIO
exit() # on sort du programme
# si y a plus de 3 arguments
else:
print "il y a trop d'argument : sens (1 ou -1), pas (4096 : 1 tour), vitesse (temps entre chaque pas en ms)"
print "Ex: python stepper.py -1 1024 2"
GPIO.cleanup() # on libère les GPIO
exit() # on sort du programme
while True: # boucle infinie
pas = pas + 1 # on incrémente "pas"
print pas # on l'affiche.
for pin in range(0, 4): # pour chaque GPIO
xpin = gpio[pin]
if Seq[compteur][pin] != 0: # si il y a un 1 dans la séquence
GPIO.output(xpin, True) # on met le GPIO à 1
else: # sinon
GPIO.output(xpin, False) # on met le GPIO à 0
compteur += direction # on ajoute direction à compteur
if (compteur >= nbstep): # si on arrive a la fin de la séquence dans 1 sens
compteur = 0 # on la relance
elif (compteur < 0): # si on arrive a la fin de la séquence l'autre sens
compteur = nbstep + direction # on la relance
if (pas >= data): # si on est à la valeur de data
break # on sort de la boucle infinie
time.sleep(timer) # temps entre chaque pas
GPIO.cleanup() # on libère les GPIO
exit() # on sort du programme