import math
import time
import datetime as dt
import RPi.GPIO as GPIO
import os
import sys
# to run this program
# open terminal and nagigate to the directory then type "sudo python stepper01.py"
# this will run the program


GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(4 , GPIO.OUT)
GPIO.setup(17 , GPIO.OUT)
GPIO.setup(27 , GPIO.OUT)
GPIO.setup(22 , GPIO.OUT)
GPIO.setup(26, GPIO.OUT)
GPIO.setup(19, GPIO.OUT)
GPIO.setup(10 , GPIO.IN)

def checkMedia():
    checkMediaUSB = os.path.isdir("/media/pi/KINGSTON")
    if checkMediaUSB == True:
        checkFolder = os.path.isdir("/media/pi/KINGSTON/Photos")
        if checkFolder == False:
            os.mkdir("/media/pi/KINGSTON/Photos")
        checkFolders = os.path.isdir("/media/pi/KINGSTON/Photos/Photo0")
        if checkFolders == False:
            os.mkdir("/media/pi/KINGSTON/Photos/Photo0")
            os.mkdir("/media/pi/KINGSTON/Photos/Photo1")
            os.mkdir("/media/pi/KINGSTON/Photos/Photo2")
            os.mkdir("/media/pi/KINGSTON/Photos/Photo3")
            os.mkdir("/media/pi/KINGSTON/Photos/Photo4")
            os.mkdir("/media/pi/KINGSTON/Photos/Photo5")
            os.mkdir("/media/pi/KINGSTON/Photos/Photo6")
            os.mkdir("/media/pi/KINGSTON/Photos/Photo7")
            os.mkdir("/media/pi/KINGSTON/Photos/Photo8")
            os.mkdir("/media/pi/KINGSTON/Photos/Photo9")
            os.mkdir("/media/pi/KINGSTON/Photos/Photo10")
            os.mkdir("/media/pi/KINGSTON/Photos/Photo11")
            os.mkdir("/media/pi/KINGSTON/Photos/Photo12")
            os.mkdir("/media/pi/KINGSTON/Photos/Photo13")
            os.mkdir("/media/pi/KINGSTON/Photos/Photo14")
            os.mkdir("/media/pi/KINGSTON/Photos/Photo15")
            os.mkdir("/media/pi/KINGSTON/Photos/Photo16")
            os.mkdir("/media/pi/KINGSTON/Photos/Photo17")
            os.mkdir("/media/pi/KINGSTON/Photos/Photo18")
            os.mkdir("/media/pi/KINGSTON/Photos/Photo19")
            os.mkdir("/media/pi/KINGSTON/Photos/Photo20")
            os.mkdir("/media/pi/KINGSTON/Photos/Photo21")
            os.mkdir("/media/pi/KINGSTON/Photos/Photo22")
            os.mkdir("/media/pi/KINGSTON/Photos/Photo23")
            os.mkdir("/media/pi/KINGSTON/Photos/Photo24")
            os.mkdir("/media/pi/KINGSTON/Photos/Photo25")

def AllZero():
    GPIO.output(4, False)
    GPIO.output(17, False)
    GPIO.output(22, False)
    GPIO.output(27, False)
    
def timeSleep1():
    time.sleep(.1)

def rotate(ln1,ln2,ln3,ln4):
    AllZero()
    if ln1 == 1:
        GPIO.output(4, True)
    else:
        GPIO.output(4, False)
    if ln2 == 1:
        GPIO.output(17, True)
    else:
        GPIO.output(17, False)
    if ln3 == 1:
        GPIO.output(22, True)
    else:
        GPIO.output(22, False)
    if ln4 == 1:
        GPIO.output(27, True)
    else:
        GPIO.output(27, False)
    timeSleep1()
    AllZero()

def resetStart():
    rotate(1,0,0,0)
    rotate(0,1,0,0)
    rotate(0,0,1,0)
    rotate(0,0,0,1)
    rotate(1,0,0,0)
    rotate(0,1,0,0)
    AllZero()
    time.sleep(2)
    
def checkSlot():
    g = 1
    while g==1:        
        rotate(1,0,0,0)
        if GPIO.input(10)==0:
            resetStart()
            g=0
            return
        rotate(0,0,0,1)    
        if GPIO.input(10)==0:
            resetStart()
            g=0
            return
        rotate(0,0,1,0)    
        if GPIO.input(10)==0:
            resetStart()
            g=0
            return
        rotate(0,1,0,0)    
        if GPIO.input(10)==0:
            resetStart()
            g=0
            return
def takePicture(fileNumber):
    y = str(F)
    filename = ("pic_")+str(B)+("_")+y+(".jpg")
    print (filename)
    partA=("/media/pi/KINGSTON/Photos/Photo")
    partB=str(B)
    os.chdir(partA + partB)
    command = ("sudo raspistill -t 200 -n -o ")
    os.system(command + filename)
    os.chdir("/home/pi")
    
GPIO.output(26, False)
GPIO.output(19, False)
F = 0
checkMedia()
checkSlot()
while True:
    startTime = time.time()
    GPIO.output(26, True)
    time.sleep(1)
    GPIO.output(19, True)
    time.sleep(1)
    checkMedia()
    for B in range(0, 25):
        for x in range(0,2):
            rotate(0,1,0,0)
            rotate(0,0,1,0)
            rotate(0,0,0,1)
            rotate(1,0,0,0)
        takePicture(B)
    F = F + 1
    checkSlot()
    GPIO.output(26, False)
    time.sleep(1)
    GPIO.output(19, False)
    time.sleep(1)
    endTime = time.time()
    totalTime = endTime - startTime
    delayTime = 600 - totalTime
    #15 minutes would be 900
    #10 minutes would be 600
    time.sleep(delayTime)

    
    
    



    





