我正在尝试为Neopixel Led条创建我自己的库,因为没有我需要的函数库,我想知道Led是如何工作的。在{a1}的LED中,我发现我必须以方波的形式发送24位GRB颜色值,并在24位之间暂停50us
https://i.stack.imgur.com/SG30f.png
period times of the square wave
现在我想知道如何在覆盆子圆周率的帮助下将这些24位GRB颜色转换成方波
例01
import time
import RPi.GPIO as GPIO
us = 0
GPIO.setmode(GPIO.BOARD)
GPIO.setup(18, GPIO.OUT)
def microdelay(us):
time.sleep(us/1e6)
def zero():
GPIO.output(18, GPIO.HIGH)
microdelay(0.4)
GPIO.output(18, GPIO.LOW)
microdelay(0.85)
def one():
GPIO.output(18, GPIO.HIGH)
microdelay(0.8)
GPIO.output(18, GPIO.LOW)
microdelay(0.45)
# Color Red : 0000 0000 1111 1111 0000 0000
if __name__ == "__main__":
zero()
zero()
zero()
zero()
zero()
zero()
zero()
zero()
one()
one()
one()
one()
one()
one()
one()
one()
zero()
zero()
zero()
zero()
zero()
zero()
zero()
zero()
print("strip is red")
我在控制台上获得以下输出:
pi@raspberrypi:~/Libary testing$sudo python3 LED_testing.py
LED_testing.py:9:RuntimeWarning:此通道已在使用中,仍在继续。使用GPIO.setwarnings(False)禁用警告。 GPIO.setup(18,GPIO.OUT)
条纹是红色的
pi@raspberrypi:~/图书馆测试$
例02
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(18, GPIO.OUT)
def usleep(us: int):
time.sleep(us/1e6)
def one():
GPIO.output(18, GPIO.HIGH)
usleep(0.8)
GPIO.output(18, GPIO.LOW)
usleep(0.45)
def zero():
GPIO.output(18, GPIO.HIGH)
usleep(0.4)
GPIO.output(18, GPIO.LOW)
usleep(0.85)
if __name__ == '__main__':
for i in range(0, 862):
# Green
one()
one()
one()
one()
one()
one()
one()
one()
# Red
one()
one()
one()
one()
one()
one()
one()
one()
# Blue
one()
one()
one()
one()
one()
one()
one()
one()
usleep(50)
print("strip is white")
控制台输出: pi@raspberrypi:~/Libary testing$sudo python3 LED_testing.py
LED_testing.py:7:运行时警告:此通道已在使用中,仍在继续。使用GPIO.setwarnings(False)禁用警告。 GPIO.setup(18,GPIO.OUT) 条纹是白色的
pi@raspberrypi:~/图书馆测试$
方波只是数字信号的图形表示。 下表很重要:
然后查看序列图时:
您可以看到以下内容:
提示:要睡眠0.4毫秒,您可以执行以下操作:
假设您希望发送GBR值(255、16、12)。 这将转化为: 1111111100000000001100
在python中,这可以通过位操作完成:
文档状态:按照GRB的顺序发送数据,并首先发送高位
“高位先发送”表示从左到右发送
您的代码可能是以下几行代码之一:
相关问题 更多 >
编程相关推荐