Skocz do zawartości

Prosty "komputer" do ciągnika lub kombajnu --Boardinformator.


Pomocna odpowiedź

1 godzinę temu, Adonaktiv napisał:

a na końcu funkcji 

return rpm;

Jakoś się tego nie mogę dopatrzyć (we wpisie kolegi @etet100).

Trzeba się zdecydować:

  • Jeśli wynik działania funkcji przekazujemy przez zmienną globalną - w tym wypadku rmp, zadeklarowaną przed setup() - to funkcja powinna być typu void .
  • Jeśli zaś już zadeklarowaliśmy funkcję typu int, to wynik przekazujemy przez return wynik;  gdzie wynik jest zmienną lokalną typu int tej funkcji.

Inaczej się robi bałagan.

Edytowano przez jand
Link do komentarza
Share on other sites

Rozkminiłem, a przynajmniej zrobiłem tak że to funkcjonuje poprawnie. Miałem w złym miejscu zmienne odpowiedzialne za naliczanie impulsów,

int obrot;
unsigned long startTime1;
boolean wom = LOW;

I sprawdziłem to co napisałeś wyżej,

void getWOM()
int getWOM()

Działa i tak i tak. 

Link do komentarza
Share on other sites

10 minut temu, Adonaktiv napisał:

Działa i tak i tak. 

Działa, ale jest niezgodne z logiką i mylące.

Ktoś obcy, widząc funkcję typu int będzie się spodziewał, że po to zostało ona wprowadzona, by wartość tej funkcji gdzieś w programie wykorzystać. A tu szacher-macher i wartość funkcji jest przekazywana przez zmienną globalną.

Poczytaj, proszę, trochę o funkcjach.

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

1 godzinę temu, Adonaktiv napisał:

Rozkminiłem, a przynajmniej zrobiłem tak że to funkcjonuje poprawnie. Miałem w złym miejscu zmienne odpowiedzialne za naliczanie impulsów,

int obrot;
unsigned long startTime1;
boolean wom = LOW;

 

void getWOM()
int getWOM()

 

Bo miałeś te zmienne jako lokalne i przy każdym wejściu do funkcji tworzywa je od nowa więc to działać raczej nie mialo szans...poczytaj o zmiennych globalnych i lokalnych...

Link do komentarza
Share on other sites

 Wiem, że jeszcze się w tym gubię ale z waszą pomocą dużo zostało ogarnięte. Odczyty już nie blokują działania menu, ekran się odświeża. Dodałem jeszcze 2 ify i teraz informacja o ścieżkach i naliczanie przejazdów działa tylko gdy aktywujemy tą funkcję w Menu_3. Cele z pierwotnych założeń projektu zostały osiągnięte. Choć teraz przychodzą pomysły na kolacje funkcje.

Link do komentarza
Share on other sites

Jak już nie będę mógł sam ogarnąć to będę pytał. A jeśli chodzi o to co jeszcze wymyśliłem. 

1. Buzzer (krótkie pikniecie) informujący że został dodany przejazd w funkcji Aktualny przejazd. I długie puknięcie jeśli zostanie wysunięty siłownik od ścieżek.

2. Jeszcze jeden siłownik elektryczny. Tylko ten musiałby być z enkoderem. Sterowany potencjometrem + dwie zapisane pozycje siłownika. Siłownik miałby sterować gazem ręcznym. Tutaj najpierw trzeba to rozkminić od strony montażu aby nie blokowało z gazem nożnym.

Także teraz będę robił do tego co mam docelową obudowę no i montaż. 

PS. W Takiej płytce poszczególne pola są od siebie odizolowane czy tak jak w Tej połączone.

Link do komentarza
Share on other sites

Mała aktualizacja. Tak jak wspominałem wcześniej zrobię wyświetlacz oddzielnie a arduino z przetwornicami i przekaźnikami oddzielnie. Jako przewody sygnałowe wykorzystam skrętkę a 5v i gnd  dla modułu i2c wezmę z przetwornicy żeby nie obciążać Arduino. 

17053447140137876566999929276631.thumb.jpg.0aebb4406a017068fddb2797fb38267e.jpg

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

Trochę dzisiaj pomodziłem przy projekcie. Złożyłem całość tak jak docelowo ma być w ciągniku. Co prawda na mieszkaniu nie mam źródła prądu które może zasymulować ~14.5v instalacji ciągnika więc wykorzystałem mały akumulator ładowany przez zasilacz 230/12v także w czasie testu było około 13.5v

Czyli:

1. czujniki indukcyjne, xl4015 (~8,05v) i lm2596 (5,01v) zasilane z akumulatora,

2.arduino zasilane z xl4015,

3.logika przekaźników i wyświetlacz zasilany z lm2596.

I kolejny film

Link do komentarza
Share on other sites

Hejo,

Dopisałem dzisiaj kilka linijek kodu odpowiedzialnego za buzzer. Sygnalizuje naliczanie przejazdu krótkim piknięciem a gdy AktPrz==SzSc następuje długie piknięcie sygnalizujące załączenie siłownika.

void sygnalizacja(){
  if(sygnalizator == HIGH){
  digitalWrite(Buzzer, HIGH);
  if(millis() - sygnal >= 250 && AktPrz != SzSc) {
  digitalWrite(Buzzer, LOW);
  sygnalizator = LOW;
  }
  if(millis() - sygnal >= 700 && AktPrz == SzSc){
  digitalWrite(Buzzer, LOW);
  sygnalizator = LOW;
  }
  }
}

 

Link do komentarza
Share on other sites

(edytowany)

Cześć,

Jakiś czas temu wpadłem na pomysł aby do projektu dodać moduł RTC - DS1307, miałby on służyć jako pamięć dla przebiegu przy utracie zasilania - z wykorzystaniem NVRAM. Narazie nie mogę tego uruchomić ale jeszcze trochę powalczę sam.

Udało mi się całość trochę zminimalizować, z wykorzystaniem klona Arduino Nano. 

IMG_20240205_203707_240_LL.thumb.jpg.ec495ecd767368628c9b45543be5c0bf.jpgIMG_20240205_203718_722_LL.thumb.jpg.c8a3454745381f1276176ec9077ae4af.jpg

Edytowano przez Adonaktiv
Zdjęcia
Link do komentarza
Share on other sites

Nie ma tego dużo. 2x unsigned long ale było by to trzeba ciągle nadpisywać tak jak przebieg w samochodzie więc chyba eeprom się nie nada. Przy tych moich czujnikami magnetycznych 1 impuls == 0.66m, 1 obrót koła == 5.28m. Czyli po przejechaniu 100km mamy około 151515 impulsów.

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.