from machine import Pin, Timer
from time import sleep_us
# Definiši pinove
output_pin = Pin(18, Pin.OUT)
enable_pin = Pin(LED_ACT, Pin.OUT) # Prilagodite pin prema vašem mikrokontroleru
input_pin = Pin(9, Pin.IN, Pin.PULL_UP)
led_display_pins = [Pin(i, Pin.OUT) for i in range(8)]
# Inicijalizacija
count_value = 0
T_us = 2000
debounce_counter = 0
last_state = False
def toggle_output(timer):
"""Funkcija koja se poziva da bi se promenio status output_pin"""
global output_pin
output_pin.value(not output_pin.value())
def increment_count(pin):
"""Funkcija koja se poziva na prekid za inkrementaciju broja"""
global count_value, debounce_counter, last_state
current_state = pin.value() == 0 # Aktivno nisko stanje
if debounce_counter == 0 and last_state != current_state:
debounce_counter = 1
last_state = current_state
elif debounce_counter > 0 and debounce_counter < 10:
if last_state == current_state:
debounce_counter += 1
else:
debounce_counter = 0
elif debounce_counter == 10:
if last_state == current_state:
count_value += 1
update_led_display(count_value)
debounce_counter = 0
def update_led_display(value):
"""Ažurira LED prikaz na osnovu count_value"""
j = value % 10
x = ((value // 10) % 10) << 4
display_value = x + j
for i in range(8):
led_display_pins[i].value((display_value >> i) & 1)
# Postavljanje prekida za inkrementaciju
input_pin.irq(trigger=Pin.IRQ_RISING, handler=increment_count)
# Postavljanje timera za toggle_output
timer = Timer()
timer.init(period=T_us // 2, mode=Timer.PERIODIC, callback=toggle_output)
# Glavna petlja
while True:
sleep_us(T_us // 2)
if count_value % 2 == 0:
output_pin.value(1)
sleep_us(T_us // 2)