Gordons Projects

--> Projects Top-Level GIT

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