Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

_ze_pedro_

duvida em programaçao e erro de funçao

Recommended Posts

_ze_pedro_

boas

encontrei este forum que nao conhecia e vi que era mesmo de um forum assim que necessitava

bem entao vou começar por explicar o meu projecto

o que estou a fazer è uma sonda movel em que consiste basicamente num carro que tem sensores e é comandado por o arduino a distancia por radio frequencia (xbee)

vou comandar o carro a partir de um comando tipo play station com o python com uma janela de controle onde vejo o sentido onde anda o carro e para que lado esta a virar e quero ver tambem o valor dos sensores (uma duvida)

eu ja tenho o programa feito com pygame para comandar com o joystick o carro e vou utilizar  o pyserial PARA Comunicar com o xbee

agora deparei.me com uma situação eu tenho o programa bem feito que fiz num pc com o o python 2.6 com o pygame 1.9.1 e o pyserial 2.5

neste em que tou a trabalhar agora tem tudo igual mas o programa nao funciona e da.me este erro

Traceback (most recent call last):

  File "C:\Documents and Settings\Pedro\Ambiente de trabalho\Script1.py", line 43, in <module>

    screen = pygame.display.set_mode(size) # Cria uma janela do tamanho da imagem de fundo

error: No available video device

>>>

mas o programa esta a funcionar

gostava de saber o porque a unica diferença è o windows que no outro era o vista e aqui é o xp pode ser esse o problema? ou pode ser outra coisa qualquer?

agora tenho outra duvida

eu tenho uma funçao para mostrar a hora e a data mas tem um "bug" os numero vao contado e vao ficando sempre por tras ou seja depois de uns segundos ou minutos ja nao se entende nada

a funçao è esta :

    if pygame.font:

        font = pygame.font.Font(None, 22)

        curtime = time.strftime("%Y/%m/%d %H:%M:%S")

        txt_time = font.render(curtime, 1, (200, 200, 200))

        pygame.draw.rect(background, (0, 0, 0), pygame.Rect(500, 30, 150, 20), 0)

        background.blit(txt_time, (470, 455))

como consigo resolver o problema?

tenho tambem outra duvida como exporto os sinais dos sensores e imprimir os sinais no python?

cump.

ze pedro

Share this post


Link to post
Share on other sites
Kratos

Preciso analizar mais afundo seu problema, mas, por hora:

: erro "No available video device", pode ser que falte algum drive o seu video, confira as configurações do seu PC.

: Ainda não analizei .. logo mais  :cheesygrin:

: Creio que isto te ajude: http://code.google.com/p/python-xbee/

:) [MSN: eu_mesmoSP@hotmail.com]


"Vejo sempre além, pois me apóio em ombro de Gigantes"

Share this post


Link to post
Share on other sites
_ze_pedro_

pois mas que drive? nos outros pc funciona tudo a primeira

podes.me dizer qual pode ser?

obrigado pela resposta

espero que me consigas ajudar  no resto que ando aqui a "bater com a cabeça" e nao sei como resolver

cump.

ze pedro

Share this post


Link to post
Share on other sites
Kratos

pois mas que drive? nos outros pc funciona tudo a primeira

podes.me dizer qual pode ser?

obrigado pela resposta

espero que me consigas ajudar  no resto que ando aqui a "bater com a cabeça" e nao sei como resolver

cump.

ze pedro

:cheesygrin:

: Erro "No available video device", como vimos, realmente falta o drive o seu video, você precisa atualiza-lo com o fabricante.

: OK, corrigido:

if pygame.font:
        font = pygame.font.Font(None, 22)
        curtime = time.strftime("%d/%m/%Y %H:%M:%S") # ("%Y/%m/%d %H:%M:%S")
        #print curtime
        txt_time = font.render(curtime, 1, (200, 200, 200), (0,0,0))  

: Aqui você encontra o wiki: http://code.google.com/p/python-xbee/

😎


"Vejo sempre além, pois me apóio em ombro de Gigantes"

Share this post


Link to post
Share on other sites
_ze_pedro_

boas mais uma vez :thumbsup:

tenho uma duvida lol

eu tou a receber  um valor de um sensor de temperatura lm35 pela porta usb quero ler esse valor como consigo fazer isso ja estive a tentar mas nao consigo

o codigo é este

    # -*- coding: iso-8859-15 -*-

    import serial # biblioteca pyserial

    import time # biblioteca do tempo para o relogio

    import pygame # biblioteca pygame

    import os

    import sys

    from pygame.locals import *

    from pygame import joystick, event

    i = 0 # variavel inicial do botao btn_2 (luz on)

    a = 0 # variavel inicial da botao btn_1 (luz off)

    b = 1 # tentativas esgotadas

    c = 3 # numero de tentativas

    s = 1 # variavel do while para a porta serie

    p = 0 # variavel do while da porta serie

    #--------------------------------------------------------------------------------------------------------------------------------

    ##########

    #-PASSWORD-#

    ##########

    pw = 9999 # Password

    print "AVISO\n\nTEM 3 TENTATIVAS" # imprime o numero de tentativas no inicio

    password = raw_input ("\nInserir Password:")# valor inserido na password

     

    while password != str(pw): # enquando a password nao foi correcta imprime "pass errada" e permite colocar outra vez nova password

        c = c - 1 # menos uma tentativa

        print ("\nPassword Errada\n___________________________________")

        if c == 1: #se o numero de tentativa for = 1

            print "\nAVISO\n\nTEM", c, "TENTATIVA" # imprime "tentativa"

        else:

            if c != 0: #se for diferente de 0

                print "\nAVISO\n\nTEM", c, "TENTATIVAS" #imprime "tentativas"

     

        if (b == 3): #se o numero de tentativas utilizadas for = 3

         

            print ("\n\nNUMERO DE TENTATIVAS ESGOTADAS")

            time.sleep(2)

            os._exit(1) # para o python shell e nao avança mais

        else: # se nao

            b = b + 1 # incrementa 1

         

     

        password = raw_input ("\nInserir Password:") # inserir de novo a password

         

    print "\n\nPASSWORD CORRECTA\n\n___________________________________"   

         

         

     

    #---------------------------------------------------------------------------------------------------------------------------------

    # normalizar os valores do joystick de -1 e 1 para 1 e 2

    def normalizar(num):

        if num == -1:

            num = 1

        elif num == 1:

            num = 2

        return num

    def load_image(name, colorkey=None):

        fullname = os.path.join('images', name)

        try:

            image = pygame.image.load(fullname)

        except pygame.error, message:

            print 'Cannot load image:', name

            raise SystemExit, message

        image = image.convert()

        if colorkey is not None:

            if colorkey is -1:

                colorkey = image.get_at((0,0))

            image.set_colorkey(colorkey, RLEACCEL)

        return image, image.get_rect()

    #---------------------------------------------------------------------------------------------------------

    #########################

    """ Porta Série setup """

    #########################

    print ("\nPORTA SÉRIE")

    porta1 = raw_input("\nNumero da porta: ") # inserir o numero da porta

    #porta1 = 3

    porta = int(porta1) - 1

    while ((s == 1) and (p == 0)):

      print ("___________________________________\n\nPORTA SÉRIE\n\nInserir Novamente")

        porta1 = raw_input("\nNumero da porta: ") # inserir numero de novo

        porta = int(porta1) - 1

        try:

            ser = serial.Serial(porta)  # abre a porta usb

            print 'A usar a porta',ser.portstr     

            s = 1

            p = 1

        except:

            print '\nERRO: Porta nao encontrada ou em uso.'

            s = 1

            p = 0

    ser.baudrate = 9600 # velocidade de transmissao 9600 bps

    #ser.open()

    #-----------------------------------------------------------------------------------------------------------------

    # ################# #

    """ Setup Inicial """

    # ################# #

    pygame.init()

    background = pygame.image.load(os.path.join('images', "bem_V.png")) # imagem de inicio "bem vido!"

    backgroundRect = background.get_rect()

    size = (width, height) = background.get_size() # Tira as dimensões da imagem de fundo

    #size = (640, 480)

    screen = pygame.display.set_mode(size) # Cria uma janela do tamanho da imagem de fundo

    #screen = pygame.display.set_mode(size, pygame.FULLSCREEN)

    screen.blit(background, backgroundRect)

    pygame.display.flip()

    pygame.display.set_caption('ExplorUino - Painel de Controlo') # coloca o nome do projecto na barra do windows

    clock = pygame.time.Clock()

    screen.blit(background, (0, 0))

    pygame.display.flip()

    time.sleep(3)

    # Fim do Setup

    #------------------------------------------------------------------------------------------------------------------

    img_fundo = pygame.image.load(os.path.join('images', "fundo.png")) # coloca a imagem de fundo

    background.blit(img_fundo, (0, 0))

    # declara as variaveis do joystick (esquerda) para comandar o sentido e a direcçao do carro

    eixox = 0

    eixoy = 0

    # declara as variaveis do joystick (direita) para comandar a direcçao da camara

    rot1 = 0

    rot2 = 0

    # declara as variaveis dos botoes do comando

    btn_1 = a # luz off

    btn_2 = i # luz on

    btn_3 = 0 # start

    try:

      j = pygame.joystick.Joystick(0) # create a joystick instance

      j.init() # init instance

      print 'Enabled joystick: ' + j.get_name()

    except pygame.error:

      print 'AVISO: Nao foi encontrado nenhum joystick.'

     

    while 1:

        clock.tick(60)# velocidade do ciclo era 60

        time.sleep(0.05)

        pygame.event.pump()# inicio do ciclo das imagens e dos valores dos comandos

        for evento in pygame.event.get():

         

            if evento.type == pygame.JOYAXISMOTION: # se os joystick apresentarem um valor

                # faz uma aproximaçao de 0 casas decimais para evitar o ruido e o tremor dos joysticks

                eixox = round(j.get_axis(0), 0)

                eixoy = round(j.get_axis(1), 0)

                rot1 = round(j.get_axis(2), 0)

                rot2 = round(j.get_axis(3), 0)

                # vai "normalizar" os valores dos joysticks de -1 ou 1 para 1 ou 2

                eixox = normalizar(int(eixox))

                eixoy = normalizar(int(eixoy))

                rot1 = normalizar(int(rot1))

                rot2 = normalizar(int(rot2))

            elif evento.type == pygame.JOYBUTTONDOWN or evento.type == pygame.JOYBUTTONUP:# se os botoes do comando apresentarem algum valor

                #declara quais sao os botoes das variaveis

                btn_1 = j.get_button(3)

                btn_2 = j.get_button(2)

                btn_3 = j.get_button(9)

             

             

     

    #------------------------------------------------

     

        ###############

        # Porta Série #

        ###############

     

        ser.write("*")       

        ser.write(str(eixoy))  #0

        ser.write(str(eixox))  #1

        ser.write(str(btn_1))  #2 b1

        ser.write(str(btn_2))  #3 b2

        #ser.write(str(rot1))    #4

        #ser.write(str(rot2))    #5 

        #ser.write(str(btn_3))  # botao start (parar tudo)

     

        #ser.write("0")          #4

        #ser.write("+")          #5

    #------------------------------------------------

     

     

        print "\nX=", eixox, " Y=", eixoy, " B1=", btn_1, " B2=", btn_2, " B3=", btn_3, "rot1=", rot1, "rot2=", rot2,  # valores das variaveis do comando

        pygame.draw.rect(background, (255, 255, 255), pygame.Rect(49, 90, 550, 350), 0)

    #Parte da Direccao do Carro

     

        if eixox == 1:

            img_dir = pygame.image.load(os.path.join('images', "esq.png"))

        elif eixox == 2:

            img_dir = pygame.image.load(os.path.join('images', "dir.png"))

        else:

            img_dir = pygame.image.load(os.path.join('images', "0.png"))

        background.blit(img_dir, (50, 110))

    #Motores

     

        if eixoy == 1:

            img_mot = pygame.image.load(os.path.join('images', "frent.png"))

        elif eixoy == 2:

            img_mot = pygame.image.load(os.path.join('images', "tr_tr.png"))

        else:

            img_mot = pygame.image.load(os.path.join('images', "parado.png"))

        background.blit(img_mot, (25, 290))

    #Luz

        if ((btn_2 == 1) or ((btn_1 == 0) and (i == 1) and (a == 1))):

            i = 1

            a = 1

            img_luz = pygame.image.load(os.path.join('images', "luz_on.png"))

            background.blit(img_luz, (350, 130))

         

        elif ((btn_1 == 1) or ((btn_2 == 0) and (i == 0)and (a == 0))):

            i = 0

            a = 0

            img_luz = pygame.image.load(os.path.join('images', "luz_off.png"))

            background.blit(img_luz, (350, 130))

    #Relógio

     

            font = pygame.font.Font(None, 16) # tipo de letra e tamanho

            curtime = time.strftime("%d-%m-%Y  %H:%M:%S") # como vai ser colocadas a hora e a data

            txt_time = font.render(curtime, 1, (255, 255, 255), (0,0,0))# cor da letra

            pygame.draw.rect(background, (0, 0, 0), pygame.Rect(500, 30, 150, 20), 0)

            background.blit(txt_time, (495, 459))#posiçao da hora e da data

            img_sensor = pygame.image.load(os.path.join('images', "sensores.png")) # coloca a imagem de fundo

            background.blit(img_sensor, (430, 250))

        if (btn_3)== 0: # se o botao do start nao for pressionado

            screen.blit(background, (0, 0))

            pygame.display.flip()# executa o ciclo de novo

     

        else: # se for pressionado

            pygame.quit()# sai da janela do projecto

            os._exit(1)# sair

cump.

ze pedro

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.