#!/usr/bin/python
#-*- coding: utf-8 -*-
# import des librairies nécessaires
import sys
import time
import RPi.GPIO as GPIO
# déclare les gpio en mode BCM
GPIO.setmode(GPIO.BCM)
# init des variables
compteur = 0
pas = 0
gpio = [17,22,23,24]
Seq = [[1,0,0,1], # 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)
# les gpio en mode output
for pin in gpio:
GPIO.setup(pin,GPIO.OUT)
GPIO.output(pin, False)
# si il y a pas d'argument
if len(sys.argv)==1: # 1 car le nom de programme est un argument
direction = -1 # sens anti-horaire
data = 4096 # 360°, 1024 1/4 de tour
timer = 1/float(1000) # 1ms
# si il y a 1 seul argument (sens du moteur)
elif len(sys.argv)==2:
direction = int(sys.argv[1])
data = 4096
timer = 1/float(1000)
# si il y a 2 arguments (sens du moteur et nombre de pas)
elif len(sys.argv)==3:
direction = int(sys.argv[1])
data = int(sys.argv[2])
timer = 1/float(1000)
# si y a 3 arguments ou plus, on ne prend que les 3 premiers (sens du moteur, nombre de pas et temps entre chaque pas)
elif len(sys.argv)>=4:
direction = int(sys.argv[1])
data = int(sys.argv[2])
timer = int(sys.argv[3])/float(1000)
# boucle infinie
while True:
pas = pas +1 # on incremente "pas" a chaque boucle et on l'affiche (pour les test )
print pas
# boucle for pour lancer la seqence
for pin in range(0, 4):
xpin = gpio[pin]
if Seq[compteur][pin]!=0:
GPIO.output(xpin, True)
else:
GPIO.output(xpin, False)
compteur += direction
# si on arrive a la fin de la sequence on la relance tant qu'on est pas a la valeur de data
if (compteur>=nbstep):
compteur = 0
if (compteur<0):
compteur = nbstep+direction
if (pas >= data):
break
# temps entre chaques pas
time.sleep(timer)