jsjtick=1
def tickjsj():
global jsjtick
jsjtick=jsjtick+1
machine.Timer().init(period=1000, callback=lambda t:tickjsj())
statereg=("0"*31+"1")*16
print(statereg)
b2b=0
l=1
p=0
d=12
k=0
b=0
rvdc=1
dstat=0
st=0
kk=0
bb=0
cycles=0
rawuv=0
statebuffer="0"*512
sevenSeg="1111110011000011011011111001011001110110111011111111000011111111111011"
# pin1=data pin2=clock pin3=latch pin28=key1 pin27=key2
machine.Pin(1, machine.Pin.OUT)
machine.Pin(2, machine.Pin.OUT)
machine.Pin(3, machine.Pin.OUT)
machine.Pin(26, machine.Pin.IN)
machine.Pin(27, machine.Pin.IN)
machine.Pin(28, machine.Pin.IN)
rvdc=machine.ADC(26).read_u16()
while l:
# compile the display data
pp=d+rvdc*(2*11)
while pp>1:
pp=pp/2
p=(int((pp-int(pp))*2))
print(rvdc,d,k," "[1:int(rvdc/65536*60)],"*")
machine.Pin(1).value(p)
machine.Pin(2).value(1)
machine.Pin(2).value(0)
machine.Pin(3).value(1)
machine.Pin(3).value(0)
if d >12:
machine.lightsleep(d)
# key input and debounce mode select and step the sleep delay factor each time the button is pressed
k=machine.Pin(28).value()
if k>b:
d=int(d+(d/5))
if d>1200:
d=5
b=k
# read the ppotentiometer on the adc pin
rvdc=machine.ADC(26).read_u16()
rvdc=int((512/65536)*rvdc)
# unary potentiometer mode
while d<13:
rawuv=machine.ADC(26).read_u16()
rvdc=int((512/65536)*rawuv)
if d==10:
rawuv=cycles
if d==12:
rawuv=jsjtick
for pp in range(0,512):
p=(rvdc>pp)*(d==5)+(rvdc==pp)*(d==6)+(rvdc<pp)*(d==7)+(rvdc!=pp)*(d==8)
if pp>504:
p=sevenSeg[511-pp+7*int((""+str(rvdc))[-1])]
if 497<pp<505:
p=sevenSeg[504-pp+7*int(("0"+str(rvdc))[-2])]
if 490<pp<498:
p=sevenSeg[497-pp+7*int(("00"+str(rvdc))[-3])]
if 483<pp<491:
p=sevenSeg[490-pp+7*int((""+str(rawuv))[-1])]
if 476<pp<484:
p=sevenSeg[483-pp+7*int(("0"+str(rawuv))[-2])]
if 469<pp<477:
p=sevenSeg[476-pp+7*int(("00"+str(rawuv))[-3])]
if 462<pp<470:
p=sevenSeg[469-pp+7*int(("000"+str(rawuv))[-4])]
if 455<pp<463:
p=sevenSeg[462-pp+7*int(("0000"+str(rawuv))[-5])]
if 448<pp<456:
p=sevenSeg[455-pp+7*int(("00000"+str(rawuv))[-6])]
# if 442<pp<449:
# rvdc=1129991
# p=sevenSeg[448-pp+7*int(("000000"+str(rawuv))[-7])]
if pp<449:
p=statereg[pp]
if d<9:
p=(rvdc>pp)*(d==5)+(rvdc==pp)*(d==6)+(rvdc<pp)*(d==7)+(rvdc!=pp)*(d==8)
machine.Pin(1).value(int(p))
machine.Pin(2).value(1)
machine.Pin(2).value(0)
k=machine.Pin(28).value()
if (k>b):
d=int(d+(d/5))
if (d>1200):
d=5
b=k
b2k=machine.Pin(27).value()
if (b2k>b2b):
statereg=statereg[0:rvdc]+str(int(statereg[rvdc]!="1"))+statereg[rvdc+1:len(statereg)]
b2b>b2k
# latch the data into the output wuthot displayimng the shifting
machine.Pin(3).value(1)
machine.Pin(3).value(0)
cycles=cycles+1
print(rvdc,k,b2k,d,"mode",chr(62*(d==5)+61*(d==6)+60*(d==7)+60*(d==8))+chr(62*(d==8)),cycles,"cycles",chr(13),end="")
if d==9:
print("ADC value", end="")
if d==10:
print("cycles", end="")
if d==12:
print("uptime",rawuv, end="")