[ Foro de Python ]

Ayuda programa

09-May-2016 11:55
Curro Martin
5 Respuestas

Buenas a todos. Soy nuevo en el mundo de Python y tengo dudas. He hecho un programa con Raspberry, una protoboard y el módulo de pygame para poder simularlo. El problema que tengo es que no actúa de la manera que necesito y me gustaría que me ayudaran a sacarlo adelante. Si quieren les puedo pasar el código y comentan donde está el fallo. El programa en sí es muy extenso pero a la vez repetitivo, es decir, en el momento que se modifique el primer bucle, los siguientes son iguales. ¿Me ayudan?

Saludos.


09-May-2016 12:46
Nacho Cabanes (+84)

Si el problema es de comunicación con la protoboard, quizá no podamos ayudarte. Aun así, prueba a incluir aquí uno de esos bucles, por si vemos algún fallo en la lógica.


09-May-2016 13:14
Curro Martin



# -*- coding: utf-8 -*-
import pygame
from pygame.locals import *
import sys
import RPi.GPIO as GPIO  
from time import sleep

SCREEN_WIDTH = 1830
SCREEN_HEIGHT = 920

GPIO.setmode(GPIO.BCM)
GPIO.setup(6, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)     # Pulsador planta 0
GPIO.setup(13, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)    # Pulsador planta 1
GPIO.setup(19, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)    # Pulsador planta 2

pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) 
pygame.display.set_caption("tutorial pygame parte 2")                
fondo = pygame.image.load("imagenes/fondo normal.png").convert()
tux = pygame.image.load("imagenes/cabina.jpg").convert_alpha()

contador = 0

def sumador():
    contador = contador +1
    return()

def restador():
    contador = contador -1
    return()

try:

    #-----------------------------------------------------------------------#
    #            LLAMADA AL ASCENSOR DESDE LA PLANTA BAJA                   #
    #-----------------------------------------------------------------------#
    while True:

        if GPIO.input(6): # Si pulsamos en Planta Baja 
            print "Llamada desde Planta Baja"
            
            #--------------------------------------> ASCENSOR EN PLANTA BAJA
                        
            if contador == 0: # Si el ascensor esta en la Planta 0
                print "El ascensor se encuentra en esta planta"
                
                def main(): 
                    tux_pos_x = 890     #Ascensor (X) Planta 1
                    tux_pos_y = 735
                    
                    while True:                                                    
                        print "El ascensor se encuentra 0-0"
                        screen.blit(fondo, (0, 0))  
                        screen.blit(tux, (tux_pos_x, tux_pos_y))
                        pygame.display.flip()
                        
                if __name__ == "__main__":
                    main()
 

            #----------------------------------------> ASCENSOR EN PLANTA 1
                
            if contador == 1:      # Si el ascensor esta en la Planta1
                print "Bajando desde Planta 1"
                
                def main():
                    tux_pos_x = 890     
                    tux_pos_y = 550     
                    
                    while True:                                         
                        tux_pos_y = tux_pos_y + 1   
                        restador
                        
                        if tux_pos_y > 735:
                            tux_pos_y = 735
                            print "Ascensor en la Planta 0-1"                           

                        screen.blit(fondo, (0, 0))  
                        screen.blit(cap, (cap_pos_x, cap_pos_y))
                        pygame.display.flip()
            
                if __name__ == "__main__":
                    main()
         

                              
finally:
    GPIO.cleanup()


 


09-May-2016 13:20
Curro Martin

Os comento, la idea general es un elevador de dos planta, cuando pulse un boton para llamarlo baje o suba dependiendo de donde esté. Mi idea es meterle un contador para saber en qué planta está después de cada viaje. Si el contador es igual a 0 entonces está en la planta cero, si el contador es igual a 1 está en planta uno... y así para programar todos los posibles viajes sumo o resto 1.

El problema es que aunque yo asigne un puerto gpio exclusivamente para la planta baja, si le doy a otro cualquiera también lo hace e intuyo que es por problemas estructurales de los bucles.

Otra cosa que me gustaría es que no saliera del programa, es decir, un bucle infinito pudiéndole dar al elevador todos lo viajes que quiera.

¿Ven factible la ayuda? Les necesito de verdad..!


10-May-2016 15:39
Curro Martin

Alguna pista? Alguna idea? Algo?

Saludos.


20-May-2016 23:43
Nacho Cabanes (+84)

El que se repita sin fin es un "while True:", pero tu programa ya tiene tres de esos. Tu lógica es un tanto rebuscada y repetitiva. ¿Por qué no pruebas a escribir una versión simplificada, que no use pygame ni lea de gpio (todavía), sino que lea desde consola?  Te ayudará a comprobar que la lógica es coherente.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)