Ir para o conteúdo
  • 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

Mensagens Recomendadas

_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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.