Skip to main content

Promjena postavki skenera iz REPL-a

Što prikazuje ovaj primjer​

Izbornik u REPL-u upravlja skenerom dok radi: pokretanje i zaustavljanje skeniranja, uključivanje i isključivanje bijelog osvjetljenja i crvenog svjetla za ciljanje, odabir koliki se dio slike kamere pretražuje u potrazi za kodom, odabir ručnog, kontinuiranog čitanja ili čitanja uz detekciju pokreta te uključivanje i isključivanje skupina 1D i 2D simbologija. Kodovi koje skenirate dok bilo koji izbornik čeka i dalje se ispisuju.

Povežite pin 5 (TX) kontrolera na RX skenera i njegov pin 4 (RX) na TX skenera, uz 3V3 i GND, ili promijenite tx i rx prema svojem spoju. Prvo prebacite skener na UART skeniranjem konfiguracijskog barkoda POR232.

Primjer čita ulaz REPL-a bez blokiranja pomoću uselect i sys, koji nisu dio modula de2120; pogledajte dokumentaciju za select u MicroPythonu.

Kod primjera​

import sys
import uselect
from de2120 import DE2120
import time

scanner = DE2120(tx=5, rx=4)

if not scanner.begin():
print("Scanner did not respond. Check wiring. Did you scan the POR232 barcode?")
raise SystemExit

print("Scanner online!")

poll = uselect.poll()
poll.register(sys.stdin, uselect.POLLIN)


def stdin_available():
return bool(poll.poll(0))


def flush_stdin():
while stdin_available():
sys.stdin.read(1)


def wait_for_key():
"""Block until a key is typed, printing any scanned barcodes in the meantime."""
while not stdin_available():
barcode = scanner.readBarcode()
if barcode:
print("...")
print("Code found:", barcode)
time.sleep_ms(200)
return sys.stdin.read(1)


def menu_flashlight():
flush_stdin()
print()
print("-------------------------------------")
print("1) Enable Flashlight")
print("2) Disable Flashlight")
print("-------------------------------------")
print("Select an option number:")

cmd = wait_for_key()
if cmd == "1":
print("White scan light on")
scanner.lightOn()
elif cmd == "2":
print("White scan light off")
scanner.lightOff()
else:
print("Command not recognized")


def menu_reticle():
flush_stdin()
print()
print("-------------------------------------")
print("1) Enable Reticle")
print("2) Disable Reticle")
print("-------------------------------------")
print("Select an option number:")

cmd = wait_for_key()
if cmd == "1":
print("Red scan reticle on")
scanner.reticleOn()
elif cmd == "2":
print("Red scan reticle off")
scanner.reticleOff()
else:
print("Command not recognized")


def menu_reading_area():
flush_stdin()
print()
print("-------------------------------------")
print("1) Full Width (Default)")
print("2) Center 80%")
print("3) Center 60%")
print("4) Center 40%")
print("5) Center 20%")
print("-------------------------------------")
print("Select an option number:")

cmd = wait_for_key()
areas = {"1": 100, "2": 80, "3": 60, "4": 40, "5": 20}
if cmd in areas:
pct = areas[cmd]
print("Scanning {}% of frame".format(pct))
scanner.changeReadingArea(pct)
else:
print("Command not recognized")


def menu_reading_mode():
flush_stdin()
print()
print("-------------------------------------")
print("1) Manual Read Mode (Default)")
print("2) Continuous Read Mode")
print("3) Motion Sensor Mode")
print("-------------------------------------")
print("Select an option number:")

cmd = wait_for_key()
if cmd == "1":
print("Manual Trigger Mode enabled")
scanner.disableMotionSense()
elif cmd == "2":
print("Continuous Read Mode enabled")
scanner.enableContinuousRead()
elif cmd == "3":
print("Motion Trigger Mode enabled")
scanner.enableMotionSense()
else:
print("Command not recognized")


def menu_symbologies():
flush_stdin()
print()
print("-------------------------------------")
print("1) Enable All 1D Symbologies")
print("2) Disable All 1D Symbologies")
print("3) Enable All 2D Symbologies")
print("4) Disable All 2D Symbologies")
print("-------------------------------------")
print("Select an option number:")

cmd = wait_for_key()
if cmd == "1":
print("1D Symbologies enabled")
scanner.enableAll1D()
elif cmd == "2":
print("1D Symbologies disabled")
scanner.disableAll1D()
elif cmd == "3":
print("2D Symbologies enabled")
scanner.enableAll2D()
elif cmd == "4":
print("2D Symbologies disabled")
scanner.disableAll2D()
else:
print("Command not recognized")


while True:
flush_stdin()

print()
print("DE2120 Barcode Scanner")
print("-------------------------------------")
print("1) Start Scan")
print("2) Stop Scan")
print("3) Enable/Disable Flashlight")
print("4) Enable/Disable Aiming Reticle")
print("5) Set Reading Area")
print("6) Set Reading Mode")
print("7) Enable/Disable Symbologies")
print("-------------------------------------")
print("Select an option number:")

cmd = wait_for_key()

if cmd == "1":
scanner.startScan()
elif cmd == "2":
scanner.stopScan()
elif cmd == "3":
menu_flashlight()
elif cmd == "4":
menu_reticle()
elif cmd == "5":
menu_reading_area()
elif cmd == "6":
menu_reading_mode()
elif cmd == "7":
menu_symbologies()
else:
print("Command not recognized")

🔗Otvorite cijeli primjer

Examples/de2120-serialSettings.py u commitu 848e03e

→

Očekivani rezultat:

ShellMicroPython
Scanner online!

DE2120 Barcode Scanner
-------------------------------------
1) Start Scan
2) Stop Scan
3) Enable/Disable Flashlight
4) Enable/Disable Aiming Reticle
5) Set Reading Area
6) Set Reading Mode
7) Enable/Disable Symbologies
-------------------------------------
Select an option number:

Upišite broj za odabir opcije. Opcije od 3 do 7 otvaraju drugi izbornik i nakon odabira ispisuju potvrdu, na primjer White scan light on, Scanning 60% of frame ili Continuous Read Mode enabled; opcije 1 i 2 djeluju odmah, bez poruke. Zatim se glavni izbornik ponovno prikaže. Kod skeniran dok bilo koji izbornik čeka ispisuje se kao ..., a nakon toga Code found: i sadržaj koda.

Korištene funkcije​

DE2120(uart=None, tx=None, rx=None, uart_id=1)returns DE2120

Stvara objekt skenera. Proslijedite UART koji ste sami napravili kao uart ili proslijedite brojeve pinova tx i rx pa modul na njima stvara UART(uart_id) brzinom 9600 baud. Bez ijednoga baca ValueError.

ReturnsObjekt skenera.

Parametri

TipNazivOpis
UARTuartGotov objekt machine.UART. Neobavezno.
inttxPin kontrolera koji šalje, spojen na RX skenera. Primjer koristi 5.
intrxPin kontrolera koji prima, spojen na TX skenera. Primjer koristi 4.
intuart_idKoji UART treba stvoriti kada proslijedite tx i rx. Zadano 1.
scanner.begin()returns bool

Provjerava odgovara li skener. Postavlja UART na 9600 baud i traži verziju firmvera. Ako nema odgovora, ponovno pokušava na 115200 baud, nalaže skeneru prelazak na 9600 baud i ponovno pita. Nakon uspjeha prazni prijemni međuspremnik.

ReturnsTrue kada je skener odgovorio, False kada nije.

scanner.readBarcode()returns str or None

Prikuplja bajtove koji čekaju od skenera. Skeniranje završava znakom carriage return; kada stigne, funkcija vraća kod bez njega. Pojedinačni kod sadrži najviše 256 bajtova.

ReturnsSkenirani kod ili None ako potpuno skeniranje još nije stiglo.

scanner.startScan()returns bool

Šalje naredbu SCAN, koja pokreće jedno skeniranje u ručnom (okidačkom) načinu rada.

ReturnsTrue kada je skener potvrdio naredbu.

scanner.stopScan()returns bool

Šalje naredbu SLEEP, koja zaustavlja skeniranje u tijeku.

ReturnsTrue kada je skener potvrdio naredbu.

scanner.lightOn()returns bool

Uključuje bijele LED diode za osvjetljenje (LAMENA1). Zadano su uključene.

ReturnsTrue kada je skener potvrdio naredbu.

scanner.lightOff()returns bool

Isključuje bijele LED diode za osvjetljenje (LAMENA0).

ReturnsTrue kada je skener potvrdio naredbu.

scanner.reticleOn()returns bool

Uključuje crveno svjetlo za ciljanje (AIMENA1). Zadano je uključeno.

ReturnsTrue kada je skener potvrdio naredbu.

scanner.reticleOff()returns bool

Isključuje crveno svjetlo za ciljanje (AIMENA0).

ReturnsTrue kada je skener potvrdio naredbu.

scanner.changeReadingArea(percent)returns bool

Postavlja koliki dio slike kamere, mjereno od njezina središta, skener pretražuje u potrazi za kodom (IMGREG0 do IMGREG4). Zadano je cijela slika.

ReturnsTrue kada je skener potvrdio naredbu; False za vrijednost koju funkcija ne prihvaća.

Parametri

TipNazivOpis
intpercent100 (puna širina), 80, 60, 40 ili 20.
scanner.disableMotionSense()returns bool

Postavlja skener u ručni (okidački) način rada, koji je zadan (SCMMAN). Primjer ga koristi za opciju Manual Read Mode.

ReturnsTrue kada je skener potvrdio naredbu.

scanner.enableContinuousRead(repeat_interval=2)returns bool

Postavlja skener u kontinuirani način rada (SCMCNT), u kojem čita bez okidača, i određuje koliko se često isti kod šalje ponovno (CNTALW).

ReturnsTrue kada je skener potvrdio postavku intervala; False za vrijednost izvan raspona od 0 do 3.

Parametri

TipNazivOpis
intrepeat_intervalZa isti kod: 0 izlaz jednom, 1 bez odgode, 2 svakih 0,5 s, 3 svake 1 s. Zadano 2, što primjer zadržava.
scanner.enableMotionSense(sensitivity=50)returns bool

Postavlja skener u način rada s detekcijom pokreta (SCMMDH) i određuje osjetljivost na pokret (MDTTHR).

ReturnsTrue kada je skener potvrdio postavku osjetljivosti; False za vrijednost koju funkcija ne prihvaća.

Parametri

TipNazivOpis
intsensitivity15 (najviša), 20, 30, 50 ili 100 (najniža). Zadano 50, što primjer zadržava.
scanner.enableAll1D()returns bool

Uključuje dekodiranje svih 1D simbologija (ODCENA).

ReturnsTrue kada je skener potvrdio naredbu.

scanner.disableAll1D()returns bool

Isključuje dekodiranje svih 1D simbologija (ODCDIS).

ReturnsTrue kada je skener potvrdio naredbu.

scanner.enableAll2D()returns bool

Uključuje dekodiranje svih 2D simbologija (AQRENA).

ReturnsTrue kada je skener potvrdio naredbu.

scanner.disableAll2D()returns bool

Isključuje dekodiranje svih 2D simbologija (AQRDIS).

ReturnsTrue kada je skener potvrdio naredbu.

Sve na okupu​

wait_for_key() je srž primjera: neprestano poziva readBarcode() dok ne stigne tipka, pa se skeniranje nikad ne zaustavlja dok je izbornik otvoren. Svaka stavka izbornika zatim se preslikava na jednu funkciju, a svaka funkcija šalje jednu ili dvije konfiguracijske naredbe skenera i čeka njezinu potvrdu. Primjer zanemaruje povratne vrijednosti; u vlastitom kodu provjerite ih kako biste saznali je li skener prihvatio postavku.

U kontinuiranom načinu rada skener čita bez okidača. Za čitanje na zahtjev ostanite u ručnom načinu rada i pozovite startScan() iz svojeg koda ili povucite TRIG na nisku razinu.