#define dataPin 2 //ds na PB0
#define clockPin 4 // shcp na PB1
#define latchPin 3 //stcp na PB2
//SoftwareSerial BTSerial(5, 6); // RX (2) | TX (3) pro HC-05
char command[16]; // Buffr pro příjem příkazu (zkráceno)
int motPoz;
void updateShiftRegister()
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, motPoz);
digitalWrite(latchPin, HIGH);
delay(100); //if required
}
void stepMotor() {
static int motSeq = 0; // Uchovává aktuální sekvenci motoru
//motSeq++;
if (motSeq > 7) { // Zajistíme, že motSeq bude mezi 0 a 7
motSeq = 0;
}
// Vytvoříme sekvenci podle motSeq
switch (motSeq) {
case 0:
motPoz = 2; // 0001
break;
case 1:
motPoz = 6; // 0011
break;
case 2:
motPoz = 4; // 0010
break;
case 3:
motPoz = 12; // 0110
break;
case 4:
motPoz = 8; // 0100
break;
case 5:
motPoz = 24; // 1100
break;
case 6:
motPoz = 16; // 1000
break;
case 7:
motPoz = 18; // 1001
break;
default:
motPoz = 0;
break;
}
Serial.print(motPoz);
Serial.print(" = ");
for (int8_t bit = 4; bit > 0; bit--) {
Serial.print(bitRead(motPoz, bit));
}
Serial.print("*");
Serial.println();
updateShiftRegister();
motSeq++;
}
void fullRotation() {
const int steps_per_rev = 40; // Počet kroků pro úplnou rotaci
for (int i = 0; i < steps_per_rev; i++) {
stepMotor(); // Voláme funkci pro posun motoru o krok
delayMicroseconds(1500); // Zpoždění pro kontrolu rychlosti otáčení
}
}
void halfRotation() {
const int steps_per_half = 20; // Počet kroků pro půl rotace
for (int i = 0; i < steps_per_half; i++) {
stepMotor(); // Voláme funkci pro posun motoru o krok
delayMicroseconds(1500); // Zpoždění pro kontrolu rychlosti otáčení
}
}
void setup() {
//BTSerial.begin(9600);
Serial.begin(9600);
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
updateShiftRegister();
}
void loop() {
fullRotation();
halfRotation();
delay(1000);
}