05-10-2018, 16:32
(05-10-2018, 16:13)kaczakat napisał(a): OK, nie zauważyłem, że używasz sterownika a4988, do tego ta biblioteka nie jest potrzebna, bo już to samo robi ten driver. Nie mniej jednak zajrzyj do niej i zobacz w jaki sposób jest realizowane obsługa czasu. Ewentualnie w kursie na forbot poczytaj o millis, micros. Nie rób tego na delay. Docelowo to robi się w przerwaniu, tak by ruch był płynny i niezależny od tego w czym dłubie akurat pętla loop.
Ewentualnie do samego sterownika też są biblioteki, np. laurb9
https://github.com/laurb9/StepperDriver wszystko masz tu opisane ze schematami.
Nie wiem co tym chciałeś osiągnąć poza 0 i 1 - Serial.print(digitalRead(kroki));
Pewnie cały kurs by Ci nie zaszkodził.
Oki zajrzę, nie mniej jednak chciałem sobie rozłożyć to i docelowo chciałnbym sterowac joystickiem plynnie obrót silnika krokowego ale chciałbym mu zrobić tzw. blokade. Chciałem to wykonać w ten sposób, lecz cały czas x się zeruje i nie mam pojęcia jak zrobić tak aby po np. 200 krokow pomimo ze jostick jest w pozycji bocznej zatrzymało krokowca choćby nie wiem co.
Kod:
#define step_pin 3
#define dir_pin 4
#define X_pin A0
void setup() {
pinMode(dir_pin, OUTPUT);
pinMode(step_pin, OUTPUT);
Serial.begin(115200);
}
void loop() {
for(int x = 0 ; x < 200; x++) {
Serial.print("liczba kroków: ");
Serial.println(digitalRead(x));
int wartosc = analogRead(A0);
int predkosc = map(wartosc, 512, 1, 15, 1);
if (analogRead(X_pin) >= 0 && analogRead(X_pin) <= 500) {
digitalWrite(dir_pin, HIGH);
digitalWrite(step_pin, HIGH);
delay(predkosc);
digitalWrite(step_pin, LOW);
delay(predkosc);
}}}