Skip to content
Snippets Groups Projects
Select Git revision
  • 499a5c5559c7d48a6896eccd1da75f9c10bff9cb
  • master default protected
2 results

index.html

Blame
  • main.py 2.20 KiB
    from machine import Pin, PWM, Timer
    from time import sleep, sleep_us
    
    # constants
    spike_duration = 3.5 # spike duration, ms
    pulse_duration = 500 # dwell (including spike time), ms
    total_cycle = 3000  # period of the cycle, ms
    
    sd_math = int(spike_duration*1000)
    pd_math = int((pulse_duration-spike_duration)*1000)
    
    # establish pins
    led_pin = Pin(27, Pin.OUT)
    sol_pin = Pin(29, Pin.OUT)
    
    # establish timer object
    timer = Timer() # timer object
    
    # initiate variables
    duty = 0 # duty cycle, %
    duty_percent = 15
    hold_duty = round(duty_percent/100*65535) # reduced duty cycle, %
    
    # pwm object, off
    pwm_led = PWM(led_pin, freq=10000, duty_u16=duty)
    pwm_sol = PWM(sol_pin, freq=100000, duty_u16=duty)
    
    def pwm_control(timer):
    
        # on cycle
        pwm_led.duty_u16(65535) # set the duty cycle of the led
        pwm_sol.duty_u16(65535) # set the duty cycle of the solenoid
        sleep_us(sd_math)
        
        # pwm cycle
        pwm_led.duty_u16(hold_duty) # set the duty cycle of the led
        pwm_sol.duty_u16(hold_duty) # set the duty cycle of the solenoid
        sleep_us(pd_math)
        
        # off cycle
        pwm_led.duty_u16(0) # set the duty cycle of the led
        pwm_sol.duty_u16(0) # set the duty cycle of the solenoid
        
    print("initiate runtime")
    
    try:
        # timer initialize
        timer.init(period=total_cycle, mode=Timer.PERIODIC, callback=pwm_control)
    
        # allocate for extra application functionality
        while True:
            pass
            sleep(10)
    
    except KeyboardInterrupt:
        # catch a soft reboot or keyboard interrupt
        print("omg")
        
    
    # turn off the dang pins! this for your own good
    # (unless you want a burnt out solenoid)
    finally:
        print("purge")
        
        # turn off the main timer
        timer.deinit()
    
        # set pwm duty cycle to 0, this way needs a delay before
        # the pwm.deinit() call unfortunately
        #pwm_led.duty_u16(0) # set the duty cycle of the led
        #pwm_sol.duty_u16(0) # set the duty cycle of the solenoid
        #time.sleep(0.1)
        
        # turn off the pwm timers
        pwm_led.deinit()
        pwm_sol.deinit()
        
        
        # reinitialize pins as digital outputs
        led_pin.init(Pin.OUT)
        sol_pin.init(Pin.OUT)
        
        # set digital pins to 0
        led_pin.value(0)
        sol_pin.value(0)
    
        
        print("purge complete")