24-06-2024, 20:12
Mój internetowy Przyjaciel stworzył mały programik pozwalający na uruchamianie silnika - pracującego na stałych obrotach -przyciskiem. Potem silnik wykonuje zadaną liczbę obrotów .....i to działa. Problem polega na tym silnik pracuje bardzo wolno i nie można przestawić jego szybkości bez względu na to jaką wartość wpiszemy w stepper.setSpeed (....). Co ciekawe, przy odznaczeniu wszstkiego w void loop() , z wyjątkiem stepper.runSpeed(); daje się łatwo zmieniać prędkość. Program wygląda na logiczny, jednak diabełek siedzi w sekcji void loop() Próbowaliśmy już różnych sposobów i nic ! Poratujcie !
#include <AccelStepper.h>
// Definicje pinów dla silnika i przycisku
#define X_STEP_PIN 3
#define X_DIR_PIN 6
#define BUTTON_PIN 13
AccelStepper stepper(AccelStepper:
RIVER, X_STEP_PIN, X_DIR_PIN);
int targetSteps = 2000; // Liczba kroków do wykonania (np. 10 obrotów przy 200 krokach na obrót)
int stepCount = 0;
bool running = false; // Flaga do kontroli stanu silnika
bool buttonStatePrevious = HIGH; // Poprzedni stan przycisku
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP); // Ustawienie pinu przycisku
stepper.setMaxSpeed(1000); // Ustaw maksymalną prędkość w krokach na sekundę
stepper.setSpeed(500); // Ustaw prędkość w krokach na sekundę
}
void loop() {
int buttonState = digitalRead(BUTTON_PIN);
delay(50);
// Sprawdź, czy przycisk został wciśnięty (zbocze narastające)
if (buttonState == LOW && buttonStatePrevious == HIGH) {
buttonStatePrevious = buttonState; // Aktualizacja poprzedniego stanu przycisku
running = !running; // Przełącz stan silnika (start/stop)
stepCount = 0; // Reset liczby kroków przy starcie
} else {
buttonStatePrevious = buttonState; // Aktualizacja poprzedniego stanu przycisku
}
// Uruchom lub zatrzymaj silnik w zależności od stanu
if (running) {
stepper.runSpeed(); // Utrzymywanie stałej prędkości
stepCount++;
if (stepCount >= targetSteps) {
running = false; // Zatrzymaj silnik po osiągnięciu liczby kroków
}
}
}
#include <AccelStepper.h>
// Definicje pinów dla silnika i przycisku
#define X_STEP_PIN 3
#define X_DIR_PIN 6
#define BUTTON_PIN 13
AccelStepper stepper(AccelStepper:
RIVER, X_STEP_PIN, X_DIR_PIN);int targetSteps = 2000; // Liczba kroków do wykonania (np. 10 obrotów przy 200 krokach na obrót)
int stepCount = 0;
bool running = false; // Flaga do kontroli stanu silnika
bool buttonStatePrevious = HIGH; // Poprzedni stan przycisku
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP); // Ustawienie pinu przycisku
stepper.setMaxSpeed(1000); // Ustaw maksymalną prędkość w krokach na sekundę
stepper.setSpeed(500); // Ustaw prędkość w krokach na sekundę
}
void loop() {
int buttonState = digitalRead(BUTTON_PIN);
delay(50);
// Sprawdź, czy przycisk został wciśnięty (zbocze narastające)
if (buttonState == LOW && buttonStatePrevious == HIGH) {
buttonStatePrevious = buttonState; // Aktualizacja poprzedniego stanu przycisku
running = !running; // Przełącz stan silnika (start/stop)
stepCount = 0; // Reset liczby kroków przy starcie
} else {
buttonStatePrevious = buttonState; // Aktualizacja poprzedniego stanu przycisku
}
// Uruchom lub zatrzymaj silnik w zależności od stanu
if (running) {
stepper.runSpeed(); // Utrzymywanie stałej prędkości
stepCount++;
if (stepCount >= targetSteps) {
running = false; // Zatrzymaj silnik po osiągnięciu liczby kroków
}
}
}

