tag:blogger.com,1999:blog-6924493354623582778.post434240849150018238..comments2022-12-09T16:47:53.135+01:00Comments on frambuesa-pi: Controlar un botón con Python, detectar un evento del botón (Parte 2)Unknownnoreply@blogger.comBlogger7125tag:blogger.com,1999:blog-6924493354623582778.post-46576275560695714672020-01-22T18:43:05.868+01:002020-01-22T18:43:05.868+01:00Hola Xavi, para ahorrar código deberías separar tu...Hola Xavi, para ahorrar código deberías separar tu código en funciones. Las funciones pueden recibir parámetros y se pueden llamar tantas veces como quieras...Alxhttps://www.blogger.com/profile/00629186159409047255noreply@blogger.comtag:blogger.com,1999:blog-6924493354623582778.post-76227750995018115122020-01-20T22:04:08.082+01:002020-01-20T22:04:08.082+01:00Buenas noches, hace mucho de esta entrada. Espero ...Buenas noches, hace mucho de esta entrada. Espero que me puedas ayudar.<br />Tu codigo me funciona muy bien, pero si quisiera que fueran para 16 pulsadores y 16 reles. Que solucion me darias? <br />yo he echo una prueba con dos. Pero es escribir mucho codiga tontamente(soy novato)y seguro que hay una forma mas corta.<br /><br />Gracias<br />SaludosXavinoreply@blogger.comtag:blogger.com,1999:blog-6924493354623582778.post-77392791884994437612019-02-15T19:35:32.091+01:002019-02-15T19:35:32.091+01:00muchísimas gracias corre super el código. yo ya ha...muchísimas gracias corre super el código. yo ya había logrado mostrar el estado con el .after pero lo raro era que solo funcionaba bien con el GPIO 2, si lo cambiaba el script corría derecho, sin presionar el botón el led y el contador aumentaba sin parar y con este corre perfecto en cualquier gpio ademas me ahorraste la parte de averiguar el uso pull_up ya que en ves de el botón voy a conectar un sensor y me recomendaron hacer uso de esta sentencia para saber su estado.<br />muchísimas gracias.cegu77https://www.blogger.com/profile/00924075768043735669noreply@blogger.comtag:blogger.com,1999:blog-6924493354623582778.post-82903579718545633712019-02-14T19:43:02.608+01:002019-02-14T19:43:02.608+01:00Hola, disculpa que haya tardado un poco pero voy b...Hola, disculpa que haya tardado un poco pero voy bastante liado, partiendo del esquema con el botón y el led de este mismo ejemplo, puedes aplicar el siguiente código modificado a partir del mismo ejemplo (a mi me ha funcionado perfectamente, ya me dirás que tal)<br /><br />from tkinter import*<br /># importamos librerias<br />import RPi.GPIO as GPIO<br />import time<br /># indicamos el uso de la identificacion BCM para los GPIO<br />GPIO.setmode(GPIO.BCM)<br /># configuramos el pin 18 como entrada y activamos <br /># la resistencia de activacion del pin 18 con PUD_UP<br /># esto hará que al presionar el botón se interrumpe<br /># la tensión de 3,3V del pin<br />GPIO.setup(18,GPIO.IN,pull_up_down=GPIO.PUD_UP)<br /># configuramos el pin 23 como salida para el led<br />GPIO.setup(23,GPIO.OUT)<br /># definimos dos variables para guardar el estado del led<br /># por defecto el estado del led es False (apagado)<br />switch_state=False<br /># variable guarda presion del boton<br />cont=0<br /><br /># funcion que se ejecuta repetidamente gracais a raiz.after<br />def presionado():<br /> #indicamos que cont es una variable global<br /> global cont<br /> # guardo en una variable el estado del pin<br /> new_input_state=GPIO.input(18)<br /> # si el estado es False (presionado)<br /> if new_input_state==False:<br /> # tiempo de demora para evitar rebote<br /> time.sleep(0.3)<br /> # aumentamos la variable cont<br /> cont=cont+1<br /> # transformo cont en una stringVar<br /> lcon=StringVar(value=cont)<br /> # asigno el nuevo valor al label<br /> vercontador.configure(textvariable=lcon)<br /> <br /> # llamamos de nuevo a la funcion <br /> raiz.after(10,presionado)<br /><br /># inicializo pantalla de tkinter<br />raiz=Tk()<br /># nombre de la pantalla<br />raiz.title("Manejo de led desde tk")<br /># caracteristicas de la pantalla<br />raiz.resizable(0,0)<br />raiz.geometry("250x250")<br /># transformo cont en una stringVar<br />lcon=StringVar(value=cont)<br /># inicializo un label que mostrara un numero<br />vercontador=Label(raiz, textvariable=lcon, bg='yellow', height=4, width=4)<br /># pongo el label en un pack() para posicionarlo<br />vercontador.pack()<br /># llamamos a la funcion afer por primera vez<br />raiz.after(10,presionado)<br /># iniciamos el programa<br />raiz.mainloop()<br />Alxhttps://www.blogger.com/profile/00629186159409047255noreply@blogger.comtag:blogger.com,1999:blog-6924493354623582778.post-65792207455972852762019-02-07T23:13:05.689+01:002019-02-07T23:13:05.689+01:00buen dia Alx Garcia gracias por responder
esa part...buen dia Alx Garcia gracias por responder<br />esa parte la comprendo o mejor dicho te pregunto como capturo ese evento en la interfaz Tkinter? por ejemplo en una etiqueta Label mostrar las veses que voy presionando el boton, realmente eso es lo que quiero pero no he podido dar con el chiste mira este codigo y si te das a la tarea de correrlo veras el problema en el que me encuentro y a lo mejor me puedas ayudar a encontrar la solucion, veras que solo falta hacer el llamado de la funcion y corre bien lo que no corre es la interfaz, no muestra ventana por ningun lado y si lo quitas corre la interfaz pero por obvias razones no correra el script<br /><br />from tkinter import*<br />import RPi.GPIO as GP<br />import threading<br />GP.setwarnings(False)<br /><br />GP.setmode(GP.BCM)<br />GP.setup(2, GP.IN)#Boton<br />GP.setup(23, GP.OUT)<br />GP.output(23, False)<br />cont=0<br />def control(sel):<br /> while True:<br /> if GP.input(2):<br /> GP.output(23, GP.LOW)<br /> else:<br /> GP.output(23, GP.HIGH)<br /> GP.cleanup()<br /><br />raiz=Tk() <br />raiz.title("Manejo de led desde tk")<br />raiz.resizable(0,0)<br />raiz.geometry("250x200")<br />#raiz.attributes("-fullscreen",True)<br /><br /><br /><br />lcon=StringVar(value=cont)<br /><br />vercontador=Label(raiz, textvariable=lcon, bg='yellow', height=4, width=4)<br />vercontador.pack()<br /><br /><br />raiz.mainloop()cegu77https://www.blogger.com/profile/00924075768043735669noreply@blogger.comtag:blogger.com,1999:blog-6924493354623582778.post-23354191844255999682019-02-07T08:58:44.316+01:002019-02-07T08:58:44.316+01:00Hola, en el ejemplo, Controlar un botón con Python...Hola, en el ejemplo, Controlar un botón con Python, detectar un evento del botón (Parte 2), el código muestra como interceptar el evento de botón presionado, en el momento en que se cumple esta situación deberías añadir el código que deseas ejecutar. El input_state es el que "captura" el estado.<br />En el ejemplo, Controlar un botón con Python, detectar un evento del botón (Parte 1), también tienes un ejemplo de código, al presionar el botón se imprime en la consola "boton presionado", deberías sustituir esta línea por el código que deseas que se ejecute.Alxhttps://www.blogger.com/profile/00629186159409047255noreply@blogger.comtag:blogger.com,1999:blog-6924493354623582778.post-89565035019265000492019-02-06T03:38:00.215+01:002019-02-06T03:38:00.215+01:00Buenas noches:
estoy entrando en el mundo de la ra...Buenas noches:<br />estoy entrando en el mundo de la raspberry y he intentado por mucho hacer un pequeño programa que me imprima en la interfaz de tkinter los eventos de un boton pulsador como hacer la suma de cada ves que se pulse tengo este codigo que hace exactamente lo que quiero, pero lo hace desde un Button de tkinter, la pregunta es como puedo hacer esto desde un pulsador conectado a un GPIO(23) espero explicarme bien, <br /><br />from tkinter import*<br />import RPi.GPIO as GP<br />GP.setwarnings(False)<br /><br />GP.setmode(GP.BCM)<br />GP.setup(2, GP.IN)#Boton<br />GP.setup(23, GP.OUT)<br />GP.output(23, False)<br /><br />raiz=Tk()<br />cont=0<br />def ledon():<br /> global cont<br /> cont+=1<br /> lcon.set(cont)<br /> print("LED button pressed")<br /> print(cont)<br /> if GP.input(23)==True:<br /> GP.output(23,False)<br /> ledButton["text"] = "PRENDER LED"<br /> else:<br /> GP.output(23,True)<br /> ledButton["text"] = "APAGAR LED"<br /> <br />def cerrarPrograma():<br /> print("exit Button pressed")<br /> GP.cleanup()<br /> raiz.quit() <br /> <br />raiz.title("Manejo de led desde tk")<br />raiz.resizable(0,0)<br />raiz.geometry("250x200")<br /><br />exitButton = Button(raiz, text="exit", command = cerrarPrograma, bg='red', height=4, width=6 )<br />exitButton.pack(side=BOTTOM)<br /><br />ledButton=Button(raiz, text="PRENDER LED", command=ledon, bg='green', height=4, width=8)<br />ledButton.pack()<br /><br />lcon=StringVar(value=cont)<br /><br />vercontador=Label(raiz, textvariable=lcon, bg='yellow', height=4, width=4)<br />vercontador.pack()<br /><br />raiz.mainloop()cegu77https://www.blogger.com/profile/00924075768043735669noreply@blogger.com