To teraz czekamy na filmy z działania

Wróć do „Maszyna do punktowania rur”
Dokładnie - bez opóźnienia pętla wykonuje się bardzo szybko i silnik nie miał szans nadążyć. Próbowałeś go zmusić do okolic 30 000 rpmmat008 pisze: ↑22 sie 2018, 12:10Witam ponownie. No i Pierwsze obroty silnika sąi nawet nic nie dymi
póki co zrezygnowałem jednak z używania bibliotek bo chodź pisze tam że korzystają np. Z pinów od 8 do 11 to nie widzę już jak to dokładnie podłączyć. Dlatego wykorzystałem kod kolegi Avalyah. Musiałem jednak dodać delay bo bez tego silnik tylko piszaczał, może dla sterownika silnika za szybko wszystko się działo?
Powinien się obracać z grubsza 5 razy na sekundę dla delay o wartości 1ms. Już danie mu 2ms sprawi, że będzie robił 2,5 obrotu na sekundę, także wszystko działa jak należy - im większy delay, tym rzadziej wykonywane są kroki - bo nasz program dłużej czeka przed wykonaniem następnego.
Kod jest ogólnie dobry, nie ma nic złego w robieniu dwóch pętli pod sobą, ale masz literówkę - w drugiej pętli jako zmienną do iteracji zadeklarowałeś a, podałeś warunek, że a musi być mniejsze niż 600, a potem chcesz inkrementować zmienną i, która nie istnieje. Ogólnie jeżeli deklarujesz zmienną w pętli to ona istnieje tylko do końca pętli, więc możesz używać tej samej nazwy zmiennej.mat008 pisze: ↑22 sie 2018, 12:10Teraz próbuje zrobić parę obrotów w jedną i parę w drugą stronę ale coś mi nie idzie. Pewnie nie jest dobrym pomysłem dawać po sobie dwie pętle for?
Kod: Zaznacz cały
void setup() { pinMode(8, OUTPUT); pinMode(9, OUTPUT); } // the loop function runs over and over again forever void loop() { for (int i = 0; i < 400; i++) { //Wykonaj 2 obroty digitalWrite(9, LOW); // Ustaw pin Pul na 0V. digitalWrite(8, HIGH); // Ustaw pin Dir zgodnie z wybranym kierunkiem - 0 albo 1 digitalWrite(9, HIGH); // Ustaw pin Pul na 5V. delay(1); } for (int a = 0; a < 600; i++) { //Wykonaj 3 obroty digitalWrite(9, LOW); // Ustaw pin Pul na 0V. digitalWrite(8, LOW); // Ustaw pin Dir zgodnie z wybranym kierunkiem - 0 albo 1 digitalWrite(9, HIGH); // Ustaw pin Pul na 5V. delay(1); } }
Kod: Zaznacz cały
void setup() {
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
for (int i = 0; i < 400; i++) { //Wykonaj 2 obroty
digitalWrite(9, LOW); // Ustaw pin Pul na 0V.
digitalWrite(8, HIGH); // Ustaw pin Dir zgodnie z wybranym kierunkiem - 0 albo 1
digitalWrite(9, HIGH); // Ustaw pin Pul na 5V.
delay(1);
}
for (int i = 0; i < 600; i++) { //Wykonaj 3 obroty
digitalWrite(9, LOW); // Ustaw pin Pul na 0V.
digitalWrite(8, LOW); // Ustaw pin Dir zgodnie z wybranym kierunkiem - 0 albo 1
digitalWrite(9, HIGH); // Ustaw pin Pul na 5V.
delay(1);
}
}
'i' was not declared in this scope
Ojojoj, tutaj nie wyszło i to mocnomat008 pisze: ↑22 sie 2018, 22:30Dopiero po parokrotnym przeczytaniu kodu od kolegi Avalyah widzę że próbował mi dać podpowiedź o użyciu funkcji, tylko że nie za bardzo rozumiem ten kod, głównie użytych parametrów jakie mogą mieć. Próbuje coś z tym zdziałać ale słabo idzie i już sam gubię się w tym krótkim kodzie...Kod: Zaznacz cały
void setup() { pinMode(8, OUTPUT); pinMode(9, OUTPUT); void doStepPrawo() { digitalWrite(9, LOW); // Ustaw pin Pul na 0V. digitalWrite(8, HIGH); // Ustaw pin Dir zgodnie z wybranym kierunkiem - 0 albo 1 digitalWrite(9, HIGH); // Ustaw pin Pul na 5V. delay(1); } void loop() { doStepsPrawo(1000,5,1) { for (i = 0; i < 1000; i++) { doStep(direction); delay(msBetweenSteps); } } }
Kod: Zaznacz cały
void doStep(uint8_t dir);
void doSteps(uint32_t numberOfSteps, uint8_t msBetweenSteps,uint8_t dir);
void setup()
{
pinMode(8, OUTPUT); // Pin dir jako wyjście
pinMode(9, OUTPUT); // Pin step jako wyjście
}
void loop()
{
doSteps(1000,5,1); // Wykonaj 1000 kroków, krok co 5ms w kierunku 1 (albo HIGH, w tym wypadku to to samo)
delay(1000); // Odczekaj sekundę
}
// Funkcja pomocnicza, wykonująca jeden krok w danym kierunku
void doStep(uint8_t dir)
{
digitalWrite(9, LOW); // Ustaw pin Pul na 0V.
digitalWrite(8, dir); // Ustaw pin Dir zgodnie z wybranym kierunkiem - 0 albo 1 (czyli LOW lub HIGH)
digitalWrite(9, HIGH); // Ustaw pin Pul na 5V.
}
void doSteps(uint32_t numberOfSteps, uint8_t msBetweenSteps,uint8_t dir)
{
for (uint32_t i = 0; i < numberOfSteps; i++)
{
doStep(dir); // Wykonaj krok w zadanym kierunku
delay(msBetweenSteps); // Odczekaj podaną ilość milisekund
}
}
Kod: Zaznacz cały
void doSteps(uint32_t numberOfSteps, uint8_t msBetweenSteps,uint8_t dir)
{
for (uint32_t i = 0; i < numberOfSteps; i++)
{
digitalWrite(9, LOW); // Ustaw pin Pul na 0V.
digitalWrite(8, dir); // Ustaw pin Dir zgodnie z wybranym kierunkiem - 0 albo 1
digitalWrite(9, HIGH); // Ustaw pin Pul na 5V.
delay(msBetweenSteps); // Odczekaj podaną ilość milisekund
}
}
Bez rampy też będą dobrze startować, chyba, że pod skrajnym obciążeniem.
Kod: Zaznacz cały
static inline void doStep(uint8_t direction)
{
digitalWrite(pinPul, LOW); // Ustaw pin Pul na 0V.
digitalWrite(pinDir, direction); // Ustaw pin Dir zgodnie z wybranym kierunkiem - 0 albo 1
digitalWrite(pinPul, HIGH); // Ustaw pin Pul na 5V.
}
Kod: Zaznacz cały
void doSteps(uint32_t numberOfSteps, uint8_t msBetweenSteps,uint8_t direction)
{
for (uint32_t i = 0; i < numberOfSteps; i++)
{
doStep(direction);
delay(msBetweenSteps);
}
}
Kod: Zaznacz cały
doSteps(1000,5,1);