Как рассчитать логарифмические значения в python для затухания светодиодов, управляемого ШИМ? - PullRequest
0 голосов
/ 28 сентября 2018

Это моя попытка замирания светодиодов с помощью моего RPI с использованием программного обеспечения ШИМ:

import time
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)

# set up GPIO pin for output
GPIOPin = 7
GPIO.setup(GPIOPin, GPIO.OUT)

# initialize PWM variable
RPWM = GPIO.PWM(GPIOPin, 100)

# start LED fading
RPWM.start(0)
try:
    while 1:
        for dc in range(0, 101, 5):
            RPWM.ChangeDutyCycle(dc)
            time.sleep(0.1)
        for dc in range(100, -1, -5):
            RPWM.ChangeDutyCycle(dc)
            time.sleep(0.1)
except KeyboardInterrupt:
    pass
    RPWM.stop()
    GPIO.cleanup()

Но я бы хотел сделать логарифмическое замирание, чтобы процесс затухания казался линейным длячеловеческий глаз.

Так что я нашел что-то вроде y = pow(2, log2(b) * (x+1) / a) - 1 с a в качестве числа шагов и b в качестве разрешения ШИМ.

Но я думаю, что это неправильная вещь для использования.

1 Ответ

0 голосов
/ 05 ноября 2018

Основная проблема в том, что у вас есть только 100 шагов замирания - это даже не 8 бит (256 шагов).

Поскольку я новичок, я попробовал это:

i=[0,1,2,3,5,7,10,15,22,31,44,63,90,100] //14 pseudo logarithmic steps
x=0; //index of steps 


try:
while 1:

for dc in range(0, 13, 1): // 14 steps


        p.ChangeDutyCycle(i[x])
        x=x+1;
        time.sleep(0.1)

Я сделал 16 битисчезает в Си до.Есть статья об этой проблеме, но на немецком языке: Светодиод ШИМ исчезает

...