Gordons Projects

--> Projects Top-Level GIT

Removed some old files
[pibrella] / stepper.c
1 /*
2  * stepper.c:
3  *      Controll a micro stepper motor off the Pibrella board
4  *      Copyright (c) Gordon Henderson, 2014
5  ***********************************************************************
6  *    This is free software: you can redistribute it and/or modify
7  *    it under the terms of the GNU Lesser General Public License as published by
8  *    the Free Software Foundation, either version 3 of the License, or
9  *    (at your option) any later version.
10  *
11  *    This is distributed in the hope that it will be useful,
12  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *    GNU Lesser General Public License for more details.
15  *
16  *    You should have received a copy of the GNU Lesser General Public License
17  *    along with This.  If not, see <http://www.gnu.org/licenses/>.
18  ***********************************************************************
19  */
20
21 #include <stdio.h>
22 #include <stdlib.h>
23 #include <unistd.h>
24 #include <math.h>
25
26 #include <wiringPi.h>
27
28 #include "pibrella.h"
29
30 #define MAX_STEPS       8
31
32 static int sequence [] =
33 {
34   1, 0, 0, 0,
35   1, 1, 0, 0,
36   0, 1, 0, 0,
37   0, 1, 1, 0,
38   0, 0, 1, 0,
39   0, 0, 1, 1,
40   0, 0, 0, 1,
41   1, 0, 0, 1,
42 } ;
43
44 static int sequenceStep = 0 ;
45
46
47 /*
48  * stepCW: stepACW:
49  *      Step the motor for the given number of steps clockwise or anticlockwise
50  *********************************************************************************
51  */
52
53 static void stepCW (int steps)
54 {
55   int i ;
56
57   for (i = 0 ; i < steps ; ++i)
58   {
59     sequenceStep -= 4 ;
60     if (sequenceStep < 0)
61       sequenceStep = MAX_STEPS * 4 - 4 ;
62
63     digitalWrite (PIBRELLA_OUT_0, sequence [sequenceStep+0]) ;
64     digitalWrite (PIBRELLA_OUT_1, sequence [sequenceStep+1]) ;
65     digitalWrite (PIBRELLA_OUT_2, sequence [sequenceStep+2]) ;
66     digitalWrite (PIBRELLA_OUT_3, sequence [sequenceStep+3]) ;
67
68     delay (1) ;
69   }
70 }
71
72
73 static void stepACW (int steps)
74 {
75   int i ;
76
77   for (i = 0 ; i < steps ; ++i)
78   {
79     sequenceStep += 4 ;
80     if (sequenceStep >= (MAX_STEPS * 4))
81       sequenceStep = 0 ;
82
83     digitalWrite (PIBRELLA_OUT_0, sequence [sequenceStep+0]) ;
84     digitalWrite (PIBRELLA_OUT_1, sequence [sequenceStep+1]) ;
85     digitalWrite (PIBRELLA_OUT_2, sequence [sequenceStep+2]) ;
86     digitalWrite (PIBRELLA_OUT_3, sequence [sequenceStep+3]) ;
87
88     delay (1) ;
89   }
90 }
91
92
93
94 /*
95  * main:
96  ***********************************************************************
97  */
98
99 int main (void)
100 {
101   wiringPiSetup () ;
102   pibrellaSetup () ;
103
104   for (;;)
105   {
106     stepCW (4096) ;
107     delay (100) ; 
108     stepACW (4096) ;
109     delay (100) ; 
110   }
111
112   return 0 ;
113 }