我正在尝试通过io.output()
函数通过GPIO使用户选择的LED上的Raspberry Pi(B +型)开关。但是我很难让我的脚本这样做。该脚本是用Python3编写的。
# Set GPIO pins for each color
red = 11
yellow = 9
green = 10
# etc...
# LEDs are set as output
io.setup(red, io.OUT)
io.setup(yellow, io.OUT)
io.setup(green, io.OUT)
# etc...
# Function
def phase(color):
io.output(color, io.HIGH)
color = input("Please choose a color like red, yellow, green, ...: ")
我要实现的目标是:根据用户的选择,打开特定的LED。
用户可以选择10种颜色。
我知道可以通过以下方式实现:
if color == 'red':
io.output(red, io.HIGH)
elif color == 'yellow':
io.output(yellow, io.HIGH)
elif color == 'green':
io.output(green, io.HIGH)
#etc...
但是我只希望有1行代码可以根据用户选择的颜色更新变量color
:
io.output(color, io.HIGH)
似乎在Python3中设置变量的工作方式与我想的有点不同(我已经习惯了PHP,但还没有Python3的经验)。
我希望变量color
由Python处理到用户输入(比如说“红色”)中,然后应将其处理成相应的GPIO引脚号11
。 / p>
但是那没有发生,我不知道为什么。我不断收到错误消息,告诉我color
应该是整数。而且我认为在这种情况下,变量的工作方式类似于color = red = 11
。
如何在io.output()
函数中传递变量?可能吗?还是我不得不为每个彩色LED编写一行代码?这对我来说似乎很多余,但也许我在这里完全错了。
答案 0 :(得分:1)
您的变量color
包含一个字符串。您似乎想要某种方式将该字符串映射为整数。一个dictionary(dict
)会很完美,并且还允许其他一些优化:
# Set GPIO pins for each color
colors = {
'red': 11,
'yellow': 9,
'green': 10,
# etc...
}
# LEDs are set as output
[io.setup(v, io.OUT) for k,v in colors]
# Function
def phase(color):
io.output(colors[color], io.HIGH)
color = input("Please choose red, yellow or green: ")
phase(color)
答案 1 :(得分:1)
您可以使用字典将字符串转换为整数
all_colors = {
"red": 11,
"yellow": 9,
"green": 10
}
color = input("Please choose a color like red, yellow, green, ...: ")
color = color.lower().strip()
if color in all_colors:
value = all_colors[color]
io.output( value, io.HIGH )
else:
print("unknown color")