树莓派用单个LED数码管显示当前环境温度

来源:互联网 发布:js写出乘法表 编辑:程序博客网 时间:2024/04/28 02:16

搞定了单片74HC595驱动单个LED数码管之后冒出了一个想法,之前不是已经搞定了温控了嘛,那能不能把温控得到的数据让数码管显示出来,虽然目前手头只有一个可以用。那只能想粗糙点的办法了,比如说只显示整数部分,然后按位显示一下。比方说27度,那么2显示1秒钟然后暗0.5秒,接着再让7显示1秒钟,然后暗掉。这样大致还是能看清的。

电路部分就比前一篇测试74HC595的时候多加了一个18b20温控管和一个4.7K上拉电阻,温控这块具体可参见之前的文章。

代码比较丑,意思到了就行。

#coding=gbk
#!/usr/bin/env python

import RPi.GPIO as GPIO
import time
import sys

GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setup(13,GPIO.OUT)  # Serail Data
GPIO.setup(11,GPIO.OUT)  # Serail Data Input
GPIO.setup(15,GPIO.OUT)  # Output Data

def GetTemp(filename):


    lines = open(filename,'r').readlines()

    #取第二行
    lineWithTemp = lines[1]
    #按等于符切分
    items = lineWithTemp.split('=')

    #获取温度值
    tempStr = items[1]
    tempVal = float(tempStr) / 1000.0

    return tempVal

def GetIntPart(s):
    items = str(s).split('.')
    return items[0]


def InputBit():
    GPIO.output(11,False)
    GPIO.output(11,True)

def ShowLED():
    GPIO.output(15,False)
    GPIO.output(15,True)

def SetData(s):
    '''
        s: abcdefg.
            1 for on
            0 for off
    '''
    for i in range(8):
        if s[i] == '1':
            GPIO.output(13,False)
        else:
            GPIO.output(13,True)
           
        InputBit()   

def ResetLED():
    SetData('00000000')
    # Output
    ShowLED()

def Show(data):
    if data == "1":
        SetData('01100000')

    if data == "2":
        SetData('11011010')

    if data == "3":
        SetData('11110010')

    if data == "4":
        SetData('01100110')

    if data == "5":
        SetData('10110110')

    if data == "6":
        SetData('10111110')     

    if data == "7":
        SetData('11100000')

    if data == "8":
        SetData('11111110')

    if data == "9":
        SetData('11110110')

    if data == "0":
        SetData('11111100')

    if data == ".":
        SetData('00000001')

    if data == "-":
        SetData('00000010')

    ShowLED()

 

def main():
    #温度的整型部分
    tmp = GetIntPart(GetTemp("/sys/bus/w1/devices/28-0516604aecff/w1_slave"))

    #取3位。
    tmp = "00" + tmp
    tmp = tmp[-3:]

    s0 = tmp[0]
    s1 = tmp[1]
    s2 = tmp[2]
   
    ResetLED()
    Show(s0)
    time.sleep(1)
    ResetLED()
   
    time.sleep(0.6)
    Show(s1)
    time.sleep(1)
    ResetLED()

    time.sleep(0.6)
    Show(s2)
    time.sleep(1)
    ResetLED()
   
if __name__ == "__main__":
 main()




0 0
原创粉丝点击