2016-11-16 50 views
0

目前我正在使用覆盆子pi的气压传感器。我使用的是延时和我的代码看起来像这样,如何在Python中使用时间延迟时在两个输出之间放置空格?

import smbus 
import time 

while True: 
try: 
# Get I2C bus 
bus = smbus.SMBus(1) 

# BMP280 address, 0x76(118) 
# Read data back from 0x88(136), 24 bytes 
b1 = bus.read_i2c_block_data(0x76, 0x88, 24) 

# Convert the data 
# Temp coefficents 
dig_T1 = b1[1] * 256 + b1[0] 
dig_T2 = b1[3] * 256 + b1[2] 
if dig_T2 > 32767 : 
    dig_T2 -= 65536 
dig_T3 = b1[5] * 256 + b1[4] 
if dig_T3 > 32767 : 
    dig_T3 -= 65536 

# Pressure coefficents 
dig_P1 = b1[7] * 256 + b1[6] 
dig_P2 = b1[9] * 256 + b1[8] 
if dig_P2 > 32767 : 
    dig_P2 -= 65536 
dig_P3 = b1[11] * 256 + b1[10] 
if dig_P3 > 32767 : 
    dig_P3 -= 65536 
dig_P4 = b1[13] * 256 + b1[12] 
if dig_P4 > 32767 : 
    dig_P4 -= 65536 
dig_P5 = b1[15] * 256 + b1[14] 
if dig_P5 > 32767 : 
    dig_P5 -= 65536 
dig_P6 = b1[17] * 256 + b1[16] 
if dig_P6 > 32767 : 
    dig_P6 -= 65536 
dig_P7 = b1[19] * 256 + b1[18] 
if dig_P7 > 32767 : 
    dig_P7 -= 65536 
dig_P8 = b1[21] * 256 + b1[20] 
if dig_P8 > 32767 : 
    dig_P8 -= 65536 
dig_P9 = b1[23] * 256 + b1[22] 
if dig_P9 > 32767 : 
    dig_P9 -= 65536 

# BMP280 address, 0x76(118) 
# Select Control measurement register, 0xF4(244) 
#  0x27(39) Pressure and Temperature Oversampling rate = 1 
#     Normal mode 
bus.write_byte_data(0x76, 0xF4, 0x27) 
# BMP280 address, 0x76(118) 
# Select Configuration register, 0xF5(245) 
#  0xA0(00) Stand_by time = 1000 ms 
bus.write_byte_data(0x76, 0xF5, 0xA0) 

time.sleep(0.5) 

# BMP280 address, 0x76(118) 
# Read data back from 0xF7(247), 8 bytes 
# Pressure MSB, Pressure LSB, Pressure xLSB, Temperature MSB, Temperature  LSB 
# Temperature xLSB, Humidity MSB, Humidity LSB 
data = bus.read_i2c_block_data(0x76, 0xF7, 8) 

# Convert pressure and temperature data to 19-bits 
adc_p = ((data[0] * 65536) + (data[1] * 256) + (data[2] & 0xF0))/16 
adc_t = ((data[3] * 65536) + (data[4] * 256) + (data[5] & 0xF0))/16 

# Temperature offset calculations 
var1 = ((adc_t)/16384.0 - (dig_T1)/1024.0) * (dig_T2) 
var2 = (((adc_t)/131072.0 - (dig_T1)/8192.0) * ((adc_t)/131072.0 -  (dig_T1)/8192.0)) * (dig_T3) 
t_fine = (var1 + var2) 
cTemp = (var1 + var2)/5120.0 
fTemp = cTemp * 1.8 + 32 

# Pressure offset calculations 
var1 = (t_fine/2.0) - 64000.0 
var2 = var1 * var1 * (dig_P6)/32768.0 
var2 = var2 + var1 * (dig_P5) * 2.0 
var2 = (var2/4.0) + ((dig_P4) * 65536.0) 
var1 = ((dig_P3) * var1 * var1/524288.0 + (dig_P2) * var1)/524288.0 
var1 = (1.0 + var1/32768.0) * (dig_P1) 
p = 1048576.0 - adc_p 
p = (p - (var2/4096.0)) * 6250.0/var1 
var1 = (dig_P9) * p * p/2147483648.0 
var2 = p * (dig_P8)/32768.0 
pressure = (p + (var1 + var2 + (dig_P7))/16.0)/100 

# Output data to screen 
print "Temperature in Celsius : %.2f C" %cTemp 
print "Temperature in Fahrenheit : %.2f F" %fTemp 
print "Pressure : %.2f hPa " %pressure 
    # add a short sleep here at the end... 
    sleep(1) 
except KeyboardInterrupt: 
# quit 
    sys.exit() 

上面的代码让我在摄氏温度,温度华氏和压力以一秒的按以下格式的延迟输出。

Temp in C 
Temp in F 
Pressure 
Temp in C 
Temp in F 
Pressure 
Temp in C 
Temp in F 
Pressure 

我想把一个间隙(我想要控制该间隙)当我使用循环和时间延迟在这种情况下(像一个换行)的各输出集之间。我的输出应该是这个样子,

Temp in C 
Temp in F 
Pressure 

Temp in C 
Temp in F 
Pressure 

Temp in C 
Temp in F 
Pressure 

我可以理解,通过将打印(“)会给出一个线空间,但有什么办法来调整这条线空间的大小?例如,如果行空间是1厘米,那么如何才能改变它/它使至0.5cm或2厘米-1任何指导会有所帮助。 感谢。

+1

是由一个'.read_i2c_block_data()'产生的输出块(包含所有3个变量)吗?还是每个.read_i2c_block_data()只返回其中的1个友善吗? – Guillaume

+0

不,有一个输出块一次产生所有3个变量。 – John

+0

好吧,那很简单,只需在打印3个变量后打印一个空行。只是'print()' – Guillaume

回答

1

您可以用鼠标右键之前或睡眠后打印空行(1)print()

+0

有什么办法可以调整这个差距吗?例如,如果空行大小为1厘米,那我怎样才能使它达到0.5厘米或2厘米?有没有办法做到这一点? – John

+0

@John:这提出了一个问题:你如何打印你的高度,压力和温度变量?编辑您的问题,向我们展示代码 – Guillaume

+0

@John行高与您的控制台字体名称和字体大小有关,所以也许您可以在打印空行之前操作它们(使尺寸变大或变小),然后再恢复它们退后。如果这是不可能的,你只能增加间隙的高度 - 打印多于一个空行 - '''1-empty-line-height * times-your-print-it''' –

相关问题