//The code is very simple, here is mine, I am not sure if I used this exact code in the video, you might need to tinker with it. int phase1 = 2;//3;//4;//2;//4;//3;// int phase2 = 3;//2;//3;//4;//2;//4;// int phase3 = 4;//4;//2;//3;//3;//2;// int led1 = 9; int led2 = 10; int led3 = 11; unsigned long stepLength =40000; int minStepLength = 7000;//1400; int steps =3;// 5; void setup() { Serial.begin(115200); //saz pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(phase1, OUTPUT); pinMode(phase2, OUTPUT); pinMode(phase3, OUTPUT); digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); Serial.println("Inicio..."); } void loop() { switchStep(1); switchStep(2); switchStep(3); Serial.println("stepLength = " + String(stepLength)); if(stepLength > minStepLength) { stepLength = stepLength - steps; } else { // set the minimum pulse length stepLength=minStepLength; } if (stepLength < 39950) { digitalWrite(led1, HIGH); // second gear digitalWrite(led2, LOW); digitalWrite(led3, LOW); steps = 300; } if (stepLength < 20000) { digitalWrite(led1, LOW); // third gear digitalWrite(led2, HIGH); digitalWrite(led3, LOW); steps = 50; } if (stepLength < 3000) { digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, HIGH); // fourth gear steps = 2; } } void switchStep(int stage){ Serial.print( String(stage)+ "--" ); switch(stage) { case 1: digitalWrite(phase1, HIGH); digitalWrite(phase2, LOW); digitalWrite(phase3, LOW); Serial.println("1 0 0"); myDelay(stepLength); break; case 2: digitalWrite(phase1, LOW); digitalWrite(phase2, HIGH); digitalWrite(phase3, LOW); Serial.println("0 1 0"); myDelay(stepLength); break; default: digitalWrite(phase1, LOW); digitalWrite(phase2, LOW); digitalWrite(phase3, HIGH); Serial.println("0 0 1"); myDelay(stepLength); break; } } void myDelay(unsigned long p) { if (p > 16380) { delay (p/1000); } else { delayMicroseconds(p); } }