Skocz do zawartości

Funkcja czasowego wyłączania silnika


Gintek

Pomocna odpowiedź

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

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

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

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

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

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

(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 przez Gintek
Link do komentarza
Share on other sites

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...

  • Lubię! 1
Link do komentarza
Share on other sites

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

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

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.

  • Lubię! 1
Link do komentarza
Share on other sites

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

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

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ę »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.