k the python list out and used context sensitive

variables (times) to determine dit dah OR SPACE
This commit is contained in:
Robin Clark 2022-07-17 10:58:04 +01:00
parent cb95042889
commit ce1ea4d0e8

82
main.py
View File

@ -26,13 +26,8 @@ sec = 0
beeper = KitronikBuzzer()
buttons = KitronikButton()
mmaxindex = 20
mbuf = [] # array/list(buttonEvent) this should be global by default RIGGHT????
mindex = 0 # head new button events
mindex_t = 0 # tail unprocessed button events
mcount = 0
old_m_count = 0
last_pv = 0
last_tt = 0
# make this array size 20. A morse char of 5 dots|dashes
# would take up 10 slots max.
#
@ -47,13 +42,6 @@ class buttonEvent:
#def str(self):
#return "mstimestamp:",str(mstimestamp), "pinst ",str(pinstate)
# this pythin list is doing my head in, why cant they just ahve arrays like normal langauages
#
for i in range (0,30):
b = buttonEvent(0,0)
print (" inserting a dummy entry into the stupid list object ", i)
mbuf.insert(i,b)
print (" how can it xcomplaIN NOW THE LIST IS FULL OF OBJECTS ",)
#def ButtonB_r_IRQHandler(pin):
# global buttonB
@ -61,32 +49,27 @@ for i in range (0,30):
# print("button B pressed", buttonB)
def ButtonB_f_IRQHandler(pin):
#now = time.now()
global buttonB, last_pv
global mbuf, mindex, mcount, mmaxindex
global last_pv, last_tt
pv = pin.value()
tt = time.ticks_ms()
buttonB = 2*60 # maKES leds LIGHT IN AIRq
print("button B IRQ", tt, pv)
if last_pv == pv : # get get spurious 0 level ints
print("two ints @ same level in a row",pv) # ignore
else:
b=buttonEvent(time.ticks_ms(),pv)
# no no no!!! mbuf.insert(mindex,b)
mbuf[mindex] = b # why cant i do this arrrgghhhnhhh all I want is a fucking array
print ("b", str(b.mstimestamp), str(b.pinstate)) # arghhh why is it not storing thsi
print ("mbuf inserting ",str( time.ticks_ms()), str(pv), "@", str(mindex), mbuf)
b3 = mbuf[mindex] # shit bag that should store it
print ("did shit bag python actually put this in the list??", b3.pinstate, b3)
# it would appear the shitbag python did store this
mcount += 1
mindex += 1
mindex = mindex % mmaxindex
d = tt - last_tt
if pv:
print(" duration of inter-m space ", d)
beeper.playTone(600)
else:
print(" duration of press ", d)
if d > 300:
print ("DAH")
else:
print ("DIT")
beeper.stopTone()
last_pv = pv
last_tt = tt
# FALLING DOES NOT WORK AND IRQ_LOW_LEVEL not recognised
@ -94,59 +77,24 @@ buttons.buttonB.irq(trigger=machine.Pin.IRQ_FALLING|machine.Pin.IRQ_RISING, hand
#buttons.buttonB.irq(trigger=machine.Pin.IRQ_RISING, handler=ButtonB_r_IRQHandler)
def process_morse2():
# ok the mbuf is driving me bonkers. keeps going local or something
global mbuf
for i in range (0,mmaxindex-1):
be = mbuf[i]
print ("be ", i, be.mstimestamp, be.pinstate )
def process_morse():
#global mbuf # : why python WHY: why muck everyone about with local fucking copies your sxdjhklazsedfbokhjlfvbegrhjk
global mbuf, mindex, mindex_t, mcount, mmaxindex, oled, old_m_count
#global mbuf, mindex, mindex_t, mcount, mmaxindex, oled, old_m_count
#for i in range (0,mmaxindex-1):
#be = mbuf[i]
#print ("be ", be.timestampms, be.pinstate )
oled.clear()
oled.displayText(rtc.readDateString(), 1, 25)
oled.displayText(rtc.readTimeString(), 2, 33)
oled.displayText(str(mcount), 4, 33)
# process the list
if (mcount - old_m_count) >= 2:
print("(mcount - old_m_count) >= 2", mbuf, " mindex_t ", mindex_t)
b1 = mbuf[(mindex_t)%mmaxindex]
b2 = mbuf[(mindex_t+1)%mmaxindex]
# ok shitbag python why is the pinstate in that object now zero you turd
#print("b1 index", str((mindex_t+mmaxindex)%mmaxindex), "b1 ps", str(b1.pinstate))
#print("b2 index", str((mindex_t+mmaxindex+1)%mmaxindex), "b2 ps ", str(b2.pinstate))
print("b1", b1, b1.pinstate, "@ mbuf[", str((mindex_t+mmaxindex)%mmaxindex), "]")
print("b2", b2, b2.pinstate, "@ mbuf[", str((mindex_t+1)%mmaxindex), "]")
print(" b1 ts ps ", b1.mstimestamp, b1.pinstate, "b2 ts ps", b2.mstimestamp, b2.pinstate)
if b1.pinstate == 1 and b2.pinstate == 0:
print(" high to low pinstate valid press", b1.pinstate, b2.pinstate)
# press and release found
duration = b2.mstimestamp - b1.mstimestamp
if duration < 300:
oled.displayText('dit '+str(duration), 5, 33)
else:
oled.displayText('dah '+str(duration), 5, 33)
mindex_t += 2;
mindex_t = mindex_t % mmaxindex
mcount -= 2
else:
print(" undefined pinstate order", b1.pinstate, b2.pinstate)
mindex_t += 1 # that one made no sense so move up
mindex_t = mindex_t % mmaxindex
mcount -= 1
oled.displayText('BAH ', 5, 33)
old_m_count = mcount
#oled.displayText(str(mcount), 4, 33)
oled.show()
while True:
# maybe a function can have a global ref, yeah maybe the main cont. another wanky aspect ogf pythion
#process_morse()
process_morse2()
time.sleep(1.0)
process_morse()
##process_morse2()
#time.sleep(1.0)