Skocz do zawartości

Nietypowe deklaracje zmiennych


Pomocna odpowiedź

Gość

O widzisz. I o to  właśnie mi chodziło.

Dołożyłem tylko delay, żeby coś było widać.

6.thumb.jpg.2545cbe91c5834fc39fa3d0073749b15.jpg

Bardzo ładnie generuje jeden bit przy każdym naciśnięciu przycisku. Dziś już jestem zmęczony. Trochę odpocznę, i sam spróbuję obszyć podobną funkcję.  

Gość

@farmaceuta

Tak sobie obszyłem tą funkcję;

#include <TM1638lite.h>
TM1638lite tm(6, 7, 8);


void setup() {
  Serial.begin(9600);
}

void loop() {
  


uint8_t hib_1 =  tm.readButtons()& 128; //przycisk nr. 8

Serial.println(oneshot(hib_1)); 

delay(300);
}
               
int oneshot(byte hib_1) { 
  
bool hib = hib_1;

static bool d1 = 0;
static bool d2 = 0;
bool ret = 0;
if(hib & d2){ret = 0; d1 = 0;} 
else{d1 = 1; d2 = 0;} 
if(hib & d1){ret = 1; d2 = 1;}  
return ret;
}

Zrobiłem tak, że w funkcji podstawiam sobie tylko dwie zmienne. Reszta kodu funkcji mnie nie interesuje, tylko działanie samej funkcji, dlatego kod jest możliwie ściśnięty aby nie plątał się po ekranie. W sumie można by jeszcze pozawijać do linijek, ale na razie wolną chwilą poćwiczę sobie robiąc inne proste funkcje. Nazwa oraz przeinaczenie funkcji myślę że jest ok.  

Gość
26 minut temu, _LM_ napisał:

Funkcja zwraca int czy bool? 

Funkcja działa, ale masz tu zdecydowanie rację. Po co deklarować int skoro cała funkcja jest binarna? Zmieniłem z int na bool.  

Gość
(edytowany)
Dnia 12.05.2024 o 00:49, _LM_ napisał:

Pewnie dało by się to jakoś ładniej zapisać

/* HiB  */               
byte oneshot_hib(byte hib) { 
  
static byte d1 = 0;  
byte ret = 0;

if (hib & 1) {ret = hib >> d1++;}
else {d1 = 0;}  
return ret;
}
/* HiB  */

A tak może być? Pewnie da się to jeszcze prościej zrobić, ale z moimi umiejętnościami, to na razie nie mam pomysłu. Poprzedni kod był o tyle lepszy, że przy spełnionym warunku nie mielił zmiennych w działaniu.  

P.S.

Dla d1 też trzeba dopisać warunek, bo przy przekroczeniu 255, algorytm ponownie wygeneruje bit.

Edytowano przez rafal220
Gość
21 minut temu, Elvis napisał:

Forbot to niby forum dla początkujących, ale może warto dbać o chociaż minimalny poziom i przekazywać dobre wzorce.

Nie wiem co masz na myśli, skoro funkcja działa prawidłowo.  Zresztą poprawiłem jeszcze jedną rzecz, i jest całkiem ok.

/* HiB  */               
byte oneshot_hib(byte hib) { 
  
static byte d1 = 0;
byte ret = 0;

if (hib & 1) {ret = hib >> d1; d1=1;}
else {d1 = 0;}  
return ret;
}
/* HiB  */

Nazwa funkcji jest intuicyjna, a kod jest możliwie ściśnięty.  

Gość

To przecież jadę na bieżąco z kursem w miarę rozwiązywania zadań. A że nie po kolei? Tak mi jest łatwiej.

Ja nie rozumiem czemu tak wszyscy czepiają się estetyki kodu, skoro co drugi na YT takie coś praktykuje. Stałe funkcje w których składnię nie wnika zawija tyle ile się da do monolitycznego ciągu linijek. W razie jakiś poprawek zawsze można rozłożyć poprzez ctrl + t

1 godzinę temu, rafal220 napisał:

nie rozumiem czemu tak wszyscy czepiają się estetyki kodu,

Ale tu nie tyle chodzi o estetykę, tylko o czytelność kodu.

 

1 godzinę temu, rafal220 napisał:

co drugi na YT takie coś praktykuje

Nie wiem czy to prawda, ale trudno uznać YT za autorytet. Swoje dzieła może prezentować tam każdy, w szczególności Ty też.

A do poduszki polecam to.

  • Lubię! 1
Gość
6 minut temu, jand napisał:

Ale tu nie tyle chodzi o estetykę, tylko o czytelność kodu.

Jeżeli mowa o docelowym kodzie programu, to się zgodzę, ale rozpisywanie wszystkiego może być ogólnie męczące. Po co mega dokładnie opisywać wszystkie zmienne funkcji, skoro wystarczy znać samo działanie funkcji. Ponadto sporo rzeczy jest intuicyjnych tj. zmienne pomocnicze które nigdzie indziej się nie powtarzają. Zobaczę jak to dalej będzie z tym w praktyce. Na razie to są krótkie kawałki kodu do zadań ćwiczebnych które mają na celu szybszą analizę wybranych fragmentów kodu. 

8 godzin temu, rafal220 napisał:

Jeżeli mowa o docelowym kodzie programu, to się zgodzę

To nie lepiej od razu pisać dobrze, niż potem przepisywać? To nie zadziała.

Tak jak ludzie masowo robiący telefonami zdjęcia obiecują sobie, że potem je przejrzą, posegregują - a ilu to naprawdę robi?

 

  • Lubię! 1

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