// commande d'un moteur pas à pas unipolaire avec un ULN2803 #define PHASE_A 2 #define PHASE_B 3 int etape; void pas(int etape) { switch(etape) { case 0: // 1010 digitalWrite(PHASE_A,HIGH); digitalWrite(PHASE_B,HIGH); break; case 1: // 0110 digitalWrite(PHASE_A,LOW); digitalWrite(PHASE_B,HIGH); break; case 2: // 0101 digitalWrite(PHASE_A,LOW); digitalWrite(PHASE_B,LOW); break; case 3: // 1001 digitalWrite(PHASE_A,HIGH); digitalWrite(PHASE_B,LOW); break; } } void pas_sens_1() { etape++; if (etape>3) etape = 0; pas(etape); } void pas_sens_2() { etape--; if (etape<0) etape = 3; pas(etape); } void setup() { pinMode(PHASE_A,OUTPUT); pinMode(PHASE_B,OUTPUT); etape = 0; pas(etape); } void loop() { int k; unsigned long duree_pas = 20; unsigned long temps; for (k=0; k<48; k++) { temps = millis(); pas_sens_1(); while (millis()-temps < duree_pas) { // autre chose à faire pendant le pas moteur } } delay(2000); }