def tone(pin, frequency, duration=None): """Generates a square wave of the specified frequency on pin. """ global pwm_pins if pin not in pwm_pins: print "Pin must be one of:" for key in pwm_pins: print key exit(1) if frequency < 1 or frequency > 500000: print "Invalid frequency" exit(1) initMatch(0, 1000000 / frequency) initMatch(pwm_pins[pin], 500000 / frequency) PWM_ChannelCmd(LPC_PWM1, pwm_pins[pin], FunctionalState.ENABLE) PWM_ResetCounter(LPC_PWM1) PWM_CounterCmd(LPC_PWM1, FunctionalState.ENABLE) PWM_Cmd(LPC_PWM1, FunctionalState.ENABLE) if duration: t = threading.Timer(float(duration) / 1000.0, noTone, [pin]) t.start()
def analogWrite(pin, value): """Writes an analog value (PWM wave) to a pin. """ global pwm_pins if pin not in pwm_pins: print "Pin must be one of:" for key in pwm_pins: print key exit(1) if value < 0 or value > 255: print "Invalid duty cycle" exit(1) # 490Hz period = 1000000 / 490 pulse_width = period * value / 255 initMatch(0, period) initMatch(pwm_pins[pin], pulse_width) PWM_ChannelCmd(LPC_PWM1, pwm_pins[pin], FunctionalState.ENABLE) PWM_ResetCounter(LPC_PWM1) PWM_CounterCmd(LPC_PWM1, FunctionalState.ENABLE) PWM_Cmd(LPC_PWM1, FunctionalState.ENABLE)