Silnik Krokowy NEMA 17 i sterownik A4988

0

Witam jestem początkującym i potrzebuję kodu który opiera się na sterowaniu silnikiem krokowym NEMA 17 z sterownikiem A4988.
Program ma polegać na tym iż od samego startu programu silnik ma poruszać się w jedną stronę aż do momentu kiedy trafi na ogranicznik czyli w moim przypadku przycisk. gdy ten przycisk zostanie kliknięty motor ma przesunąć się powiedzmy o 2000 kroków w drugą stronę i się zatrzymać. Kod ma sie wykonać tylko raz na samym początku a nie zapetlać. Jeśli toś jest w stanie napisać dla mnie ten kod, lub po prostu cos pomoc byłbym bardzo wdzięczny. Wydaje mi się że nie jest on jakoś bardzo skomplikowany jednakże nie potrafię sobie z nim poradzić. Dodam ze ruszalem juz silnikiem jednakze nie potrafie napisac tego wlasnie kodu.

0

Przykłady kodu do poczytania:
https://howtomechatronics.com/tutorials/arduino/how-to-control-stepper-motor-with-a4988-driver-and-arduino/
To tylko jako pomoc dla kogoś kto ma na to czas.

0
ccwrc napisał(a):

Przykłady kodu do poczytania:
https://howtomechatronics.com/tutorials/arduino/how-to-control-stepper-motor-with-a4988-driver-and-arduino/

zaznajomilem sie z tym kiedyś jednakze nie pomoglo mi w dojsciu do tego jak zrobic by polecenie wykonalo sie tylko raz

0
S4t napisał(a):

Czyli szukasz gotowca. To przeżuć w ogłoszenia drobne ale nie sądzę żeby ktoś się pochylił nad takim niszowym problemem.

Nawet nie tyle gotwca co pomocy. Gdy w void loop napisze polecenie
DigitalRead(dir,HIGH)
FOR(X = 0; x<200: x++)
{
DigitalRead(Step,High)
DelayMicrosecond(200)
DigitalRead(Step,LOW)
DelayMicrosecond(200)
}

To sie to zapetla i nie wiem jak zrobic by po tych 200 krokach sie zatrzymał i koniec

1
Ignacy Grabowski napisał(a):

To sie to zapetla i nie wiem jak zrobic by po tych 200 krokach sie zatrzymał i koniec

To przerwij pętlę. To się robi za pomocą takich słów jak break; exit(0); lub coś innego w tym języku.

Warunek przerwania pętli przypuszczalnie możesz umieścić w zwykłym if typu if(warunek) {tu zrób coś lub przerwij}

0
Ignacy Grabowski napisał(a):
S4t napisał(a):

Czyli szukasz gotowca. To przeżuć w ogłoszenia drobne ale nie sądzę żeby ktoś się pochylił nad takim niszowym problemem.

Nawet nie tyle gotwca co pomocy. Gdy w void loop napisze polecenie
DigitalRead(dir,HIGH)
FOR(X = 0; x<200: x++)
{
DigitalRead(Step,High)
DelayMicrosecond(200)
DigitalRead(Step,LOW)
DelayMicrosecond(200)
}

To sie to zapetla i nie wiem jak zrobic by po tych 200 krokach sie zatrzymał i koniec

a próbowałeś coś takiego:

bool run = true; // jakaś zmienna globalna, statyczna czy jaki tam język jest

// zakładam że loop działa jak main loop w grach i jest wywoływany w każdym cyklu procesora
// więc aby go "przerwać" niech metoda loop nic nie robi.
void loop() {
    if(run){
        DigitalRead(dir,HIGH)
        FOR(X = 0; x<200: x++)
        {
            DigitalRead(Step,High)
            DelayMicrosecond(200)
            DigitalRead(Step,LOW)
            DelayMicrosecond(200)
        }
        run = false;
    }
}
``
3

Jak to ma się raz wykonać to możesz to po prostu wrzucić do setup, a nie do loop

3
Ignacy Grabowski napisał(a):

Nawet nie tyle gotwca co pomocy. Gdy w void loop napisze polecenie
DigitalRead(dir,HIGH)
FOR(X = 0; x<200: x++)
{
DigitalRead(Step,High)
DelayMicrosecond(200)
DigitalRead(Step,LOW)
DelayMicrosecond(200)
}

To sie to zapetla i nie wiem jak zrobic by po tych 200 krokach sie zatrzymał i koniec

Nawet nie wiem jakim cudem do się odpala, ale w for masz duże X do którego przypisujesz zero oraz małe x do którego porównujesz, dodatkowo zamiast średnika ; masz dwukropek :

Polecam najpierw pozwać podstawy języka, później zobaczyć jak działają pojedyncze komendy do sterowania i jakie one skutek wywołują powodują, a na końcu pisać co masz napisć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1