]> git.piffa.net Git - sketchbook_andrea/blob - motors/stepper/step_3_half_step/step_3_half_step.ino
array
[sketchbook_andrea] / motors / stepper / step_3_half_step / step_3_half_step.ino
1
2
3 /*
4        BYJ48 Stepper motor code
5  Connect :
6  IN1 >> D8
7  IN2 >> D9
8  IN3 >> D10
9  IN4 >> D11
10  VCC ... 5V Prefer to use external 5V Source
11  Gnd
12  written By :Mohannad Rawashdeh
13  http://www.instructables.com/member/Mohannad+Rawashdeh/
14  28/9/2013
15  */
16
17 #define IN1  8
18 #define IN2  9
19 #define IN3  10
20 #define IN4  11
21 int Steps = 0;
22 boolean Direction = true;// gre
23 unsigned long last_time;
24 unsigned long currentMillis ;
25 int steps_left=4095;
26 long time;
27
28 void SetDirection();
29 void stepper(int xw);
30
31 void setup()
32 {
33   Serial.begin(115200);
34   pinMode(IN1, OUTPUT); 
35   pinMode(IN2, OUTPUT); 
36   pinMode(IN3, OUTPUT); 
37   pinMode(IN4, OUTPUT); 
38   // delay(1000);
39
40 }
41 void loop()
42 {
43   while(steps_left>0){
44     currentMillis = micros();
45     if(currentMillis-last_time>=1000){
46       stepper(1); 
47       time=time+micros()-last_time;
48       last_time=micros();
49       steps_left--;
50     }
51   }
52   Serial.println(time);
53   Serial.println("Wait...!");
54   delay(2000);
55   Direction=!Direction;
56   steps_left=4095;
57 }
58
59 void stepper(int xw){
60   for (int x=0;x<xw;x++){
61     switch(Steps){
62     case 0:
63       digitalWrite(IN1, LOW); 
64       digitalWrite(IN2, LOW);
65       digitalWrite(IN3, LOW);
66       digitalWrite(IN4, HIGH);
67       break; 
68     case 1:
69       digitalWrite(IN1, LOW); 
70       digitalWrite(IN2, LOW);
71       digitalWrite(IN3, HIGH);
72       digitalWrite(IN4, HIGH);
73       break; 
74     case 2:
75       digitalWrite(IN1, LOW); 
76       digitalWrite(IN2, LOW);
77       digitalWrite(IN3, HIGH);
78       digitalWrite(IN4, LOW);
79       break; 
80     case 3:
81       digitalWrite(IN1, LOW); 
82       digitalWrite(IN2, HIGH);
83       digitalWrite(IN3, HIGH);
84       digitalWrite(IN4, LOW);
85       break; 
86     case 4:
87       digitalWrite(IN1, LOW); 
88       digitalWrite(IN2, HIGH);
89       digitalWrite(IN3, LOW);
90       digitalWrite(IN4, LOW);
91       break; 
92     case 5:
93       digitalWrite(IN1, HIGH); 
94       digitalWrite(IN2, HIGH);
95       digitalWrite(IN3, LOW);
96       digitalWrite(IN4, LOW);
97       break; 
98     case 6:
99       digitalWrite(IN1, HIGH); 
100       digitalWrite(IN2, LOW);
101       digitalWrite(IN3, LOW);
102       digitalWrite(IN4, LOW);
103       break; 
104     case 7:
105       digitalWrite(IN1, HIGH); 
106       digitalWrite(IN2, LOW);
107       digitalWrite(IN3, LOW);
108       digitalWrite(IN4, HIGH);
109       break; 
110     default:
111       digitalWrite(IN1, LOW); 
112       digitalWrite(IN2, LOW);
113       digitalWrite(IN3, LOW);
114       digitalWrite(IN4, LOW);
115       break; 
116     }
117     SetDirection();
118   }
119
120 void SetDirection(){
121   if(Direction==1){ 
122     Steps++;
123   }
124   if(Direction==0){ 
125     Steps--; 
126   }
127   if(Steps>7){
128     Steps=0;
129   }
130   if(Steps<0){
131     Steps=7; 
132   }
133 }
134
135