2016-12-18 5 views
0

У меня была проблема с этим кодом для HUD во время катания на лыжах. Температура имеет двойную строку и скорость, когда ноль пуст. В чем проблема? Для скорости ветра и показания температуры, я с помощью датчика winspeed современной электроникой, windsensor Ред С.строки для пигмейка удваиваются и мерцают

# coding=UTF-8 

import pygame 
import sys 
import datetime 
import math 
import numpy 
import thread 
import RPi.GPIO as GPIO 
import time 
from adxl345 import ADXL345 
import Adafruit_GPIO.SPI as SPI 
from picamera import PiCamera 
import Adafruit_MCP3008 
import random 
volts = 0 
CLK = 18 
MISO = 20 
MOSI = 21 
CS = 8 
mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI) 
temp=0 
angle = 0 
velocity = 0   







def draw_borders(screen): 
    #Draws some simple borders to the display"" 
    pygame.draw.lines(screen, (255, 255, 255), False, [(0, 30), (width, 30)], 2) 

def draw_time(screen): 
    #Draws the time to the display"" 
    the_time = datetime.datetime.now() 
    time_as_string = the_time.strftime('%H:%M') 
    font = pygame.font.Font(None, 42) 
    text = font.render(time_as_string, 1, (255, 255, 255)) 
    textpos = text.get_rect(centerx=screen.get_width()/2, centery=15) 
    screen.blit(text, textpos) # paste the text into the background 

def draw_speed(screen): 
    #Draws the speed to the display"" 
    # get the speed... 
    values = [0]*8 
    for i in range(8): 
     values[i] = mcp.read_adc(i) 
     #Get's channels 
     CHANNEL_ZERO = '{0:>4}'.format(*values) #Voltage out 
     CHANNEL_ONE = '{1:>4}'.format(*values) #Raw voltage 
     CHANNEL_TWO = '{2:>4}'.format(*values) 
     #Overflow Channels 
     CHANNEL_THREE = '{3:>4}'.format(*values) 
     CHANNEL_FOUR = '{4:>4}'.format(*values) 
     CHANNEL_FIVE = '{5:>4}'.format(*values) 
     CHANNEL_SIX = '{6:>4}'.format(*values) 
     CHANNEL_SEVEN = '{7:>4}'.format(*values) 
     #Makes channels integers to divide later 
     CHANNEL_ZERO = int(CHANNEL_ZERO) 
     CHANNEL_ONE = int(CHANNEL_ONE) 
     CHANNEL_TWO = int(CHANNEL_TWO) 
     thermVolts = CHANNEL_TWO *(3.3/1023) 
     #Temperature affects voltage, -1 degree celcius is a .5 drop in voltage 
     #If temp was 20 degrees celcius, therm = .5 
     therm = (30 * thermVolts) - 0 
     #Fahrenheight to celcius 
     therm = round(therm, 0) 
     volts = CHANNEL_ONE *(3.3/1023) #+ therm 
     #Temp is based on a 21 degree celcius temp, multiply accordingly 
     temp = (4.246*volts-9.3442) 
     #Get's volts data 
     speed = math.exp(temp) 
     #Get's velocity 
     kph = (speed * 1.609) 
     velocity = (kph * .278) 
     velocity = abs(round(velocity)) 
     the_speed_string = '{} mps'.format(int(velocity)) # display as whole number 
     #Wipes second string 
     if velocity == 0: 
      the_speed_string = 0 
     else: 
      font = pygame.font.Font(None, 160) 
      text = font.render(the_speed_string, 1, (255, 255, 255)) 
      textpos = text.get_rect(centerx=screen.get_width()/2, centery=screen.get_height()/2) 
      screen.blit(text, textpos) # paste the text into the background 
     #GIVES TEMPERATURE 
     the_temp_string = u'{}°F'.format(int(therm)) 
     if int(therm) == 0: 
      the_temp_string = 'ERROR' 
     else: 
      font = pygame.font.Font(None, 65) 
      text = font.render(the_temp_string, 1, (255, 255, 255)) 
      textpos = text.get_rect(centerx=screen.get_width()-80, centery=screen.get_height()-20) 
      screen.blit(text, textpos) # paste the text into the background 


def draw_altitude(screen): 
    accel = ADXL345() 
    axes1 = accel.getAxes(True) 
    x = axes1['x'] 
    z = axes1['z'] 
    y = axes1['y'] 
    #Get's 3D angle 
    angle = numpy.angle(x+y+z+1j, deg=True) 
    the_altitude_string = u'{} °'.format(round(angle,0)) 
    font = pygame.font.Font(None, 65) 
    text = font.render(the_altitude_string, 1, (255, 255, 255)) 
    textpos = text.get_rect(centerx=120, centery=screen.get_height()-20) 
    screen.blit(text, textpos) # paste the text into the background 




def draw_temp(screen): 
    #""Draws the temperature to the display 
    the_temp = 0 
    the_temp_string = u'{}°C'.format(the_temp) 
    font = pygame.font.Font(None, 65) 
    text = font.render(the_temp_string, 1, (255, 255, 255)) 
    textpos = text.get_rect(centerx=screen.get_width()-80, centery=screen.get_height()-20) 
    screen.blit(text, textpos) # paste the text into the background 





if __name__ == '__main__': 
    pygame.init() 
    size = width, height = 650, 400 
    black = 0, 0, 0 
    screen = pygame.display.set_mode(size) 
    while True: 
     # Checks for key presses, e.g. escape to quit 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: sys.exit() 
      if event.type == pygame.KEYUP and event.key == pygame.K_ESCAPE: sys.exit() 
     # Fill the screen with black background 
     screen.fill(black) 
     # Draw all the stuff 
     draw_borders(screen) 
     draw_time(screen) 
     draw_speed(screen) 
     draw_altitude(screen) 
     draw_temp(screen) 
     # Update the display 
     pygame.display.flip() 

ответ

0

Что касается

Температура имеет двойную строку

Я дон не знаю, о чем вы говорите, но причина для

the speedi ти, когда нулевой пустой

является то, что вы явно не нарисовать что-то на экране, если velocity == 0 в этой части кода:

if velocity == 0: 
     the_speed_string = 0 
    else: 
     font = pygame.font.Font(None, 160) 
     text = font.render(the_speed_string, 1, (255, 255, 255)) 
     textpos = text.get_rect(centerx=screen.get_width()/2, centery=screen.get_height()/2) 
     screen.blit(text, textpos) # paste the text into the background 

Может быть, вы просто хотите сделать

if velocity == 0: 
    the_speed_string = 0 

font = pygame.font.Font(None, 160) 
text = font.render(the_speed_string, 1, (255, 255, 255)) 
textpos = text.get_rect(centerx=screen.get_width()/2, centery=screen.get_height()/2) 
screen.blit(text, textpos) # paste the text into the background 
+0

Я пробовал это, но он все еще мерцал, а по двойной строке я имею в виду, что одна строка постоянно 0 и переполнена правильной. – Will4cat