User Tools

Site Tools


raspberrypi:pigpio_rencoder.py

KY-040 Rotary Encoder Module

Pagaliau puikiai veikianti enkoderio versija pitonui

Kai suki į vieną pusę pirma suveikia pirmas pinas po to antras. Kai suki į kitą puse pirma suveikia antras pinas o po to pirmas. Sugaudyti logika nėra taip paprasta. bet štai kodas kad nereiktų galvoti.

import pigpio
import time
 
count = 0
pin1 = 16 #encoder pin
pin2 = 12 #encoder pin
pin3 = 20 #push pin
 
pi = pigpio.pi('aistis') #for local rpi change this to: pi = pigpio.pi()
pi.set_mode( 12, pigpio.INPUT) 
pi.set_mode( 16, pigpio.INPUT) 
pi.set_mode( 20, pigpio.INPUT)
 
pi.set_pull_up_down(12, pigpio.PUD_UP)
pi.set_pull_up_down(16, pigpio.PUD_UP)
pi.set_pull_up_down(20, pigpio.PUD_UP)
 
previous_pin = 0
previous_level = 0
def cbf(gpio, level, tick):
    global previous_pin
    global previous_level
    global count
    if gpio == pin2 and previous_pin == pin1 and level == 0 and previous_level == 0:
        count -=1
        print(count)
    if gpio == pin1 and previous_pin == pin2 and level == 0 and previous_level == 0:
        count +=1
        print(count)
    previous_pin = gpio
    previous_level = level
 
pi.callback(12, pigpio.EITHER_EDGE, cbf)
pi.callback(16, pigpio.EITHER_EDGE, cbf)
#pi.callback(20, pigpio.EITHER_EDGE, cbf) 
 
while True:
    time.sleep(0.1)
raspberrypi/pigpio_rencoder.py.txt · Last modified: by aistis