[ Foro de Python ]
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.
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.
# -*- 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()
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..!
Alguna pista? Alguna idea? Algo?
Saludos.
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.)