Skocz do zawartości

Nietypowe deklaracje zmiennych


Gość

Pomocna odpowiedź

Witam wszystkich;

Na dniach postanowiłem przygotować pakiet algorytmów które umożliwią mi łatwiejsze poruszanie się pomiędzy pętlami w programie. 

Dla przykładu jako pierwszy z nich przygotowałem sobie "one shota" typu HiB (high bit). Algorytm generuje jednorazowe przejście wartości binarnej 010 po pojawieniu się na wejściu cl_hib wartości 1. algorytm nie reaguje na wartość 0. 

W czym rzecz? Otóż algorytm działa prawidłowo, ale nie wiem jak zamknąć w tej samej linijce jego składni tych samych nazw powtarzających się zmiennych, tak aby kiedy się powtórzą w kolejnych HiB nie wpływały na siebie.

bool d1 = 1;
bool d2 = 0;
bool cl_hib_1 = 0; // HighBit wejście clok one shot
bool hib_1 = 0; //HighBit wyjście one shot

void setup() {}

void loop() {

if(cl_hib_1 & d2){hib_1=0; d1=0;} else{d1=1; d2=0;} if(cl_hib_1 & d1){hib_1=1; d2=1;}

}

Czyli jak zrobić, aby wywalić d1 i d2 z samej góry, oraz zadeklarować jedynie w samej linijce algorytmu HiB? Rozchodzi się o to, aby w przypadku ponownego wklejenia linijki nie wprowadzać do układu kolejnych wartości zmiennych np. d3 i d4, tylko dalej to samo d1 i d2. Chcę zmieniać jedynie nazwy zmiennej wejściowej cl_hib, oraz wyjściowej hib zadeklarowanych w ustawieniach. Da się to jakoś w prosty sposób zrobić? Bo w PLC jest o tyle prościej, że dla zmiennych które się powtarzają w algorytmach, po prostu nie deklarujesz nazw i tyle. 

Link do komentarza
Share on other sites

Kurs Arduino. Koniec. To nie jest PLC. Nie rozumiesz w ogóle tego co robisz. Nie wiesz co to jest zmienna.  Jeszcze raz. To nie jest PLC. Wszystko jest w kursie. Koniec.

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

Gość

Dla przykładu w pętli for można deklarować nowe zmienne które działają tylko w tej pętli, ale w tym przypadku widzę, że jeżeli tego będzie więcej, to kila stron kodu, to będzie zajmowała deklaracja samych zmiennych które się powtarzają do tego samego. No nic dzisiaj znajdę trochę czasu to przygotuję resztę niezbędnych algorytmów. Trzeba tylko pamiętać aby w miejsce zmiennych d wstawiać rosnące liczby tak aby te zmienne się nie powtarzały. (żeby kompilator nie sypał błędów)

6 godzin temu, ethanak napisał:

To nie jest PLC.

Wiem o tym, ale tak właśnie było w pierwszych PLC. Masakra. Co funkcja, to nowe numery, albo całe nazwy powtarzających się zmiennych. Później to uprościli. 

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

Gość
3 godziny temu, ethanak napisał:

ja mam za słaby wzrok żeby Twoje jednolinijkowce analizować

To już sam nie wiem jak to powinno wyglądać. Mam wpychać w linijce ile się da pętli i działań, czy pisać jedno pod drugim?

3 godziny temu, ethanak napisał:

A niby dlaczego? Podaj przykład

Podam jak już zrobię jakiś dłuższy program, tylko żeby później nie okazało się, że jest to mało czytelne i do przepisania. Bo wymyślanie egzotycznej nazwy dla każdej jednej zmiennej trochę mnie przerasta. Jeżeli już, to nazwy dla zmiennych wejściowych i wyjściowych w danym algorytmie. Resztę nazw zmiennych w warunkach i do obliczeń będę stosował tj. do tej pory.

Link do komentarza
Share on other sites

17 minut temu, rafal220 napisał:

To już sam nie wiem jak to powinno wyglądać.

Schludnie i czytelnie. Używasz Arduino IDE? To wciśnij Ctrl-T

 

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

Gość
36 minut temu, ethanak napisał:

Używasz Arduino IDE? To wciśnij Ctrl-T

czyli z 2 linijek;

if (sw1 & 0) {d1=1;} else if (sw1 & 0) {d1=0;}

if(cl_hib_1 & d2){hib_1=0; d1=0;} else{d1=1; d2=0;} if(cl_hib_1 & d1){hib_1=1; d2=1;}

robi się;

if (sw1 & 0) {
    d1 = 1;
  } else if (sw1 & 0) {
    d1 = 0;
  }

  if (cl_hib_1 & d2) {
    hib_1 = 0;
    d1 = 0;
  } else {
    d1 = 1;
    d2 = 0;
  } if (cl_hib_1 & d1) {
    hib_1 = 1;
    d2 = 1;
  }

15 linijek kodu.

Właśnie w taki sposób napisałem pierwszy program po pierwszych kursach Arduino. Ale z czasem kiedy analizowałem programy innych użytkowników na YT, zacząłem pisać to ściślej. Nie no rozumiem, że można enter dawać po funkcji, ale po każdym działaniu? Toć to tasiemiec wychodzi. Z 1000 linijek kodu zrobi Ci się paręnaście tysięcy. Docelowy kod można tak pisać, ale nie wiem czy jest sens tak rozpisywać funkcje typu hib, lob, lhb itp. W PLC mam to w jednym maleńkim bloczku, a tutaj chciałbym mieć to w jednej linijce. To tak jakbyś w kodzie rozpakował bibliotekę. No szkoda że tu w Arduino nie ma możliwości zawijania tekstu do mini funkcji. Takich maleńkich bibliotek w które później nie wnikasz jak działają, tylko pamiętasz to co one robią. To tak jak funkcja map(). Też nie wnikasz jakie wykonuje w środku działania, tylko wiesz jak działa, oraz gdzie podstawić zmienne. W PLC też miałem spakowane funkcje map() grad (gradient wartości) i nie tylko. Po co rozmyślać nad działaniem kodu z którego tak naprawdę interesuje Ciebie to co  on realizuje, a nie to co dokładnie w środku liczy? 

Link do komentarza
Share on other sites

Poza tym istnieją pewne normy formatowania kodu C/C++i przynajmmniej jednej z nich warto się trzymać. Co ciekawsze - żadna nie przewiduje więcej niż jednej instrukcji w wierszu.

A poza tym ciesz się że w Pythonie nie piszesz, bo tam formatowanie jest częścią języka.

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

Gość
13 minut temu, ethanak napisał:

żadna nie przewiduje więcej niż jednej instrukcji w wierszu.

I wszystko byłoby dużo proste, gdyby kod można skrótem klawiszowym zwijać do funkcji. Cos na styl prostych funkcji typu map() 

Link do komentarza
Share on other sites

Weź jakiś porządny edytor (ostatnio się tu pisało o Geany). Poza tym po kiego grzyba trzymać takie funkcje w tym samym pliku co główny kod? Chyba tylko po to żeby zobaczyc co robi funkcja IW_pzd...

Link do komentarza
Share on other sites

Gość
1 godzinę temu, ethanak napisał:

Poza tym po kiego grzyba trzymać takie funkcje w tym samym pliku co główny kod? Chyba tylko po to żeby zobaczyc co robi funkcja IW_pzd...

To nie tak. Chcę aby zbędny kod nie plątał się w oczach kiedy funkcja zostanie użyta n razy. Czy jak używasz prostej funkcji map(), to czy widzisz w jej kod? Oczywiście, że nie bo interesuje Ciebie tylko tyle co ta funkcja realizuje. To samo jest w mojej sytuacji. Kod takich prostych funkcji jak map() chciałbym pozawijać i spakować. A jak się nie da, to walnąć w jednej linijce z dopiskiem 

/*
funkcja
*/ 

Abyś w trakcie analizy kodu nie wnikał w to co się znajduje w kodzie funkcji tylko kierował się tym co ta funkcja realizuje. 

Link do komentarza
Share on other sites

Spójrz na moje programy (kilka razy tu pokazywałem). Takim dobrym przykładem byłaby ostatnia wersja "arduino w modelarstwie kolejowym". Nie musisz czytać całości bo jest długa i nudna, ale zwróć uwagę na plik .ino. Oczywiście - mogłem go skrócić tak aby się mieścił na jednym ekranie tylko już mi się nie chciało...

To jest dokładnie to czego potrzebujesz.

Coś wspominałem o parasolu w rzyci?

Link do komentarza
Share on other sites

13 minut temu, rafal220 napisał:

To nie tak. Chcę aby zbędny kod nie plątał się w oczach kiedy funkcja zostanie użyta n razy. Czy jak używasz prostej funkcji map(), to czy widzisz w jej kod? Oczywiście, że nie bo interesuje Ciebie tylko tyle co ta funkcja realizuje. To samo jest w mojej sytuacji. Kod takich prostych funkcji jak map() chciałbym pozawijać i spakować. A jak się nie da, to walnąć w jednej linijce z dopiskiem 

/*
funkcja
*/ 

Abyś w trakcie analizy kodu nie wnikał w to co się znajduje w kodzie funkcji tylko kierował się tym co ta funkcja realizuje. 

Kod powinien być czytelny. Bez wyjątku, i to tyle w temacie. 

  • Lubię! 1
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.