Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个python从连接到Raspberry Pi的模数转换器生成的值的总和?_Python_Raspberry Pi_Adc - Fatal编程技术网

这个python从连接到Raspberry Pi的模数转换器生成的值的总和?

这个python从连接到Raspberry Pi的模数转换器生成的值的总和?,python,raspberry-pi,adc,Python,Raspberry Pi,Adc,我正在学校里做一个初学者项目,使用Raspberry Pi 3、10位MCP3008模数转换器(ADC)和5v太阳能电池读取太阳能电池从光中获取的能量。我已经使用了模数转换器附带的代码并对其进行了一些修改,但我想对程序运行完成并输出到excel时显示的数字求和。它设置为每秒显示一个值,因此我希望在最后对所有值求和。我该怎么做?生成ADC值的代码部分是Adafruit网站和ADC一起提供给我的,所以我仍在努力理解它。运行Python2.7。这是我的密码: # Simple example of r

我正在学校里做一个初学者项目,使用Raspberry Pi 3、10位MCP3008模数转换器(ADC)和5v太阳能电池读取太阳能电池从光中获取的能量。我已经使用了模数转换器附带的代码并对其进行了一些修改,但我想对程序运行完成并输出到excel时显示的数字求和。它设置为每秒显示一个值,因此我希望在最后对所有值求和。我该怎么做?生成ADC值的代码部分是Adafruit网站和ADC一起提供给我的,所以我仍在努力理解它。运行Python2.7。这是我的密码:

# Simple example of reading the MCP3008 analog input channels and printing
# them all out for solar test

import time
import datetime
# Import SPI library (for hardware SPI) and MCP3008 library.
import Adafruit_GPIO.SPI as SPI
import Adafruit_MCP3008


# Software SPI configuration:
CLK  = 18
MISO = 23
#MISO = Master Input Slave Output
MOSI = 24
#MOSI = Master Output Slave Input
CS   = 25
mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI)

# Hardware SPI configuration:
# SPI_PORT   = 0
# SPI_DEVICE = 0
# mcp = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE))
runTime = input("How many minutes should the program run?: ")

t_end = time.time() + runTime * 60

print('Reading MCP3008 values, press Ctrl+C to quit...')
# Print nice channel column headers.
file = open('solartest.xls','a')
st = time.time()
print (datetime.datetime.fromtimestamp(st).strftime('%Y-%m-%d %H:%M:%S'))
file.write(datetime.datetime.fromtimestamp(st).strftime('%Y-%m-%d %H:%M:%S') + "\n")
print('| {0:>4} |'.format(*range(8)))
#file.write('{0:>4}'.format(*range(8)) + "\t")
print('-' * 8)
# Main program loop.
#while True:
while time.time() < t_end:
    # Read all the ADC channel values in a list.
    values = [0]*8
    for i in range(8):
        # The read_adc function will get the value of the specified channel (0-7).
        values[i] = mcp.read_adc(i)
    # Print the ADC values.
    print('| {0:>4} |'.format(*values))
    file.write('{0:>4}'.format(*values) + '\n')
    # Pause for a second.
    time.sleep(1)
#end = datetime.datetime.fromtimestamp().strftime('%Y-%m-%d %H:%M:%S')
ed = time.time()
print (datetime.datetime.fromtimestamp(ed).strftime('%Y-%m-%d %H:%M:%S'))
file.write(datetime.datetime.fromtimestamp(ed).strftime('%Y-%m-%d %H:%M:%S'))
file.close()
#读取MCP3008模拟输入通道并打印的简单示例
#他们都出去做太阳能测试了
导入时间
导入日期时间
#导入SPI库(用于硬件SPI)和MCP3008库。
将Adafruitgpio.SPI作为SPI导入
进口Adafruit_MCP3008
#软件SPI配置:
时钟=18
味噌=23
#主输入从输出
MOSI=24
#MOSI=主输出从输入
CS=25
mcp=ADAFURITY\U MCP3008.MCP3008(clk=clk,cs=cs,miso=miso,mosi=mosi)
#硬件SPI配置:
#SPI_端口=0
#SPI_设备=0
#mcp=Adafruit_MCP3008.MCP3008(spi=spi.SpiDev(spi_端口,spi_设备))
运行时=输入(“程序应该运行多少分钟?:”)
t_end=time.time()+运行时*60
打印('读取MCP3008值,按Ctrl+C退出…')
#打印漂亮的频道列标题。
文件=打开('solartest.xls','a')
st=时间。时间()
打印(datetime.datetime.fromtimestamp(st).strftime(“%Y-%m-%d%H:%m:%S”))
file.write(datetime.datetime.fromtimestamp(st).strftime(“%Y-%m-%d%H:%m:%S”)+“\n”)
打印('{0:>4}}}'.format(*范围(8)))
#file.write(“{0:>4}.”格式(*范围(8))+“\t”)
打印('-'*8)
#主程序循环。
#尽管如此:
当time.time()结束时:
#读取列表中的所有ADC通道值。
值=[0]*8
对于范围(8)中的i:
#read_adc函数将获得指定通道的值(0-7)。
值[i]=mcp.read\u adc(i)
#打印ADC值。
打印(“|{0:>4}|”。格式(*值))
file.write('{0:>4}'。格式(*值)+'\n')
#暂停一下。
时间。睡眠(1)
#end=datetime.datetime.fromtimestamp().strftime(“%Y-%m-%d%H:%m:%S”)
ed=time.time()
打印(datetime.datetime.fromtimestamp(ed).strftime(“%Y-%m-%d%H:%m:%S”))
file.write(datetime.datetime.fromtimestamp(ed).strftime(“%Y-%m-%d%H:%m:%S”))
file.close()文件
如果可能,我想计算每个ADC值的电压,并在另一列中写入excel。计算电压的公式为V=(5/1024)*ADC值。ADC值是程序运行时每秒打印的数字。我已尝试安装openpyxl,但它无法工作,因为我的python版本不是3.6或更高版本,而且我无法更新它,因为它是学校设备。

\35;虽然正确:
#while True:
allValues = []
while time.time() < t_end:
    # Read all the ADC channel values in a list.
    values = [0]*8
    for i in range(8):
        # The read_adc function will get the value of the specified channel (0-7).
        values[i] = mcp.read_adc(i)
    allValues.append(values)
    # Print the ADC values.
    print('| {0:>4} |'.format(*values))
    file.write('{0:>4}'.format(*values) + '\n')
    # Pause for a second.
    time.sleep(1)

print(sum(sum(v) for v in allValues))
所有值=[] 当time.time()结束时: #读取列表中的所有ADC通道值。 值=[0]*8 对于范围(8)中的i: #read_adc函数将获得指定通道的值(0-7)。 值[i]=mcp.read\u adc(i) allValues.append(值) #打印ADC值。 打印(“|{0:>4}|”。格式(*值)) file.write('{0:>4}'。格式(*值)+'\n') #暂停一下。 时间。睡眠(1) 打印(总和(所有值中v的总和(v))
#如果为真:
所有值=[]
当time.time()结束时:
#读取列表中的所有ADC通道值。
值=[0]*8
对于范围(8)中的i:
#read_adc函数将获得指定通道的值(0-7)。
值[i]=mcp.read\u adc(i)
allValues.append(值)
#打印ADC值。
打印(“|{0:>4}|”。格式(*值))
file.write('{0:>4}'。格式(*值)+'\n')
#暂停一下。
时间。睡眠(1)
打印(总和(所有值中v的总和(v))

我回答了你的问题。另外,尝试其他替代方法而不是openpyxl:另外,可以在没有管理员权限的情况下安装python(至少在linux上是这样)。另外,尝试其他替代方法,而不是openpyxl:另外,可以在没有管理员权限的情况下安装python(至少在linux上是这样)。iliar,谢谢。但这是我的输出pi@raspberrypi:~$sudo python solartest.py程序应该运行多少分钟?:0.05读取MCP3008值,按Ctrl+C退出。。。2019-11-22 15:46:11 | 0 |------118 | 118 | 118 | 118 | 2019-11-22 15:46:14 2183 ``而不是2183 ``应该是354@Fettster777看起来2183=354*37/6这些数字对你有什么意义吗?顺便说一句,为了导入excel。您可以将其另存为csv文件(逗号分隔值)。然后,您可以将该文件的内容直接复制粘贴到excel.com中。不,他们没有,我再次运行了程序,数值是118117118,这次的总和是1360,我明白了为什么总和是错误的。它将未打印的其他通道的值相加。共有8个通道(0-7),它将所有通道相加。频道1-7没有任何连接,所以它们只是打印随机数。有没有办法让它只和通道0求和?伊利亚,我知道了。我将for循环更新为:for I在范围(1)内:现在它可以工作了。非常感谢你的帮助!伊利亚,谢谢你。但这是我的输出pi@raspberrypi:~$sudo python solartest.py程序应该运行多少分钟?:0.05读取MCP3008值,按Ctrl+C退出。。。2019-11-22 15:46:11 | 0 |------118 | 118 | 118 | 118 | 2019-11-22 15:46:14 2183 ``而不是2183 ``应该是354@Fettster777看起来2183=354*37/6这些数字对你有什么意义吗?顺便说一句,为了导入excel。您可以将其另存为csv文件(逗号分隔值)。然后可以复制粘贴内容