#!/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(pinFalse)

# 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(04):
    xpin gpio[pin]
    if Seq[compteur][pin]!=0:      
      GPIO.output(xpinTrue)
    else:
      GPIO.output(xpinFalse)
      
  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)