Díky za program, trochu jsem v tom plaval než mi to začlo fungovat, ale už to funguje
Ještě je trochu malý problém, že hned při přivedení napájení do Arduina se spustí 1x program a pak zastaví.
Tady je aktuální program:
#include <SoftwareSerial.h>
#define DIR_PIN 2
#define STEP_PIN 3
int keyStart = A0; // to je PIN pro připojení tlačítka
void setup() {
pinMode(DIR_PIN, OUTPUT);
pinMode(STEP_PIN, OUTPUT);
pinMode(keyStart, INPUT_PULLUP); // tady připojuješ tlačítko na pullup, takže stačí zapojit jako normální vypínač (ne přes rezistor na GND)
}
void loop() {
//rotate a specific number of microsteps (8 microsteps per step)
//a 200 step stepper would take 1600 micro steps for one full revolution
rotate(5000, 1.00); //Rychloposuv + 5000 kroků
delay(100);
rotate(6000, 0.5); //posuv + 6000 kroků
delay(100);
rotate(-6000, 1); //rychloposuv - 6000 kroků
delay(100);
rotate(5500, 1); //rychloposuv + 5500 kroků
delay(100);
rotate(4500, 0.5); //posuv + 4500 kroků
delay(100);
rotate(-10000, 1); //rychloposuv - 10000 kroků
delay(3000);
STOPKA:
if (digitalRead(keyStart) == HIGH) goto STOPKA; // dokud neni stisknuto tlačítko program se neopakuje - projede jednou a dost
}
void rotate(int steps, float speed) {
//rotate a specific number of microsteps (8 microsteps per step) - (negitive for reverse movement)
//speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
int dir = (steps > 0) ? HIGH : LOW;
steps = abs(steps);
digitalWrite(DIR_PIN, dir);
float usDelay = (1 / speed) * 70;
for (int i = 0; i < steps; i++) {
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(usDelay);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(usDelay);
}
}
void rotateDeg(float deg, float speed) {
//rotate a specific number of degrees (negitive for reverse movement)
//speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
int dir = (deg > 0) ? HIGH : LOW;
digitalWrite(DIR_PIN, dir);
int steps = abs(deg) * (1 / 0.225);
float usDelay = (1 / speed) * 70;
for (int i = 0; i < steps; i++) {
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(usDelay);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(usDelay);
}
}