Contrôle de moteur pas-à-pas par commande demi-pas

Le programme ci-dessous permet de contrôler un moteur pas-à-pas 28BYJ-48 avec un contrôleur ULN2003 en étant plus précis (commande par demi-pas) :

1
int IN1 = 8;      // pin digital 8 relié à IN1
2
int IN2 = 9;      // pin digital 9 à IN2
3
int IN3 = 10;     // pin digital 10 à IN3
4
int IN4 = 11;     // pin digital 11 à IN4
5
int temps = 20;  // temps entre les pas, minimum 10 ms.
6
// Array bidimensionnel qu'indique la séquence des pas 
7
int pas [8][4] ={
8
  {1, 0, 0, 0},
9
  {1, 1, 0, 0},
10
  {0, 1, 0, 0},
11
  {0, 1, 1, 0},
12
  {0, 0, 1, 0},
13
  {0, 0, 1, 1},
14
  {0, 0, 0, 1},
15
  {1, 0, 0, 1}
16
};
17
18
void setup(){
19
  // tous les pins se configurent comme sorties
20
  pinMode(IN1, OUTPUT);
21
  pinMode(IN2, OUTPUT);
22
  pinMode(IN3, OUTPUT);
23
  pinMode(IN4, OUTPUT);
24
}
25
26
void loop(){
27
  // 512*8 = 4096 pas
28
  for (int i = 0; i < 512; i++){
29
    // boucle repasse le array ligne à ligne
30
    for (int i = 0; i < 8; i++){
31
      // valeurs qu'on va appliquer 
32
      digitalWrite(IN1, pas[i][0]);
33
      digitalWrite(IN2, pas[i][1]);
34
      digitalWrite(IN3, pas[i][2]);
35
      digitalWrite(IN4, pas[i][3]);
36
      delay(temps);
37
    }
38
  }
39
  // pause de 5 secondes
40
  digitalWrite(IN1, LOW);
41
  digitalWrite(IN2, LOW);
42
  digitalWrite(IN3, LOW);
43
  digitalWrite(IN4, LOW);
44
  delay(temps);
45
}

Dans ce cas, les bobines sont pilotées ainsi :

Question : Téléversez le code, et constatez le fonctionnement.