Problem s cyklem while – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problem s cyklem while – Python – Fórum – Programujte.comProblem s cyklem while – Python – Fórum – Programujte.com

 
Hledat
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Pergoly a střechy Brno

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
slipka0
Duch
6. 12. 2021   #1
-
0
-

Ahoj napsal jsem si jednoduchy program na blikani diody ovladane z klavesnice.Nevim ale jakou podminku mam dat do cyklu while aby mi program reagoval okamzite jak zmacknu klavesu.Ted to funguje tak ze menit parametry doby zhasnuti jdou nastavovat jen po zhasnuti diody

import RPi.GPIO as GPIO

import time

import keyboard
from sys import exit

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(14, GPIO.OUT)
doba_sviceni = 4
doba_zhasnuti = 6


while True:
    
    if keyboard.is_pressed("+"):
        doba_zhasnuti = doba_zhasnuti + 1
        time.sleep(0.2)
        print("vydech je",doba_zhasnuti,"s")
        
    elif keyboard.is_pressed("-"):
        doba_zhasnuti = doba_zhasnuti - 1
        time.sleep(0.2)
        print("vydech je",doba_zhasnuti,"s")
        
    elif keyboard.is_pressed("r"):
        doba_zhasnuti = 6
        print("doba vydechu je 6s")
        time.sleep(0.2)        
        
    elif keyboard.is_pressed("q"):
        GPIO.cleanup()
        exit()
        
    else:
        GPIO.output(14, True)
        time.sleep(doba_sviceni)
        GPIO.output(14, False)
        time.sleep(doba_zhasnuti)

Nahlásit jako SPAM
IP: 37.48.24.–
Řešení
gna
~ Anonymní uživatel
1643 příspěvků
6. 12. 2021   #2
-
0
-
Vyřešeno Nejlepší odpověď

Ten modul keyboard umožňuje definovat "hooky", které se spouští při nějaké události a běží v samostatném vlákně. Takže třeba nějak takhle:

doba_sviceni = 4
doba_zhasnuti = 6

def on_press(event):
    global doba_zhasnuti

    if event.name == "+":
        doba_zhasnuti += 1
    elif event.name == "-":
        doba_zhasnuti -= 1

keyboard.on_press(on_press)

while True:
    rozsvitit()
    time.sleep(doba_sviceni)
    zhasnout()
    time.sleep(doba_zhasnuti)
Nahlásit jako SPAM
IP: 213.211.51.–
gna
~ Anonymní uživatel
1643 příspěvků
6. 12. 2021   #3
-
0
-

Jo, a takhle samozřejmě vždycky doběhnout ty sleepy s původní hodnotou. Jestli chceš nějak reagovat na ty změny hned, tak můžeš místo sleepu zkusit třeba threading.Event jako "přerušitelný sleep".

Nahlásit jako SPAM
IP: 213.211.51.–
slipka0
Duch
6. 12. 2021   #4
-
0
-

#3 gna
děkuju za rychlou odpověď

Nahlásit jako SPAM
IP: 109.81.209.–
Zjistit počet nových příspěvků

Přidej příspěvek

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 15 hostů

Podobná vlákna

Problem s for cyklem — založil zoufalec

Problém s cyklem while — založil Tase

Pomoc s cyklem if/else — založil Thomisso

Procházení cyklem složky — založil Ralis

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032022 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý