#!/usr/bin/python
import RPi.GPIO as GPIO
import os
from time import sleep

GPIO.setmode(GPIO.BCM)

# Light FX Using (Software) PWM
GPIO.setup(17,GPIO.OUT)
GPIO.setup(27,GPIO.OUT)
GPIO.setup(22,GPIO.OUT)
GPIO.setup(5,GPIO.OUT)
GPIO.setup(6,GPIO.OUT)
GPIO.setup(13,GPIO.OUT)
GPIO.setup(19,GPIO.OUT)
GPIO.setup(26,GPIO.OUT)
GPIO.setup(12,GPIO.OUT)
GPIO.setup(25,GPIO.OUT)
GPIO.setup(24,GPIO.OUT)
GPIO.setup(23,GPIO.OUT)

output1 = GPIO.PWM(17,100)
output2 = GPIO.PWM(27,100)
output3 = GPIO.PWM(22,100)
output4 = GPIO.PWM(5,100)
output5 = GPIO.PWM(6,100)
output6 = GPIO.PWM(13,100)
output7 = GPIO.PWM(19,100)
output8 = GPIO.PWM(26,100)
output9 = GPIO.PWM(12,100)
output10 = GPIO.PWM(25,100)
output11 = GPIO.PWM(24,100)
output12 = GPIO.PWM(23,100)

os.system('clear')                                      # Clear the console
print("LED Test Player by Third Earth Design(c)")
sleep(2)

try:
    while True:                                             # Main Program - Loop Infinitely
        output1.start(100)
        sleep(0.5)
        output1.stop()
        output2.start(100)
        sleep(0.5)
        output2.stop()
        output3.start(100)
        sleep(0.5)
        output3.stop()
        output4.start(100)
        sleep(0.5)
        output4.stop()
        output5.start(100)
        sleep(0.5)
        output5.stop()
        output6.start(100)
        sleep(0.5)
        output6.stop()
        output7.start(100)
        sleep(0.5)
        output7.stop()
        output8.start(100)
        sleep(0.5)
        output8.stop()
        output9.start(100)
        sleep(0.5)
        output9.stop()
        output10.start(100)
        sleep(0.5)
        output10.stop()
        output11.start(100)
        sleep(0.5)
        output11.stop()
        output12.start(100)
        sleep(0.75)
        output12.stop()
        sleep(1)
        output1.start(100)
        output2.start(100)
        output3.start(100)
        output4.start(100)
        output5.start(100)
        output6.start(100)
        output7.start(100)
        output8.start(100)
        output9.start(100)
        output10.start(100)
        output11.start(100)
        output12.start(100)
        sleep(0.5)
        output1.ChangeDutyCycle(80)
        output2.ChangeDutyCycle(80)
        output3.ChangeDutyCycle(80)
        output4.ChangeDutyCycle(80)
        output5.ChangeDutyCycle(80)
        output6.ChangeDutyCycle(80)
        output7.ChangeDutyCycle(80)
        output8.ChangeDutyCycle(80)
        output9.ChangeDutyCycle(80)
        output10.ChangeDutyCycle(80)
        output11.ChangeDutyCycle(80)
        output12.ChangeDutyCycle(80)
        sleep(0.5)
        output1.ChangeDutyCycle(60)
        output2.ChangeDutyCycle(60)
        output3.ChangeDutyCycle(60)
        output4.ChangeDutyCycle(60)
        output5.ChangeDutyCycle(60)
        output6.ChangeDutyCycle(60)
        output7.ChangeDutyCycle(60)
        output8.ChangeDutyCycle(60)
        output9.ChangeDutyCycle(60)
        output10.ChangeDutyCycle(60)
        output11.ChangeDutyCycle(60)
        output12.ChangeDutyCycle(60)
        sleep(0.5)
        output1.ChangeDutyCycle(40)
        output2.ChangeDutyCycle(40)
        output3.ChangeDutyCycle(40)
        output4.ChangeDutyCycle(40)
        output5.ChangeDutyCycle(40)
        output6.ChangeDutyCycle(40)
        output7.ChangeDutyCycle(40)
        output8.ChangeDutyCycle(40)
        output9.ChangeDutyCycle(40)
        output10.ChangeDutyCycle(40)
        output11.ChangeDutyCycle(40)
        output12.ChangeDutyCycle(40)
        sleep(0.5)
        output1.ChangeDutyCycle(20)
        output2.ChangeDutyCycle(20)
        output3.ChangeDutyCycle(20)
        output4.ChangeDutyCycle(20)
        output5.ChangeDutyCycle(20)
        output6.ChangeDutyCycle(20)
        output7.ChangeDutyCycle(20)
        output8.ChangeDutyCycle(20)
        output9.ChangeDutyCycle(20)
        output10.ChangeDutyCycle(20)
        output11.ChangeDutyCycle(20)
        output12.ChangeDutyCycle(20)
        sleep(0.5)
        output1.ChangeDutyCycle(10)
        output2.ChangeDutyCycle(10)
        output3.ChangeDutyCycle(10)
        output4.ChangeDutyCycle(10)
        output5.ChangeDutyCycle(10)
        output6.ChangeDutyCycle(10)
        output7.ChangeDutyCycle(10)
        output8.ChangeDutyCycle(10)
        output9.ChangeDutyCycle(10)
        output10.ChangeDutyCycle(10)
        output11.ChangeDutyCycle(10)
        output12.ChangeDutyCycle(10)
        sleep(0.5)
        output1.ChangeDutyCycle(5)
        output2.ChangeDutyCycle(5)
        output3.ChangeDutyCycle(5)
        output4.ChangeDutyCycle(5)
        output5.ChangeDutyCycle(5)
        output6.ChangeDutyCycle(5)
        output7.ChangeDutyCycle(5)
        output8.ChangeDutyCycle(5)
        output9.ChangeDutyCycle(5)
        output10.ChangeDutyCycle(5)
        output11.ChangeDutyCycle(5)
        output12.ChangeDutyCycle(5)
        sleep(0.5)
        output1.stop()
        output2.stop()
        output3.stop()
        output4.stop()
        output5.stop()
        output6.stop()
        output7.stop()
        output8.stop()
        output9.stop()
        output10.stop()
        output11.stop()
        output12.stop()
        sleep(5)

except KeyboardInterrupt:
    print('LED Test Interrupted, QUIT')
    sleep(0.2)
    GPIO.cleanup()  # Exit GPIO cleanly
