Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I am trying to make a custom PWM script to work with my Charlieplexed series of LEDs. However, I am struggling to make certain intensity values look smooth with no flashing. Different brightness values will have the LED on for a different amount of ticks. In order to make it feel smooth, I need to optimize the spacing of on and off ticks for the LEDs but I can quite figure out how to do so.

If you have a pattern that has x amount of booleans and n amount of them are true, how would you go about equally spacing out the trues as much as possible?

Here is an example of what I am looking for:

x = 10, n = 7

Desired result: 1,1,1,0,1,1,0,1,1,0

x = 10, n = 4

Desired result: 1,0,1,0,0,1,0,1,0,0

question from:https://stackoverflow.com/questions/65947381/python-equally-spacing-trues-in-a-series-of-booleans

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
150 views
Welcome To Ask or Share your Answers For Others

1 Answer

You can use the linspace function of numpy for this.

import numpy as np

x = 10
n = 7

# Gets the indices that should be true
def get_spaced_indices(array_length, num_trues):
  array = np.arange(array_length)  # Create array of "indices" 0 to x
  indices = np.round(np.linspace(0, len(array) - 1, num_trues)).astype(int)  # Evenly space the indices
  values = array[indices]
  return values

true_indices = get_spaced_indices(x, n)
print("true_indices:", true_indices)

result = [0] * x  # Initialize your whole result to "false"
for i in range(x):
  if i in true_indices:  # Set evenly-spaced values to true in your result based on indices from get_spaced_indices
    result[i] = 1

print("result:", result)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...