Шаговый двигатель и сдвиговый регистр. Вот скетч думаю над скетчем управления двух шаговиков или шаговиком и Н мостом.
Вот ещё код для работы шагового двигателя и Н моста через сдвиговый регистр Код (C++): [code] int incomingByte = 0; // ��� �������� ����������� ����� const byte shag[4] = { 0b10010000, 0b11000000, 0b01100000, 0b00110000 }; const byte hmost[5] = { 0b00001001, 0b00000110, 0b00001010, 0b00000101, 0b00000000 }; byte z = 0; int R = 4; int L = 0; byte x = 0; long vrema = 2000; // ����� const int data_pin = 2; const int sh_pin = 4; const int st_pin = 3; unsigned long senstime = 0; int b, e, k; int stepp = 0; void setup() { pinMode(data_pin, OUTPUT); pinMode(sh_pin, OUTPUT); pinMode(st_pin, OUTPUT); Serial.begin(9600); Serial.println("hel"); } void loop() { b = analogRead(A3); e = analogRead(A6); k = analogRead(A7); if (b > 700 ) { stepp = 50; } else if ( b < 400) { stepp = -50; } else { stepp = 0; } if (e > 700 ) { R = 0; } else if ( e < 400) { R = 1; } else if ( k > 700) { R = 2; } else if ( k < 400) { R = 3; } else { R = 4; } /*if (Serial.available() > 0) { //���� ���� ��������� ������ // ��������� ���� incomingByte = Serial.read(); // �������� ��, ��� �������� Serial.print("I received: "); Serial.println(incomingByte, BIN); }*/ //R = 2; // ��� ������� //stepp = -50; kompilate(stepp, R); } int kompilate(int i, int h) { senstime = micros(); if (i > 0) { while (i >= 0) { for (int y = 0; y < 4; y++) { // senstime = micros(); if (i = 0) { x = 0; } else { x = shag[y]; } z = hmost[h]; x = x | z; fire(x); // Serial.println(" "); // Serial.print(x, BIN); delayMicroseconds(vrema); // Serial.println(micros() - senstime); } i--; } } else if (i < 0) { i = abs(i); // Serial.print(" ads "); while (i >=0) { for (int y = 3; y >= 0; y--) { // senstime = micros(); if (i = 0) { x = 0; } else { x = shag[y]; } z = hmost[h]; x = x | z; fire(x); // Serial.print(z); // Serial.println(" "); // Serial.print(x, BIN); delayMicroseconds(vrema); // Serial.println(micros() - senstime); } i--; } } else if (i == 0) { z = hmost[h]; fire(z); } Serial.println(micros() - senstime); stepp = 0; } void fire(byte v) { for (int i = 0; i < 8; i++) { digitalWrite(sh_pin, LOW); digitalWrite(data_pin, v & (1 << i )); digitalWrite(sh_pin, HIGH); } digitalWrite(st_pin, HIGH); digitalWrite(st_pin, LOW); } [/code]