#import RPi.GPIO as GPIO             # Uvoz biblioteke GPIO.
from machine import Pin
#GPIO.setwarnings(False)             # Isključenje upozorenja.
import time                         # Uvoz biblioteke time.
time.sleep(0.1)
#GPIO.setmode(GPIO.BOARD)            # BOARD metoda numerisanja.


PORTB=[7,11,13,15]               # Lista PORTB čiji su elementi redni brojevi pinova
Pin7 = Pin(7,Pin.OUT)
Pin11 = Pin(11,Pin.OUT)
Pin13 = Pin(13,Pin.OUT)
Pin15 = Pin(15,Pin.OUT)

PINS = [ Pin7, Pin11, Pin13, Pin15]

#for pin in PORTB:                   # Konfigurisanje izlaznih pinova.
#    GPIO.setup(pin,GPIO.OUT)        # 7,11,13,15,29.


#GPIO.setup(12,GPIO.IN,pull_up_down=GPIO.PUD_UP) # Konfigurisanje ulaznog pina 12 sa uključenim
Pin12 = Pin(12,Pin.IN, Pin.PULL_UP)
                                                # pulldown otpornikom.
#GPIO.setup(16,GPIO.IN,pull_up_down=GPIO.PUD_UP) # Konfigurisanje ulaznog pina 16 sa uključenim
Pin16 = Pin(16,Pin.IN, Pin.PULL_UP)
                                                # pulldown otpornikom.
#GPIO.setup(18,GPIO.IN,pull_up_down=GPIO.PUD_UP) # Konfigurisanje ulaznog pina 16 sa uključenim
Pin18 = Pin(18,Pin.IN, Pin.PULL_UP)
                                                # pulldown otpornikom.                                                

#   O Y P B – boje provodnika namotaja.
S=[[1,1,0,0],                               # 1. Korak (Tabela 12.2)
   [0,1,1,0],                               # 2. Korak (Tabela 12.2)
   [0,0,1,1],                               # 3. Korak (Tabela 12.2)
   [1,0,0,1]]                               # 4. Korak (Tabela 12.2)

def CW():                  # Definicija funkcije, odnosno potprograma CW, koji omogućava da se motor
                           # okrene 512 koraka u smeru kazaljke na satu.                                          
    for k in range(0,128): # Koračna prekidačka sekveca ponavlja se 128 puta (128*4=512koraka).
        for i in range(0,4):      # Obilazak elemenata matrice S,
                                  # počev od nulte vrste.
            for j in range(0,4):  # Obilazak elemenata jedne vrste.
                #GPIO.output(PORTB[j],S[i][j])
                PINS[j].value(S[i][j])
            time.sleep(0.00198)     # Pauza za trajanje jednog koraka.  
    return

def CCW():                 # Definicija funkcije, odnosno potprograma CCW, koji omogućava da se motor
                           # okrene 512 koraka u smeru suprotnom od smera kazaljke na satu.                                          
    for k in range(0,128): # Koračna prekidačka sekveca ponavlja se 128 puta (128*4=512koraka).
        for i in range(3,-1,-1):    # Obilazak elemenata matrice 
                                    # S počev od poslednje vrste.
            for j in range(3,-1,-1):    #Obilazak elemenata jedne vrste.
                #GPIO.output(PORTB[j],S[i][j])
                PINS[j].value(S[i][j]) 
            time.sleep(0.00198)     # Pauza za trajanje jednog koraka.
    return     

while 1:                          # Beskonačna petlja.
    #time.sleep(5)                 # Pauza od 5s jer se merenja vrše svakih 5s.
    
    # Motor se pokreće samo za sledeće 3 dozvoljene kombinacije na digitalnim izlazima senzora:
    # Prva kombinacija:
    time.sleep(0.025)
    #if Pin12.value()==0 and Pin16.value()==0 and Pin18.value()==1:
    if (Pin12.value() == 0):
    #if GPIO.input(12)==0 :
        print('NEISPRAVAN JER JE masa>204')
        CW()              # Poziv funkcije.
        time.sleep(1)     # Pauza 1s.
        CCW()             # Poziv funkcije.
    
    # Druga kombinacija:
    time.sleep(0.025)
    if (Pin16.value() == 0):
    #if Pin12.value()==0 and Pin16.value()==1 and Pin18.value()==0:
    #if GPIO.input(16)==0 :
        print('ISPRAVAN JER JE 196≤masa≤204')
        CCW()             # Poziv funkcije.
        time.sleep(1)     # Pauza 1s.
        CW()              # Poziv funkcije.
    
    # Treća kombinacija:
    time.sleep(0.025)
    if (Pin18.value() == 0):
    #if Pin12.value()==1 and Pin16.value()==1 and Pin18.value()==0:
    #if GPIO.input(18)==0 :
        print('NEISPRAVAN JER JE masa<196')
        CW()              # Poziv funkcije.
        time.sleep(1)     # Pauza 1s
        CCW()             # Poziv funkcije.


BOOTSELLED1239USBRaspberryPiPico©2020RP2-8020/21P64M15.00TTT