#!/usr/bin/python
#-*- coding: utf-8 -*-

# import des librairies
import RPi.GPIO as GPIO
from time import sleep

GPIO.setmode(GPIO.BCM)   # numérotation BCM

moteurPin1 23      # input1 (L293D) au GPIO 23
moteurPin2 24      # input2 (L293D) au GPIO 24
moteurEnable 25    # enable (L293D) au GPIO 25

# GPIO en mode output
GPIO.setup(moteurPin1,GPIO.OUT)  
GPIO.setup(moteurPin2,GPIO.OUT)
GPIO.setup(moteurEnable,GPIO.OUT)

pwm GPIO.PWM(moteurEnable,50)   # pwm du GPIO à 50 Hz
pwm.start(45)   # démarrage du moteur à faible vitesse (pulse a 45%)


print "Rotation sens direct à faible vitesse"
GPIO.output(moteurPin1,GPIO.HIGH)
GPIO.output(moteurPin2,GPIO.LOW)
GPIO.output(moteurEnable,GPIO.HIGH)

sleep(4)  # on laisse tourner le moteur 4 secondes

# liste sens initial
liste = [45,50,55,60,65,70,75,80,85,90,95,100]

# on accélère progressivement
print "Rotation sens direct, accélération"
for in liste:
    pwm.ChangeDutyCycle(i)      
    sleep (0.25)

# 2 s à fond
print "Rotation sens direct, à fond"
sleep (4)

# on inverse la liste
liste.reverse()

print "Rotation sens direct, décélération"   
for in liste:
    pwm.ChangeDutyCycle(i)      
    sleep (0.25)

# 4 s faible vitesse
print "Rotation sens direct à faible vitesse"
sleep (4)


print "On change de sens"
GPIO.output(moteurPin1,GPIO.LOW)
GPIO.output(moteurPin2,GPIO.HIGH)

# on inverse la liste pour ce retrouvé avec la liste initial
liste.reverse()

print "Rotation sens inverse, accélération"
for in liste:
    pwm.ChangeDutyCycle(i)      
    sleep (0.25)

# 4 s à fond
print "Rotation sens inverse à fond"   
sleep (4)
    
# on inverse la liste
liste.reverse()

print "Rotation sens inverse, décélération"  
for in liste:
    pwm.ChangeDutyCycle(i)      
    sleep (0.25)

# 4 s faible vitesse
print "Rotation sens inverse à faible vitesse"
sleep (4)

# Arrêt du moteur
print "Arrêt du moteur"
GPIO.output(moteurEnable,GPIO.LOW)

pwm.stop()    # arrêt du pwm

GPIO.cleanup()  # nettoyage des GPIO

exit