Open and close hand in variable speed with data

1

I have a hand simulator running at a constant speed. Hand opens and closes according to EMG data from USB connection. I added the project running at constant speed below. I have to make this simulator running at variable speed depending on EMG amplitude. I have the mathematical model of the hand in my hand. The Input is EMG amplitude and Output is hand speed. The model that generates output speed depending on input EMG is:

Output(k) = 0.6Input(k) + 2Output(k-1) - Output(k-2) So the formula will be in my code like that:

Velocity(k) = 0.6emg(k) + 2Velocity(k-1) - Velocity(k-2)

I’ve thought adding this model to Action.py script. I generated the code as below but it did not work. I think Blender runs scripts over and over so my variables do not store.What do you think? I would be very happy if I could get suggestions from you.

import bge
cont = bge.logic.getCurrentController()
own = cont.owner

if cont.sensors['action_true_prp'].positive:
    own['action'] = 0
    
    try:
        print(bge.logic.line)
        #emg_1, emg_2 = bge.logic.line.replace(',','.').strip('\n').split(' ')
        emg_1, emg_2 = bge.logic.line.replace(',','.').strip('\n').split('\t')
    
        own['ch1'] = float(emg_1)
        own['ch2'] = float(emg_2)
        own['velocity'] = 0
        own['velo_before'] = 0
        own['velo_2before'] = 0
    

    except:
        print("error 003: parse error")
        print (bge.logic.line)  
        
        
    try:        
        # CH1 ACTION control
        if (own['ch1']>bge.logic.globalDict['ch1_emg_threshold']):
            own['velocity'] = 0.6*own['ch1'] + 2*own['velo_before'] - own['velo_2before'];  
            
            
            #opening
            if (own['time1']<190):
                own['time1'] = own['time1'] + own['velocity']
                if (own['time1']>190):
                    own['time1'] = 190

        # CH2 ACTION control
        if (own['ch2']>bge.logic.globalDict['ch2_emg_threshold']):
            own['velocity'] = 0.6*own['ch2'] + 2*own['velo_before'] - own['velo_2before']; 
            
            #closing
            if (own['time1']>100):
                own['time1'] = own['time1'] + own['velocity']
                if (own['time1']<100):
                    own['time1'] = 100
        
        print ("CH_0:%7.4f  CH_1:%7.4f  STEP:%+3d  TIME:%+4.3f second"% (own['ch1'], own['ch2'], own['velocity'], bge.logic.delay_t))
    except:
        print ("error 008: undefined error")
        pass
    
    try:
        scene = bge.logic.getCurrentScene()
    
        Finger1 = scene.objects['Finger1E']
        Finger2 = scene.objects['Finger2E']
        Finger3 = scene.objects['Finger3E']
        Finger4 = scene.objects['Finger4E']
        Finger5 = scene.objects['Finger5E']

        Finger1['Finger-Prop'] = own['time1']
        Finger2['Finger-Prop'] = own['time1']   
        Finger3['Finger-Prop'] = own['time1']
        Finger4['Finger-Prop'] = own['time1'] 
        Finger5['Finger-Prop'] = own['time1']
    except:
        print ("error 004: undefined error")
        pass