Single button function


Results 1 to 40 of 41

Threaded View

  1. #13
    Join Date
    May 2004
    Location
    NW France
    Posts
    3,653


    Did you find this post helpful? Yes | No

    Post

    Hi, Konrad

    I used such a "multi role" button simply by using the BUTTON Command in a loop...

    the example is here,

    Code:
    '*****************************************************************************
    'Servotest 84 D'après Elektor
    '*****************************************************************************
    '
    '16F84A à 20 Mhz
    
    ' Barregraph 7 leds sur PortB
    ' résolution variable 2-6-20 µS
    ' Mémorisation réglage " moyen"
    
    @  __config _HS_OSC & _WDT_ON & _CP_ON
    
    DEFINE OSC 20 ' 
    DEFINE BUTTON_PAUSE 18
    
    Signal	var PortA.0
    Writeok	var PortA.1 ' Indicateur mode : 0 = manuel 1 = Cycle
    Up 		var PortA.2	' Rotation à Droite
    Down 	var PortA.3 ' Rotation à gauche
    Prog 	var PortA.4 ' Bouton mémorisation
    
    pos 	var Word
    posn 	var Word
    
    compte	var Byte
    dir 	var Byte
    delay	var Byte
    N		var Byte
    
    PORTA 	= 0
    PORTB 	= %00001000 'PortB.7 libre, Led centrale allumée.
    
    TRISA 	= %00011100
    TRISB 	= %00000000
    
    
    READ 1, Posn.HighByte
    READ 2, Posn.LowByte
    
    IF posn = $FFFF OR posn < 750 OR posn > 2250 THEN posn = 1500
    pos = posn
    
    '*****************************************************************************
    mainloop:
    
    Writeok = 0
    
    delay = 0
    
    button Up, 		0, 255, 0, delay, 1, upbutton
    button Down, 	0, 255, 0, delay, 1, dwnbutton
    button Prog, 	0, 255, 0, delay, 1, Program
    
    Gosub Outsig
    PAUSE 18
    compte = 0
    
    Goto Mainloop
    
    
    '*****************************************************************************
    upbutton:
    
    IF Down = 0 THEN 
    
    	Pos = posn
    	Goto Jump1
    	
    Endif
    
    	Compte = compte + 1
    	
    	Select Case Compte
    	
    		Case 255
    			Compte = Compte-1
    			N = 10
    			
    		Case is > 50
    			N = 10
    				
    		Case is > 15 
    		 	N = 3
    		 	
    		Case else
    			N = 1
    			
    	End Select
    	
       	pos = pos + 2*N
       
       	if pos > 2250 then  pos = 2250
      
    Jump1:
    
    For delay = 1 to 9	
    
    	Gosub Outsig
    	Pause 18
    
    Next delay
    
    	Gosub Outsig
    
    Goto mainloop
    
    
    '*****************************************************************************
    dwnbutton:
    
    IF Up = 0 THEN 
    
    	Pos = posn
    	Goto Jump2
    	
    Endif
    
    	Compte = compte + 1
    	
    	Select Case Compte
    	
    		Case 255
    			Compte = Compte - 1
    			N = 10
    			
    		Case is > 50
    			N = 10
    			
    		Case is > 10 
    		 	N = 3
    		 			
    		Case else
    			N = 1
    			
    	End Select
    	
       	pos = pos - 2*N
       
       	if pos < 750 then pos = 750
       	 
    Jump2:
    	
    For delay = 1 to 9	
    
    	Gosub Outsig
    	Pause 18
    
    Next delay
    
    	Gosub Outsig
    
     Goto mainloop
     
    
    '*****************************************************************************
    Program:
    
    Compte = 0
    
    Test: 
    
    IF Prog = 0 Then 
    	
    	compte = compte + 1
    	Gosub Outsig
    	Pause 18
    	
    	IF Compte > 250 THEN Compte = 250: Goto Test
    	IF Compte >= 80 THEN WriteoK = Compte .4 : Goto Test
    	IF Compte >= 20 THEN WriteoK = Compte .2
    	
    	Goto Test		'Attendre relâchement bouton ...
    	
    Endif	
    	
    	IF Compte > 250 OR Compte < 20 Then mainloop
    	
    	IF Compte >= 80 Then
    	 
    		pos = 1500 
    		Goto Save	'remise au Neutre
    
    	Endif	
    
    					'Position "moyenne"
    
    
    Save:
    
    WRITE 1, Pos.HighByte			' 10ms
    WRITE 2, Pos.LowByte			' 10ms
    
    	Posn = pos
    	Gosub Outsig
    
    For delay = 1 to 25
    	
    	WriteoK = 1
    	Gosub Outsig
    	Pause 18
    	
    Next Delay
    	
    	Goto mainloop
    
    
    	
    '*****************************************************************************
    Outsig:
    
    Select Case pos			'Allumage Bargraph
    
    	Case 750
    	
    		PortB = %01100001
    
    	Case is <= posn - 635
    	
    		PortB = %01000000
    		
    	Case is <= posn - 519
    	
    		PortB = %01100000
    		
    	Case is <= posn - 404
    	
    		PortB = %00100000
    		
    	Case is <= posn - 288
    	
    		PortB = %00110000
    		
    	Case is <= Posn - 173	
    	
    		PortB = %00010000
    		
    	Case is <= Posn - 58
    	
    		PortB = %00011000
    		
    	Case is <= Posn
    	
    		PortB = %01001000
    		
    '*****************************************************************************		
    	Case posn					' Position centrée
    	
    		PortB = %01001001
    '*****************************************************************************
    			
    	Case is <= posn + 58
    	
    		PortB = %00001001
    		
    	Case is <= posn + 173
    	
    		PortB = %00001100
    		
    	Case is <= posn + 288
    	
    		PortB = %00000100
    	
    	Case is <= posn + 404
    	
    		PortB = %00000110
    			
    	Case is <= posn + 519
    	
    		PortB = %00000010
    		
    	Case is <= posn + 635
    	
    		PortB = %00000011
    		
    	Case is < posn + 750
    	
    		PortB = %00000001
    		
    	Case 2250
    	
    		PortB = %01000011
    		
    END Select
    		
    Low Signal
    Pulsout Signal, pos /2		'Envoi Signal servo
    
    RETURN
    
    END

    The "important" sections have been Highlighted ...

    Here, the more the pressing UP and DOWN buttons speed up the 'count speed' ... pressing "prog" permits to choose beetween options ...
    Note WriteOk is a led that shows the delay increasing value when pushing the button ...

    Alain
    Last edited by Acetronics2; - 15th January 2008 at 12:58.
    ************************************************** ***********************
    Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
    ************************************************** ***********************
    IF there is the word "Problem" in your question ...
    certainly the answer is " RTFM " or " RTFDataSheet " !!!
    *****************************************

Similar Threads

  1. Sony SIRC IR Issue
    By Ryan7777 in forum mel PIC BASIC Pro
    Replies: 10
    Last Post: - 8th August 2015, 08:10
  2. 3 HPWM channels
    By docwisdom in forum mel PIC BASIC Pro
    Replies: 9
    Last Post: - 4th April 2006, 02:43
  3. Code check -- button not working
    By docwisdom in forum mel PIC BASIC Pro
    Replies: 12
    Last Post: - 2nd March 2006, 22:43
  4. Pushbutton code routine suggestions?
    By jessey in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 3rd September 2005, 01:02
  5. Button subfunction 16F628
    By Jųan in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 19th August 2005, 16:44

Members who have read this thread : 1

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