# code adapted from Dagan Martinez's work
#  https://github.com/Property404/lionchief-controller
#  sensor code by Joseph Rampolla
import RPi.GPIO as GPIO
import time
GPIO.setwarnings(False)

                                                                                                                                                                                                                                                                                                       

import RPi.GPIO as GPIO
from time import sleep

GPIO.setmode(GPIO.BOARD) #uses board numbering

GPIO.setup(29, GPIO.IN, pull_up_down=GPIO.PUD_UP) # GPIO 5 sensor 2  
GPIO.setup(31, GPIO.IN, pull_up_down=GPIO.PUD_UP) # GPIO 6 sensor 1
GPIO.setup(7, GPIO.OUT)  # GPIO 4 for relay trigger turnout


from lc import LionChief
import time


chief = LionChief("44:A6:E5:3E:79:45")
chief.set_bell_pitch(1)
chief.speak()
time.sleep(3.5)
 
# Gradually start or stop
def ramp(start_speed, end_speed):
    speed = start_speed
    while speed != end_speed:
        chief.set_speed(speed)
        if speed > end_speed:
            speed -= 1
        else:
            speed += 1
        time.sleep(.2)
    chief.set_speed(end_speed)

while True:
   

    # Time to go
    chief.set_horn(True)
    time.sleep(0.75)
    chief.set_horn(False)
    chief.set_reverse(False)
    ramp(0, 12)
   
    time.sleep(15) #change number to desired delay

    while True:
       
        if GPIO.input(31) == GPIO.LOW: # waits for sensor 1 to trigger
            # relay for O27 turnout
            GPIO.output(7, 1)         # set GPIO24 to 1/GPIO.HIGH/True -- throws turnout 
            sleep(0.5)                # wait half a second  
            GPIO.output(7, 0)         # set GPIO24 to 0/GPIO.LOW/False  
            sleep(0.5)                # wait half a second  
 
            break
           
   
 
 
   
    chief.set_reverse(True)
    ramp(0,8)
    chief.set_horn(True)
    time.sleep(0.75)
    chief.set_horn(False)
   
   
   
    while True:
   
         
         if GPIO.input(29) == GPIO.LOW: # waits for sensor 2 to trigger
         
                   
            break



    # This is our stop
    chief.set_bell(True)
    time.sleep(1)
    ramp(6,0)
    time.sleep(.1)
    chief.set_bell(False)
    time.sleep(18)
    GPIO.cleanup

 
   
   





      The site owner is not and cannot be held liable for fire, electrical shock, property damage, bodily injury, loss of life, or accident of any kind caused by electrical circuits or any ideas, projects, techniques, or information contained on this site. The visitor assumes all risk and responsibility for any loss, injury, accident or damage arising from the use of information, ideas, techniques, projects, concepts, components, products, and circuits on this site.

      Please refer to hobby reference materials for correct and safe use information regarding these and all electronic circuits.  These diagrams are intended to explain how things were accomplished in theory, but it is the responsibility of the individual to locate precise information regarding electrical circuits, materials, ratings of components, etc.  Do not attempt these hobby projects, or any electrical project, if you don't have the necessary skills and experience.

[back to main page]