Tried hard to solve this problem, using a timer ... but without succes .
Any advice will be very appreciated !


Code:
@ __config _XT_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_ON 

DEFINE OSC  4

CMCON    = 7
TRISIO   = %00001011
INTCON   = 0 
IOC      = 0
GPIO     = 0
ANSEL    = %00110001
ADCON0.7 = 1

nr        var word
adca 	  var word
adcb	  var word

ADCValue  var WORD		' Final ADC Result
CounterA  var BYTE		' Just a BYTE Temporary working variable
DataW     var WORD		' Just a WORD Temporary working variable
RawData   var word [10]		' Array holding ADC Result
TIP_press VAR BIT

j  VAR word

GPIO.2 = 0
GIE VAR INTCON.7
GPIE VAR INTCON.3
GPIF VAR INTCON.0
Timer1  var word EXT :@Timer1 = TMR1L
TMR1ON  VAR T1CON.0
TMR1IF  VAR PIR1.0
LONGPRESS   VAR BIT
T1CON =  %00110100
T1COUNT VAR BYTE
GIE =0
GPIE=0
IOC.0 = 1
ok var bit

;============================================================================
Main: 
ok=0
tip_press=0
TIMER1 =3037
T1COUNT=0
LONGPRESS=0
nr=1

ADCON0 = %10000001
		Pauseus 50			
	        ADCON0.1 = 1			
		While ADCON0.1=1:Wend		
		DataW.HighByte=ADRESH		
		DataW.LowByte=ADRESL

	if dataw < 631 then
    		TMR1ON=1
    		pause 1

	    	WHILE dataw < 631
    	    	T1COUNT=T1COUNT + 1
            	CALL CHECK
            	WEND

    		IF LONGPRESS = 1 THEN
    		TIP_press = 1
    		ELSE
    		TIP_press = 0
    		ENDIF

    		T1COUNT = 0
    		pause 1
		call achizitie
	endif

gosub efectuez
gpif = 0
GOTO MAIN


achizitie:
for nr = 1 to 2
For CounterA=0 to 9
ADCON0 = %10000001
		Pauseus 50			' Wait for channel to setup
	        ADCON0.1 = 1			' Start conversion
		While ADCON0.1=1:Wend		' Wait for conversion
		DataW.HighByte=ADRESH		' Read variable from ADC and save
		DataW.LowByte=ADRESL
		RawData(CounterA)=DataW
		Next CounterA
CounterA=0 
Gosub Getsort
next nr
return

CHECK: 
  IF TMR1IF then
      TMR1IF  = 0
      Timer1  = 3037
      T1Count = T1Count + 1
      if T1Count = 2 then 
        TMR1ON = 0
        T1Count = 0
        LongPress = 1
      endif
  ENDIF
RETURN
                         
;============================================================================
GetSort:
	If RawData(CounterA+1) < RawData(CounterA) then
		DataW=RawData(CounterA)
		RawData(CounterA)=RawData(CounterA+1)
		RawData(CounterA+1)=DataW
		If CounterA>0 then CounterA=CounterA-2
		endif
	CounterA=CounterA+1
	If CounterA<10 then goto GetSort


	DataW=0
	For CounterA=4 to 7 
		DataW=DataW+RawData(CounterA)
		Next CounterA
	ADCValue=DataW>>2
if nr = 1 then 
adca = adcvalue
else
adcb = adcvalue		
endif

if adcb=adca then ok = 1

Return
;============================================================================
efectuez:
if ok=1 then
      IF adcb > 300 AND adcb < 350 THEN 
			if tip_press = 1 then 
				gpio.2 = 1 : pause 2000 : gpio.2 = 0
			else
				gpio.2 = 1 : pause 500 : gpio.2 = 0
			endif
      endif
endif
Return
;============================================================================
Name:  press_test.jpg
Views: 7024
Size:  180.9 KB