[Çözüldü] Butona basılma süresini hesaplama yardım

Başlatan mustafadeniz.kocan, 06 Eylül 2018 - 16:43:56

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

mustafadeniz.kocan

Merhaba arkadaşlar, Bu foruma yeni katıldım o yüzden kurallara pek hakim değil yanlışım olursa affedin.

Bir python projesi üzerinde çalışıyorum. push button ile alakalı bir sorum olacak.

Benim bir adet butonum var ve bu butona basıldığı sürece bir led yansın istiyorum buraya kadar * her şey tamam. Ancak bana birde bu led'in ne kadar süre yandığı lazım yani mesela led 2 saat yandı diyelim bunu output olarak görmek istiyorum.
Örnek:
Butona basıldı --->> 2 dakika geçti -->> buton bırakıldı --->>
Output :
led 2 dakika yanık kaldı.

bu konuda bana yardımcı olursanız çok sevinirim.
Şimdiden teşekkürler.

cosmicowl

#1
Yanlış anlamadıysam time modülünün time fonksiyonuyla yapabilirsiniz.  Örneğin
import time
def selam():
    print(selam)
start=time.time()
selam()
fin=time.time() - start
print(fin)

Ayrıca başlıklarınızda "Yardım, acil" benzeri kelimeler kullanmadan içeriği açıklayıcı cümleler kurmaya dikkat edin.

mustafadeniz.kocan

Alıntı yapılan: cosmicowl - 06 Eylül 2018 - 18:04:42
Yanlış anlamadıysam time modülünün time fonksiyonuyla yapabilirsiniz.  Örneğin
import time
def selam():
    print(selam)
start=time.time()
selam()
fin=time.time() - start
print(fin)

Ayrıca başlıklarınızda "Yardım, acil" benzeri kelimeler kullanmadan içeriği açıklayıcı cümleler kurmaya dikkat edin.

import RPi.GPIO as GPIO
from time import sleep

GPIO.setmode(GPIO.BCM)
blinkCount = 99999
count= 0
LEDPin = 22
buttonPin = 5

GPIO.setup(LEDPin, GPIO.OUT )

GPIO.setup(buttonPin , GPIO.IN , pull_up_down = GPIO.PUD_UP)

buttonPress = True
LedState = False

try:
    while count < blinkCount:
        buttonPress = GPIO.input (buttonPin)
        if buttonPress == False and LedState == False:
            GPIO.output(LEDPin , True )
            print ("LED ON")
            LedState = True
            sleep(1)
        elif buttonPress == False and LedState == True:
            GPIO.output(LEDPin, False)
            print ("LED OF")
            LedState = False
            count +=1
            sleep(0.5)
        sleep(0.1)
finally:
    GPIO.cleanup()

yazdığım kodu burda paylaşıyorum. Sizin dediğiniz modülü nereye eklemeliyim ?

cosmicowl

#3
Fonksiyonu çağırmadan önce ve sonra gösterdiğim gibi zaman tanımlamanız lazım. Fonksiyondan sonraki zamandan önceki zamanı çıkarınca geçen süreyi bulursunuz :) Kodlarınızı bir fonksiyon içine yazıp yapabilirsiniz veya import işlemi bittikten hemen sonra ve son satırda olabilir:
import RPi.GPIO as GPIO
import time
basla= time.time()
GPIO.setmode(GPIO.BCM)
blinkCount = 99999
count= 0
LEDPin = 22
buttonPin = 5

GPIO.setup(LEDPin, GPIO.OUT )

GPIO.setup(buttonPin , GPIO.IN , pull_up_down = GPIO.PUD_UP)

buttonPress = True
LedState = False

try:
    while count < blinkCount:
        buttonPress = GPIO.input (buttonPin)
        if buttonPress == False and LedState == False:
            GPIO.output(LEDPin , True )
            print ("LED ON")
            LedState = True
            sleep(1)
        elif buttonPress == False and LedState == True:
            GPIO.output(LEDPin, False)
            print ("LED OF")
            LedState = False
            count +=1
            sleep(0.5)
        sleep(0.1)
finally:
    GPIO.cleanup()
bitir=time.time()
gecensure=bitir-basla
#print(gecensure)

mustafadeniz.kocan

Alıntı yapılan: cosmicowl - 07 Eylül 2018 - 14:23:27
Fonksiyonu çağırmadan önce ve sonra gösterdiğim gibi zaman tanımlamanız lazım. Fonksiyondan sonraki zamandan önceki zamanı çıkarınca geçen süreyi bulursunuz :) Kodlarınızı bir fonksiyon içine yazıp yapabilirsiniz veya import işlemi bittikten hemen sonra ve son satırda olabilir:
import RPi.GPIO as GPIO
import time
basla= time.time()
GPIO.setmode(GPIO.BCM)
blinkCount = 99999
count= 0
LEDPin = 22
buttonPin = 5

GPIO.setup(LEDPin, GPIO.OUT )

GPIO.setup(buttonPin , GPIO.IN , pull_up_down = GPIO.PUD_UP)

buttonPress = True
LedState = False

try:
    while count < blinkCount:
        buttonPress = GPIO.input (buttonPin)
        if buttonPress == False and LedState == False:
            GPIO.output(LEDPin , True )
            print ("LED ON")
            LedState = True
            sleep(1)
        elif buttonPress == False and LedState == True:
            GPIO.output(LEDPin, False)
            print ("LED OF")
            LedState = False
            count +=1
            sleep(0.5)
        sleep(0.1)
finally:
    GPIO.cleanup()
bitir=time.time()
gecensure=bitir-basla
#print(gecensure)


Dediğiniz şekilde yaptım ve çalıştı çok teşekkür ederim yardımlarınız için. Şöyle bir sorum daha olacak. Burda geçen süreyi çıkarma işlemi şeklinde bulduğumuz gibi şöyle bişey yapılabilir mi ?
mesela ;
Butona basıldı --->> Led yandı --->> Buton bırakıldı

output : Led 07.09.2018 15:20  ile 07.09.2018 15:25 arası  Açık kaldı.
yani tarih ve saat bilgisi verilerek çalışma süresi ekrana yansıtılabilir mi ?

cosmicowl

#5
Datetime modülü ile yapılabilir.
import RPi.GPIO as GPIO
import time
import datetime
now= datetime.datetime.now()
tarih1 = datetime.datetime.strftime(now,'%c')
basla= time.time()
GPIO.setmode(GPIO.BCM)
blinkCount = 99999
count= 0
LEDPin = 22
buttonPin = 5

GPIO.setup(LEDPin, GPIO.OUT )

GPIO.setup(buttonPin , GPIO.IN , pull_up_down = GPIO.PUD_UP)

buttonPress = True
LedState = False

try:
    while count < blinkCount:
        buttonPress = GPIO.input (buttonPin)
        if buttonPress == False and LedState == False:
            GPIO.output(LEDPin , True )
            print ("LED ON")
            LedState = True
            sleep(1)
        elif buttonPress == False and LedState == True:
            GPIO.output(LEDPin, False)
            print ("LED OF")
            LedState = False
            count +=1
            sleep(0.5)
        sleep(0.1)
finally:
    GPIO.cleanup()
bitir=time.time()
gecensure=bitir-basla
tarih2= datetime.datetime.strftime(now,'%c')
print("Led {}  ile {} arası  Açık kaldı.".format(tarih1,tarih2))

#print(gecensure)

Çıktıyı beğenmezseniz: https://belgeler.yazbel.com/python-istihza/standart_moduller/datetime.html

mustafadeniz.kocan

#6
Alıntı yapılan: cosmicowl - 07 Eylül 2018 - 15:38:01
Datetime modülü ile yapılabilir.
import RPi.GPIO as GPIO
import time
import datetime
now= datetime.datetime.now()
tarih1 = datetime.datetime.strftime(now,'%c')
basla= time.time()
GPIO.setmode(GPIO.BCM)
blinkCount = 99999
count= 0
LEDPin = 22
buttonPin = 5

GPIO.setup(LEDPin, GPIO.OUT )

GPIO.setup(buttonPin , GPIO.IN , pull_up_down = GPIO.PUD_UP)

buttonPress = True
LedState = False

try:
    while count < blinkCount:
        buttonPress = GPIO.input (buttonPin)
        if buttonPress == False and LedState == False:
            GPIO.output(LEDPin , True )
            print ("LED ON")
            LedState = True
            sleep(1)
        elif buttonPress == False and LedState == True:
            GPIO.output(LEDPin, False)
            print ("LED OF")
            LedState = False
            count +=1
            sleep(0.5)
        sleep(0.1)
finally:
    GPIO.cleanup()
bitir=time.time()
gecensure=bitir-basla
tarih2= datetime.datetime.strftime(now,'%c')
print("Led {}  ile {} arası  Açık kaldı.".format(tarih1,tarih2))

#print(gecensure)

Çıktıyı beğenmezseniz: https://belgeler.yazbel.com/python-istihza/standart_moduller/datetime.html
çıktı güzeldi. çok teşekkür ederim.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 07 Eylül 2018 - 16:34:54

Alıntı yapılan: cosmicowl - 07 Eylül 2018 - 15:38:01
Datetime modülü ile yapılabilir.
import RPi.GPIO as GPIO
import time
import datetime
now= datetime.datetime.now()
tarih1 = datetime.datetime.strftime(now,'%c')
basla= time.time()
GPIO.setmode(GPIO.BCM)
blinkCount = 99999
count= 0
LEDPin = 22
buttonPin = 5

GPIO.setup(LEDPin, GPIO.OUT )

GPIO.setup(buttonPin , GPIO.IN , pull_up_down = GPIO.PUD_UP)

buttonPress = True
LedState = False

try:
    while count < blinkCount:
        buttonPress = GPIO.input (buttonPin)
        if buttonPress == False and LedState == False:
            GPIO.output(LEDPin , True )
            print ("LED ON")
            LedState = True
            sleep(1)
        elif buttonPress == False and LedState == True:
            GPIO.output(LEDPin, False)
            print ("LED OF")
            LedState = False
            count +=1
            sleep(0.5)
        sleep(0.1)
finally:
    GPIO.cleanup()
bitir=time.time()
gecensure=bitir-basla
tarih2= datetime.datetime.strftime(now,'%c')
print("Led {}  ile {} arası  Açık kaldı.".format(tarih1,tarih2))

#print(gecensure)

Çıktıyı beğenmezseniz: https://belgeler.yazbel.com/python-istihza/standart_moduller/datetime.html
Ya da burdan sorayım. Bu tarihleri/saatleri bir grafik olarak ekrana çıkartmak mümkün mü ? internette biraz araştırdım matlab plot modülleri varmış ama denemelerim sonuçsuz kaldı.

cosmicowl

Kullanıcıya grafik göstermek için bazı modüller var siz küçük bir şey istediğinizden tkinter kullanabilirsiniz. Daha güzel görünen arayüzler için pyqt ve pygtk yı araştırabilirsiniz.