Skocz do zawartości

Nietypowe deklaracje zmiennych


Pomocna odpowiedź

(edytowany)

A skąd funkcja printf ma wiedzieć co mnożysz? te dwa inty "x,y" są argumentami funkcji i musisz je podać 

Serial.println(iloczyn(2,2));

tak samo

 println(obwod(4.4)); 

 

Edytowano przez _LM_
Gość
(edytowany)

To może inaczej. Na przykładzie. Jak zrobić z tego kawałka kodu funkcję;

/* */
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;} // HiB (HighBit) // one shot
/* */

Chcę aby zmienną wejściową do funkcji była zmienna cl_hib_1, oraz wyjściową z tego działania hib_1. Jak zrobić aby zmienne d1 i d2 nie plątały się po za funkcją? Czyli w funkcji o nazwie hib_1 deklaruję zmienne bool d1 = 0 i bool d2 = 0. One mają tam pozostać jako zadeklarowane zmienne lokalne, i nigdzie więcej. Da się tak zrobić? 

Edytowano przez rafal220
fun(x);


void fun(byte cl_hib_1) { 
  static bool d1 = 0;
  static bool d2 = 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;}  
  
  return hib_1;
  }

 

Za te nazwy kazałbym Maćkowi mieszać beton xD 

14 minut temu, rafal220 napisał:

Jak zrobić aby zmienne d1 i d2 nie plątały się po za funkcją?

tyle że ty tych d1 i d2 nadal potrzebujesz więc jaki ma sens przeliczenie ich i zapomnienie? czy d1 i d2 odnoszą się do czegoś więcej niż te działania?

 

 

 

 
 

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

czy d1 i d2 odnoszą się do czegoś więcej niż te działania?

No właśnie d1 i d2 są tylko zmiennymi pomocniczymi. Do niczego innego w kodzie nie są potrzebne. Tylko do obliczeń w samej funkcji.  

 

Gość

@farmaceuta

Widzę, że zamiast int wstawiłeś void,  ale coś jest nie tak. Zastanawiam się gdzie popełniłem błąd;


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

fun(cl_hib_1);



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

void loop() {
  
uint8_t cl_hib_1 = tm.readButtons();

Serial.println(hib_1;);

void fun(byte cl_hib_1) { 
  static bool d1 = 0;
  static bool d2 = 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;}  
  
  return hib_1;
  }
}

Coś pochrzaniłem z deklaracją zmiennych XD

 Serial.println(hib_1;);
                      ^
sketch_may11b:19:25: error: a function-definition is not allowed here before '{' token
 void fun(byte cl_hib_1) {
                         ^
exit status 1
expected constructor, destructor, or type conversion before '(' token

(edytowany)

Ok to coś na wzór kolegi @farmaceuta 

bool fx(bool arg)
{
static bool d1,d2;
bool ret = false;

  if((arg & d2) == true){
		d1 = false;
	} else {
		d1 = true;
		d2 = false;
	}

  if((arg & d1) == true){
  		ret = true;
		d2 = true;
	} 
  return ret;
}

 

Edytowano przez _LM_
(edytowany)

Pewnie dało by się to jakoś ładniej zapisać ale już mi się nie chce z tym użerać. W sumie to ten program jest błędny już mi się w oczach mieni. 

Edytowano przez _LM_
Gość
23 minuty temu, farmaceuta napisał:

Znów nie wywołałes funkcji i będziesz się dziwił czemu masz zera

Na razie to mi się nie kompiluje. Tylko zmienna cl_hib_1 ma być zmienną wejściową, a return (wyjściową hib_1) 

Uruchomiłem bez print, ale też się nie kompiluje.

4.thumb.jpg.618e19433b49f513eefb246c7ecaecbb.jpg

28 minut temu, _LM_ napisał:

W sumie to ten program jest błędny już mi się w oczach mieni. 

Nie no jak kombinuje bez kombinowania z funkcjami tylko na czysto w pętli, to bardzo pięknie puszcza  0100000~~ (jeden bit) za każdym naciśnięciem przycisku. 

Gość

P.S.

38 minut temu, _LM_ napisał:

Ok to coś na wzór koleg

Nie mówię, że takie podejście jest złe, tylko za każdym razem w pamięci True musze zamieniać na "1" a false na "0" strasznie męczy to wzrok i pamięć. 

(edytowany)

@rafal220  

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


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

void loop() {
  
uint8_t cl_hib_1 = tm.readButtons();

Serial.println(fun(cl_hib_1)); 
}
               
int fun(byte cl_hib_1) { 
  static bool d1 = 0;
  static bool d2 = 0;
  bool hib_1 = 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;}  
  
  return hib_1;
  }

 

Edytowano przez farmaceuta
Gość

Nadal mam błąd;

5.thumb.jpg.fdad22b1b5abdb8b6ff30862672cb838.jpg

Sam powinienem tutaj myśleć, ale brak wprawy + zmęczenie swoje robi. 

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