Gintek Napisano Marzec 5, 2022 Udostępnij Napisano Marzec 5, 2022 Witam. Mam taki program który wykonuje proste funkcje warunkowe to znaczy jeśli warunek nie jest spełniony uruchamia się silniczek w jedna lub w drugą stronę aż do momentu w którym warunek zostanie spełniony i wtedy się wyłącza. Chciałbym dopisać dodatkową funkcję, jeśli warunek nie zostanie spełniony w określonym czasie wyłączy się silnik. Jeśli można to prosiłbym o gotowy przykład. Link do komentarza Share on other sites More sharing options...
pmochocki Marzec 5, 2022 Udostępnij Marzec 5, 2022 Poczytaj o millis: https://forbot.pl/blog/kurs-arduino-ii-wielozadaniowosc-opoznienia-z-millis-id18418 1 Link do komentarza Share on other sites More sharing options...
Gintek Marzec 5, 2022 Autor tematu Udostępnij Marzec 5, 2022 Czytałem to i wiele innych podobnych opisów i nadal nie wiem jak to zrobić. A żadnego przykładu nie znalazłem którym mógłbym się sugerować. Link do komentarza Share on other sites More sharing options...
pmochocki Marzec 5, 2022 Udostępnij Marzec 5, 2022 hmmm.... Taki szkic - specjalnie nie jest to umieszczone w klasach, aby osobie początkującej było łatwiej zrozumieć //Pomijam deklarację zmiennych i piszę na szybko na telefonie, bez sprawdzania... // warunek włączenia if (turn_on == true && motor_state == 0) { start_time = millis(); motor_state = 1; //coś co włącza silnik } //warunek wyłaczenia else if (turn_off == true && motor_state == 1) { motor_state = 0; //coś co wyłącza silnik } // jeśli silnik włączony sprawczamy czy nie minął czasem czas else if (motor_state == 1) { now = millis(); if (now - start_time >= 1000UL) { // tu na sztywno sekunda, ale powinien być to define lub const lub zmienna motor_state = 0; //coś co wyłącza silnik } } Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
slon Marzec 5, 2022 Udostępnij Marzec 5, 2022 @Gintek a kurs arduino sprawdziłeś? sterowanie silnikami DC Link do komentarza Share on other sites More sharing options...
Gintek Marzec 5, 2022 Autor tematu Udostępnij Marzec 5, 2022 Cały kurs czytałem kilkukrotnie i coś tam zaczyna świtać ale nie na tyle żebym mógł coś samodzielnie zrobić. Tego programu który chcę zmodyfikować ja sam nie robiłem ale sam chcę go zmodyfikować żeby w końcu nauczyć się samemu programować. Działa to w ten sposób że dwoma potencjometrami ustala się chcianą pozycję a silnik z wbudowanym potencjometrem ustawia się do tej pozycji. Chodzi o to że chcę rozdzielić silnik od potencjometru i jak potencjometr nie zajmie ustalonej pozycji to żeby silnik wyłączył się po określonym czasie. Link do komentarza Share on other sites More sharing options...
farmaceuta Marzec 5, 2022 Udostępnij Marzec 5, 2022 To nie tak hop siup, bo musisz wiedziec ile czasu masz czekac, a on bedzie sie zmienial w zaleznosci na jaka pozycje ma sie ustawic potencjometr silnika...no chyba ze wystarczy jeden staly czas czekania, to wtedy wystarczy przyklad kolegi @pmochocki ...wrzuc swoj kod Link do komentarza Share on other sites More sharing options...
Gintek Marzec 5, 2022 Autor tematu Udostępnij Marzec 5, 2022 (edytowany) if((Auto==HIGH)&&(stateautoup==LOW)){ work=HIGH; HomeUp=HIGH; HomeDown=LOW;} if((Auto==HIGH)&&(stateautodown==LOW)){ work=LOW; HomeDown=HIGH; HomeUp=LOW; } // if(Auto==HIGH){ if(HomeUp){ if(pozycjaup-hiz>pozycja){ JOGup=HIGH;} else{ JOGup=LOW;} if(pozycjaup+hiz<pozycja){ JOGdown=HIGH;} else{ JOGdown=LOW;} } if(HomeDown){ if(pozycjadown+hiz<pozycja){ JOGdown=HIGH;} else{JOGdown=LOW;} if(pozycjadown-hiz>pozycja){ JOGup=HIGH;} else{JOGup=LOW;} } To jest fragment kodu który odpowiada za to co opisywałem powyżej. Czas musi być na sztywno ustawiony. Całego kodu nie chcę wstawiać żeby ktoś po prostu tego nie skopiował. Edytowano Marzec 5, 2022 przez Gintek Link do komentarza Share on other sites More sharing options...
farmaceuta Marzec 5, 2022 Udostępnij Marzec 5, 2022 13 minut temu, Gintek napisał: if((Auto==HIGH)&&(stateautoup==LOW)){ work=HIGH; HomeUp=HIGH; HomeDown=LOW;} if((Auto==HIGH)&&(stateautodown==LOW)){ work=LOW; HomeDown=HIGH; HomeUp=LOW; } // if(Auto==HIGH){ if(HomeUp){ if(pozycjaup-hiz>pozycja){ JOGup=HIGH;} else{ JOGup=LOW;} if(pozycjaup+hiz<pozycja){ JOGdown=HIGH;} else{ JOGdown=LOW;} } if(HomeDown){ if(pozycjadown+hiz<pozycja){ JOGdown=HIGH;} else{JOGdown=LOW;} if(pozycjadown-hiz>pozycja){ JOGup=HIGH;} else{JOGup=LOW;} } Całego kodu nie chcę wstawiać żeby ktoś po prostu tego nie skopiował. Ze tak sie wyraze brzydko...hehe😉 Wiekszosc z tych ktorzy by Ci tu pomogli napisali by sobie swoj kod w pol godziny😜 Nie wiele z tego kodu rozumiem bez reszty... 1 Link do komentarza Share on other sites More sharing options...
Gintek Marzec 5, 2022 Autor tematu Udostępnij Marzec 5, 2022 Broń boże nie chodzi mi o was którzy umiecie programować bo to napewno nie problem dla was. Mi chodziło o takich jak ja którzy szukają gotowców. Bo mnie ten program trochę kosztował i nie chciałby żeby ktoś bez żadnego wysiłku to sobie skopiował i zrobił takie urządzenie bo jest ono dość chodliwe i drogie. Link do komentarza Share on other sites More sharing options...
farmaceuta Marzec 5, 2022 Udostępnij Marzec 5, 2022 Nie no jasne😉 ale tez ciezko cos konkretnego doradzic nie znajac calosci, ale jak juz bylo powiedziane wczesniej musisz uzyc millis()...cos w rodzaju, jezeli zaczynam wykonywac ruch to zapisuje aktualny czas do starego i czekam na ustalenie pozycji, jesli sie nie uda to wylaczam silnik... if (silnik start) { last = millis(); stan = 1; } if (silnik dotarl na pozycje) { // cos tam rob stan = 0; } if (millis() - last > 1000UL && stan) { // zatrzymaj silnik stan = 0; } No nic innego Ci nie doradze... Link do komentarza Share on other sites More sharing options...
ethanak Marzec 5, 2022 Udostępnij Marzec 5, 2022 Nie wiem ile kosztował, ale jeśli więcej niż piwo to zostałeś oszukany. Pisałem ostatnio program do maszynki do fajek (profesjonalna, walnięta płytka z prockiem, przeróbka na Pro Mini), urządzenie dość drogie i chodliwe, i co z tego że gość będzie miał program, jak reszty maszyny raczej domowym sumptem tanio nie zrobi? Nawet nie wziąłem kasy bo na jedno piwo mnie jeszcze stać, a program na tyle prosty, że 80% kończących kurs arduino napisałoby go w jeden wieczór. 1 Link do komentarza Share on other sites More sharing options...
farmaceuta Marzec 5, 2022 Udostępnij Marzec 5, 2022 3 minuty temu, ethanak napisał: Nie wiem ile kosztował, ale jeśli więcej niż piwo to zostałeś oszukany. Nie badz okrutny😁 ale fakt taki...najpierw czlowiek ma myslec miesiac i dopiero wtedy pisac kod...a czesto malutka przerobka w dzialaniu maszyny tak komplikuje i utrudnia kod, ze lepiej pisac od nowa... Link do komentarza Share on other sites More sharing options...
Gintek Marzec 5, 2022 Autor tematu Udostępnij Marzec 5, 2022 Nie czuje się w ogóle oszukany bo nikt nie chciał mi zrobić tego programu a pisałem i prosiłem na różnych forach. Link do komentarza Share on other sites More sharing options...
ethanak Marzec 5, 2022 Udostępnij Marzec 5, 2022 Pewnie źle sformułowałeś pytanie - co zresztą widać po pierwszym poście w tym wątku. Ja miałem schemat maszyny, mogłem ją sobie obejrzeć, zobaczyć jak powinna działać i wtedy napisanie programu było proste. Bez tego to bym raczej wysłał gościa na drzewo. Niestety - aby napisać program trzeba wiedzieć co on ma robić. Informacja że "wyłączyć silnik" to trochę za mało. Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »