Python:这种{}格式如何工作来提取正确的数据?
我正在使用Fraser May为MCP8004(adc)编写的一些代码,我为连接到Raspberry Pi 1B+的MCP3002修改了这些代码,现在我正在尝试将收集的数据发送到sparkfun服务器,但我发现我尝试获取数据时返回的是空字符串。我是Python新手,但在学校(我)有一些编码经验 以下是我必须收集adc数据的内容:Python:这种{}格式如何工作来提取正确的数据?,python,adc,Python,Adc,我正在使用Fraser May为MCP8004(adc)编写的一些代码,我为连接到Raspberry Pi 1B+的MCP3002修改了这些代码,现在我正在尝试将收集的数据发送到sparkfun服务器,但我发现我尝试获取数据时返回的是空字符串。我是Python新手,但在学校(我)有一些编码经验 以下是我必须收集adc数据的内容: def getAdc (channel): #check valid channel if ((channel>1)or(chan
def getAdc (channel):
#check valid channel
if ((channel>1)or(channel<0)):
return -1
# Preform SPI transaction and store returned bits in 'r'
r = spi.xfer([1, (4+2+channel) << 4, 0])
#Filter data bits from retruned bits
adcOut = ((r[0]&3) << 8) + r[1]
percent = int(round(adcOut/10.24))
#print out 0-1023 value and percentage
print("ADC Output: {0:4d} Percentage: {1:3}%".format (adcOut,percent))
sleep(1)
return adcOut
我想我可以调用adc[0]
或adc[1]
来获取我想要的数据,它显示在getAdc
函数中,但显然不是,我得到的是一个空列表([]
)
我认为我的问题在于getAdc
中发生了什么,其中使用了{0:4d}
和{1:3}
,但我不确定它们是做什么的。有人能帮我把那部分分解一下吗?到目前为止,我所能找到的只是解释d
和%
功能的文档,但它们在这里的应用对我来说毫无意义
提前谢谢
*注意:adcOut
在我的getAdc
脚本之前声明为全局。选项1:
您需要指出您想要修改全局adcOut变量,而不仅仅是读取它的值。通过向函数添加一个global adcOut
,修改getAdc(),如下所示:
def getAdc (channel):
global adcOut # <-- this line is added
#check valid channel
if ((channel>1)or(channel<0)):
return -1
# Preform SPI transaction and store returned bits in 'r'
r = spi.xfer([1, (4+2+channel) << 4, 0])
#Filter data bits from retruned bits
adcOut = ((r[0]&3) << 8) + r[1]
percent = int(round(adcOut/10.24))
#print out 0-1023 value and percentage
print("ADC Output: {0:4d} Percentage: {1:3}%".format (adcOut,percent))
sleep(1)
IMO,更好的选择是#2-返回adcOut而不是使用全局变量。您应该生成
getAdc
返回值,而不是仅仅打印它们。adcOut
在哪里填充值?为什么不将getAdc(i)
存储在一个变量中?哎呀,编辑以进行更正。我使用的代码末尾有“return adcOut”…我从我的PC上的文件中复制了它,而不是我的Pi上的确切版本。我的麻烦似乎是从adcOut那里得到我想要的东西。adcOut填充在getAdc(最上面的代码)中,接下来我调用getAdc(最下面的代码)来抓取adcOut@gr8flux-请参阅我的答案,其中提供了两种可能的解决方案。请注意,后续编辑以将return语句添加到getAdc()函数是不够的。您需要在调用点使用返回值。非常好的Vijay Varadan,谢谢!没想到会是这个问题,很高兴你发现了。
def getAdc (channel):
global adcOut # <-- this line is added
#check valid channel
if ((channel>1)or(channel<0)):
return -1
# Preform SPI transaction and store returned bits in 'r'
r = spi.xfer([1, (4+2+channel) << 4, 0])
#Filter data bits from retruned bits
adcOut = ((r[0]&3) << 8) + r[1]
percent = int(round(adcOut/10.24))
#print out 0-1023 value and percentage
print("ADC Output: {0:4d} Percentage: {1:3}%".format (adcOut,percent))
sleep(1)
adcOut=[]
while True:
print("collecting data")
adc = [] #sets adc as a list
for i in range(2):
adcOut = getAdc(i) # <-- note this changed line
adc.append(adcOut)
print adcOut
print("ADC data collected!")