How to measure how long I pressed a button ?


Results 1 to 19 of 19

Threaded View

  1. #13
    Join Date
    May 2013
    Location
    australia
    Posts
    2,680


    1 out of 1 members found this post helpful. Did you find this post helpful? Yes | No

    Default Re: How to measure how long I pressed a button ?

    a bit fancier


    Code:
    #CONFIGcfg =  _INTRC_OSC_NOCLKOUT
    cfg&= _WDT_ON
    cfg&= _PWRTE_OFF
    cfg&= _MCLRE_ON
    cfg&= _BODEN_ON
    cfg&= _CP_OFF
    cfg&= _CPD_OFF
      __CONFIG cfg
    #ENDCONFIG
        DEFINE INTHAND _TICK
        
        DEFINE DEBUG_REG GPIO
        DEFINE DEBUG_BIT 2
        DEFINE DEBUG_BAUD 9600
        DEFINE DEBUG_MODE 0
        
        CMCON    = 7
        TRISIO   = 111001
        INTCON   = $C0 
        PIE1.0   = 1
        ANSEL    = 110001
    CLEAR
    ' Constante
    TimerReload   CON   61637     ;3.906mS
    ' Variabile
    W_TEMP        VAR BYTE BANK0
    STATUS_TEMP   VAR BYTE BANK0
    MILLIES       var word BANK0
    b_level       var byte
    b_state       var byte
    NOW           var word
    LEDT          var word
    buttont       var word
    duration      var word
    DataW         var word
    
    
    GPIO.2 = 0
    ADCON0 = 000001
    T1CON = 000001 'Prescaler 1:1,Timer1  ON  
    
    
    Main:
        PIE1.0 = 0
        NOW = MILLIES    ;in 3.906mS ticks
        PIE1.0 = 1
        IF NOW - LEDT > 250 THEN    ;1 sec
            LEDT = NOW
            TOGGLE GPIO.1
        ENDIF
        ADCON0.1 = 1
        While ADCON0.1 = 1 : Wend 
        DataW.HighByte = ADRESH 
        DataW.LowByte  = ADRESL
        if DataW < 805 then
                if DataW > 50  AND DataW < 160 THEN b_level = 1
                if DataW > 180 AND DataW < 270 THEN b_level = 2
                if DataW > 290 AND DataW < 380 THEN b_level = 3
                if DataW > 400 AND DataW < 520 THEN b_level = 4
                if DataW > 540 AND DataW < 650 THEN b_level = 5
                if DataW > 690 AND DataW < 800 THEN b_level = 6
          if  b_state == 0 then      
                b_state  = 1 
                buttont  = now
          else
                DEBUG "button ",#b_level, 13, 10
          endif
        ELSE 
          if   b_state then
    '           duration = (now - buttont)<<2
               duration = now - buttont
               buttont = duration.lowbyte */1000
               b_state  = 0 
               DEBUG "Pressed button ",#b_level," for : ", #duration.highbyte,".",#buttont, " S", 13, 10
    '           DEBUG "Pressed button ",#b_level," for : ", #duration, "mS", 13, 10
               b_level = 0
          endif
        endif 
    GOTO Main
    
    
    
    
    TICK:            ;isr
    asm
        MOVWF _W_TEMP ;copy W to temp register,could be in either bank
        SWAPF STATUS,W ;swap status to be saved into W
        BCF STATUS,RP0 ;change to bank 0 regardless of     current bank
        MOVWF _STATUS_TEMP
        MOVE?CT 0, T1CON, TMR1ON ; stop timer
        MOVLW LOW(_TimerReload) ; Add TimerReload
        ADDWF TMR1L,F
        BTFSC STATUS,C
        INCF TMR1H,F
        MOVLW HIGH(_TimerReload)
        ADDWF TMR1H,F
        MOVE?CT 1, T1CON, TMR1ON ; start timer
        MOVE?CT 0, PIR1, TMR1IF ; CLR timer FLAG
        INCF _MILLIES ,F
        BTFSC STATUS,Z
        INCF _MILLIES+1 ,F
        SWAPF _STATUS_TEMP,W;swap STATUS_TEMP register int    W, sets bank to original state
        MOVWF STATUS ;move W into STATUS register
        SWAPF _W_TEMP,F ;swap W_TEMP
        SWAPF _W_TEMP,W ;swap W_TEMP into W
        RETFIE
    endASM
    Last edited by richard; - 29th March 2024 at 11:04. Reason: note modified button 4 for my testing
    Warning I'm not a teacher

Similar Threads

  1. TMR1 & Button - long delay (1 min) before starting
    By flotulopex in forum mel PIC BASIC Pro
    Replies: 9
    Last Post: - 14th March 2017, 13:03
  2. Long / short press button...but reading ADC
    By fratello in forum mel PIC BASIC Pro
    Replies: 37
    Last Post: - 10th July 2016, 08:37
  3. Replies: 5
    Last Post: - 26th February 2011, 05:51
  4. Replies: 1
    Last Post: - 14th October 2010, 18:33
  5. Button pressed time control
    By tanero in forum mel PIC BASIC Pro
    Replies: 12
    Last Post: - 15th August 2005, 15:17

Members who have read this thread : 2

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts