-выдаёт на драйвер ШД импульсы dir с частотой, установленной и отображаемой на сенсорном экране.
- при увеличении уставки скорости ШД частоту импульсов наращивает плавно. boot.py
Код: Выделить всё
import machine
import pyb
import math
import lcd160cr
from pyb import Pin
from pyb import Timer
pul = Pin('Y1', Pin.OUT)
pul.low()
gz = 0
gzOld = gz
gzNew = gz
factor = 1000
timPul = Timer(3, freq=1)
timProc = Timer(11, freq=1)
timCur = Timer(10, freq=2)
timAc = Timer(9, freq=3)
lcd = lcd160cr.LCD160CR('X')
lcd.set_orient(lcd160cr.PORTRAIT)
touch = False
x = 0
y = 0
chTou = False
keyAc = False
key_factor = False
flash_factor = False
flash = True
key_up = False
key_down = False
key_change = False
change = False
key_change_ok = False
key_change_cancel = False
key_ch = False
Код: Выделить всё
def serv(t):
if pul.value():
pul.value(0)
else:
pul.value(1)
def KeyAc(t):
global keyAc, gzOld, gzNew
if gzOld != gzNew: keyAc = True
def Accel():
global gzOld, gzNew
if gzOld == 0 and gzNew > gzOld:
timPul.callback(serv)
if gzNew > gzOld:
dif = math.sqrt(gzNew - gzOld) // 1
gzOld = gzOld + int(dif)
timPul.freq(gzOld)
else:
gzOld = gzNew
if gzOld == 0:
timPul.callback(None)
else:
timPul.freq(gzOld)
def timFla(t):
global flash_factor, flash
if flash_factor: flash_factor = False
else: flash_factor = True
flash = True
def keyboardHandler(t):
global key_up, key_down, key_factor, key_change, key_change_ok, key_change_cancel, key_ch, gz, factor, chTou, x, y
if chTou:
if x >= 85 and x <= 125 and y >= 45 and y <= 85: #Квадрат выбора цифры
key_factor = True
elif x >= 50 and x <= 80 and y >= 25 and y <= 55: #Квадрат плюса
key_up = True
elif x >= 50 and x <= 80 and y >= 75 and y <= 105: #Квадрат минуса
key_down = True
elif x >= 60 and x <= 140 and y >= 120 and y <= 160 and key_ch == False: #Квадрат изменения вращения
key_change = True
key_ch = True
elif x >= 60 and x <= 140 and y >= 120 and y <= 160 and key_ch: #Квадрат принятия изменения вращения
key_change_ok = True
key_ch = False
elif x >= 0 and x <= 40 and y >= 120 and y <= 160 and key_ch: #Квадрат отмены изменения вращения
key_change_cancel = True
key_ch = False
chTou = False
def Gz(gz):
lcd.set_pos(0, 60)
txGz = str(int(gz))
while len(txGz) < 4:
txGz = '0' + txGz
lcd.write(txGz)
def wrGz(gz):
lcd.set_text_color(lcd.rgb(255, 0, 0), lcd.rgb(0, 0, 0))
Gz(gz)
def wrAddGz(gz,add):
lcd.set_text_color(lcd.rgb(255, 255, 0), lcd.rgb(0, 0, 0))
Gz(gz)
if (gz + add) <= 5000:
return gz + add
else:
return 5000
def wrDifGz(gz,dif):
lcd.set_text_color(lcd.rgb(255, 255, 0), lcd.rgb(0, 0, 0))
Gz(gz)
if (gz - dif) >= 0:
return gz - dif
else:
return 0
def Factor():
global factor
if factor > 100:
factor = factor // 10
else:
factor = 1000
def Flash(change):
global flash_factor, flash, gz
if flash_factor and flash and change:
flash = False
wrGz(gz)
elif flash_factor == False and flash and change:
flash = False
wrFactor()
def wrTouch():
global x, y
check = False
if x >= 50 and x <= 80 and y >= 25 and y <= 55: check = True #Квадрат плюса
elif x >= 50 and x <= 80 and y >= 75 and y <= 105: check = True #Квадрат минуса
if check:
lcd.set_text_color(lcd.rgb(255, 255, 0), lcd.rgb(0, 0, 0))
Gz(gz)
def wrFactor():
lcd.set_pos(0, 60)
txGz = str(gz)
while len(txGz) < 4:
txGz = '0' + txGz
for i in range(len(txGz)):
lcd.set_text_color(lcd.rgb(255, 0, 0), lcd.rgb(0, 0, 0))
if (10**(3-i)) == factor:
lcd.set_text_color(lcd.rgb(255, 255, 0), lcd.rgb(0, 0, 0))
lcd.write(txGz[i])
def rectCh():
lcd.rect(40, 120, 80, 40) #Квадрат изменения вращения
lcd.set_pos(45, 135)
lcd.write("Change")
def rectChOk():
lcd.rect(40, 120, 80, 40) #Квадрат изменения вращения
lcd.set_pos(45, 135)
lcd.write(" Ok ")
def rectChCancel():
lcd.rect(0, 120, 40, 40) #Квадрат отмены
lcd.set_pos(3, 135)
lcd.write("Cnl")
def rectChCancelClear():
lcd.set_text_color(lcd.rgb(0, 0, 0), lcd.rgb(0, 0, 0))
lcd.set_pen(lcd.rgb(0, 0, 0), lcd.rgb(0, 0, 0))
lcd.rect(0, 120, 40, 40) #Квадрат отмены
lcd.set_pos(3, 135)
lcd.write("Cnl")
lcd.set_pen(lcd.rgb(255, 0, 0), lcd.rgb(0, 0, 0))
lcd.erase()
lcd.set_text_color(lcd.rgb(255, 0, 0), lcd.rgb(0, 0, 0))
lcd.set_pen(lcd.rgb(255, 0, 0), lcd.rgb(0, 0, 0))
lcd.set_font(1, scale=1, bold=0, trans=0, scroll=0)
lcd.rect(50, 25, 30, 30) #Квадрат плюса
lcd.set_pos(60, 35)
lcd.write('+')
lcd.rect(50, 75, 30, 30) #Квадрат минуса
lcd.set_pos(60, 85)
lcd.write('-')
lcd.rect(85, 45, 40, 40) #Квадрат выбора цифры
lcd.set_pos(100, 60)
lcd.write('>>')
rectCh() #Квадрат изменения вращения
wrGz(gz) #Отрисовка скорости вращения
timProc.callback(keyboardHandler)
timCur.callback(timFla)
timAc.callback(KeyAc)
try:
while True:
touch = lcd.is_touched()
if keyAc:
keyAc = False
Accel()
if change == False: wrGz(gzOld)
if touch:
x = lcd.get_touch()[1]
y = lcd.get_touch()[2]
if change: wrTouch()
touch = False
chTou = True
if key_factor and change:
key_factor = False
Factor()
if key_up and change:
key_up = False
gz = wrAddGz(gz,factor)
wrGz(gz)
if key_down and change:
key_down = False
gz = wrDifGz(gz,factor)
wrGz(gz)
Flash(change)
if key_change:
change = True
key_change = False
rectChOk()
rectChCancel()
if key_change_ok:
key_change_ok = False
gzNew = gz
change = False
rectCh()
rectChCancelClear()
wrGz(gz)
if key_change_cancel:
key_change_cancel = False
gz = gzOld
change = False
rectCh()
rectChCancelClear()
wrGz(gz)
finally:
lcd.erase()
lcd.set_pos(0, 0)
lcd.write('error')