Control stepper w/IR clicker

jims

Senior Member
I decided to play around with a stepper motor and a Darlington that I came across in my parts box. Based on this schematic & code in the next post this project runs well. The stepper is powered from a separate 5VDC supply & there is a .1uF decoupling cap on the 20x2. The rotation direction and the speed are controlled with an IR clicker. I'm using the time out value set in the IRIN command to control the speed. I'd appreciate it if FORUM viewers will feedback comments about ways to simplify/improve this code. Thank you in advance. JimSstep motor & IR.JPG
 

jims

Senior Member
Trying again:
Code:
[color=Green]'******************************************************************
'** STEPPER MOTOR DRIVER ROUTINE  PICAXE 20x2                **
'** Control stepper motor with IR controller.               **
'** IR controller "clear" key stops motor and goes to idle.      **
'** Use Sony Remote code "TV 1007".                         **
'******************************************************************[/color]

[color=Blue]symbol [/color][color=Purple]speed[/color][color=DarkCyan]=[/color][color=Purple]b0[/color]
[color=Blue]symbol [/color][color=Purple]coils[/color][color=DarkCyan]=[/color][color=Purple]b1[/color]
[color=Blue]symbol [/color][color=Purple]irdata[/color][color=DarkCyan]=[/color][color=Purple]b2[/color]
[color=Blue]symbol [/color][color=Purple]steps[/color][color=DarkCyan]=[/color][color=Purple]w4[/color]
[color=Blue]symbol idleled[/color][color=DarkCyan]=[/color][color=Blue]B.7      [/color][color=Green]'(pin 11).[/color]
[color=Blue]symbol ir_rcv[/color][color=DarkCyan]=[/color][color=Blue]B.4       [/color][color=Green]'(pin 14). [/color]

[color=Navy]#picaxe [/color][color=Black]20x2      [/color][color=Green]'Define 20x2 chip.[/color]
[color=Blue]setfreq m4[/color]
[color=Purple]dirsC [/color][color=DarkCyan]= [/color][color=Navy]%00001111 [/color][color=Green]'Define output pins.[/color]
[color=Blue]pause [/color][color=Navy]1000
 [/color]
[color=Black]idle: 
            [/color][color=Blue]pause [/color][color=Navy]100
            [/color][color=Blue]high idleled                        [/color][color=Green];Turn On idle LED;
            [/color][color=Blue]let [/color][color=Purple]outpinsC [/color][color=DarkCyan]= [/color][color=Navy]%00000000      [/color][color=Green]'Turn output pins OFF.
            [/color][color=Blue]irin IR_RCV[/color][color=Black],[/color][color=Purple]irdata            [/color][color=Green]'Wait until receive IR data from clicker.
            [/color][color=Blue]if [/color][color=Purple]irdata [/color][color=DarkCyan]= [/color][color=Navy]99 [/color][color=Blue]then low idleled[/color][color=Black]:[/color][color=Blue]goto [/color][color=Black]idle:[/color][color=Blue]endif[/color]

[color=Green]'**************************************************************
'** NOTE "speed" settings are used as "timeouts" in the irin **
'** statements to control speed of rotation.            **
'** Set "speed" to get desired rotation speed.          **
'**************************************************************   [/color]
[color=Black]decide:
            [/color][color=Blue]select case [/color][color=Purple]b2
            [/color][color=Blue]case [/color][color=Navy]18 [/color][color=Blue]let [/color][color=Purple]speed[/color][color=DarkCyan]=[/color][color=Navy]2[/color][color=Black]:[/color][color=Blue]goto [/color][color=Black]go_CW    [/color][color=Green]'IR clicker "right arrow" turns cw fast.
            [/color][color=Blue]case [/color][color=Navy]19 [/color][color=Blue]let [/color][color=Purple]speed[/color][color=DarkCyan]=[/color][color=Navy]100[/color][color=Black]:[/color][color=Blue]goto [/color][color=Black]go_CW  [/color][color=Green]'IR clicker "left arrow" turns cw slowly.
            [/color][color=Blue]case [/color][color=Navy]16 [/color][color=Blue]let [/color][color=Purple]speed[/color][color=DarkCyan]=[/color][color=Navy]2[/color][color=Black]:[/color][color=Blue]goto [/color][color=Black]go_CCW   [/color][color=Green]'IR clicker "up arrow" turns ccw fast.
            [/color][color=Blue]case [/color][color=Navy]17 [/color][color=Blue]let [/color][color=Purple]speed[/color][color=DarkCyan]=[/color][color=Navy]100[/color][color=Black]:[/color][color=Blue]goto [/color][color=Black]go_CCW [/color][color=Green]'IR clicker "down arrow" turns ccw slowly.
            [/color][color=Blue]case [/color][color=Navy]11 [/color][color=Blue]goto [/color][color=Black]step_cw              [/color][color=Green]'IR clicker "OK" key steps cw.
            [/color][color=Blue]case [/color][color=Navy]37 [/color][color=Blue]goto [/color][color=Black]step_ccw             [/color][color=Green]'IR clicker "INPUT" key" steps ccw.
            [/color][color=Blue]endselect
            [/color]

[color=Green]'** Turn OFF idle LED & rotate CW fast or slow           **
'** based on "speed" selected by IR clicker in "decide". **
'** Rotates until "clear" key causes exit to idle.       **[/color]

[color=Black]go_CW:

            [/color][color=Blue]low B.7
                              
            do           
             for [/color][color=Purple]coils [/color][color=DarkCyan]= [/color][color=Navy]0 [/color][color=Blue]to [/color][color=Navy]3
             [/color][color=Blue]lookup [/color][color=Purple]coils[/color][color=Black],[/color][color=Blue]([/color][color=Navy]3[/color][color=Black],[/color][color=Navy]6[/color][color=Black],[/color][color=Navy]12[/color][color=Black],[/color][color=Navy]9[/color][color=Blue])[/color][color=Black],[/color][color=Purple]pinsC      [/color][color=Green]'Coil sequence for my stepper.
             [/color][color=Blue]next [/color][color=Purple]coils
             [/color][color=Blue][PLAIN]irin[[/PLAIN][/color][color=Purple]speed[/color][color=Blue][PLAIN]][/PLAIN][/color][color=Black],[/color][color=Blue]IR_RCV[/color][color=Black],[/color][color=Purple]irdata          [/color][color=Green];Look for IR controller button.
             [/color][color=Blue]if [/color][color=Purple]irdata [/color][color=DarkCyan]= [/color][color=Navy]99 [/color][color=Blue]then [/color][color=Black]idle     [/color][color=Green];IR clicker "clear" key stops rotation & goes to idle.
            [/color][color=Blue]loop[/color]


[color=Green]'** Turn OFF idle LED & rotate CCW fast or slow          **
'** based on "speed" selected by IR clicker in "decide". **
'** Rotates until "clear" key causes exit to idle.       **
            [/color]
[color=Black]go_CCW:     
            [/color][color=Blue]low B.7
                              
            do                
             for [/color][color=Purple]coils [/color][color=DarkCyan]= [/color][color=Navy]0 [/color][color=Blue]to [/color][color=Navy]3
             [/color][color=Blue]lookup [/color][color=Purple]coils[/color][color=Black],[/color][color=Blue]([/color][color=Navy]9[/color][color=Black],[/color][color=Navy]12[/color][color=Black],[/color][color=Navy]6[/color][color=Black],[/color][color=Navy]3[/color][color=Blue])[/color][color=Black],[/color][color=Purple]pinsC      [/color][color=Green]'Coil sequence for my stepper.
             [/color][color=Blue]next [/color][color=Purple]coils
             [/color][color=Blue][PLAIN]irin[[/PLAIN][/color][color=Purple]speed[/color][color=Blue][PLAIN]][/PLAIN][/color][color=Black],[/color][color=Blue]IR_RCV[/color][color=Black],[/color][color=Purple]irdata          
             [/color][color=Blue]if [/color][color=Purple]irdata [/color][color=DarkCyan]= [/color][color=Navy]99 [/color][color=Blue]then [/color][color=Black]idle     [/color][color=Green];IR clicker "clear" key stops rotation & goes to idle.
            [/color][color=Blue]loop
            [/color]

[color=Green]'** Turn OFF idle LED; rotate 2 steps CW; **
'** & return to "idle".              **

 [/color][color=Black]step_cw:                                 
            [/color][color=Blue]low B.7                 
            [/color][color=Purple]steps[/color][color=DarkCyan]=[/color][color=Navy]0
            [/color][color=Blue]do until [/color][color=Purple]steps[/color][color=DarkCyan]=[/color][color=Navy]2                    
             [/color][color=Blue]for [/color][color=Purple]coils[/color][color=DarkCyan]=[/color][color=Navy]0 [/color][color=Blue]to [/color][color=Navy]3
             [/color][color=Blue]lookup [/color][color=Purple]coils[/color][color=Black],[/color][color=Blue]([/color][color=Navy]3[/color][color=Black],[/color][color=Navy]6[/color][color=Black],[/color][color=Navy]12[/color][color=Black],[/color][color=Navy]9[/color][color=Blue])[/color][color=Black],[/color][color=Purple]pinsC      [/color][color=Green]'Coil sequence for my stepper.
             [/color][color=Blue]next [/color][color=Purple]coils
             [/color][color=Blue]inc [/color][color=Purple]steps
            [/color][color=Blue]loop
            goto [/color][color=Black]idle[/color]


[color=Green]'** Turn OFF idle LED; rotate 2 steps CCW; **
'** & return to "idle".               **[/color]

[color=Black]step_ccw:                                 
            [/color][color=Blue]low B.7                 
            [/color][color=Purple]steps[/color][color=DarkCyan]=[/color][color=Navy]0
            [/color][color=Blue]do until [/color][color=Purple]steps[/color][color=DarkCyan]=[/color][color=Navy]2                    
             [/color][color=Blue]for [/color][color=Purple]coils[/color][color=DarkCyan]=[/color][color=Navy]0 [/color][color=Blue]to [/color][color=Navy]3
             [/color][color=Blue]lookup [/color][color=Purple]coils[/color][color=Black],[/color][color=Blue]([/color][color=Navy]9[/color][color=Black],[/color][color=Navy]12[/color][color=Black],[/color][color=Navy]6[/color][color=Black],[/color][color=Navy]3[/color][color=Blue])[/color][color=Black],[/color][color=Purple]pinsC      [/color][color=Green]'Coil sequence for my stepper.
             [/color][color=Blue]next [/color][color=Purple]coils
             [/color][color=Blue]inc [/color][color=Purple]steps
            [/color][color=Blue]loop
            goto [/color][color=Black]idle
            [/color]
 
Top