Skocz do zawartości

Kurs Arduino - #3 - UART (komunikacja z PC), zmienne


Pomocna odpowiedź

#define zielona 8
#define czerwona 9
 
String odebraneDane = ""; //Pusty ciąg odebranych danych
 
void setup() {
  Serial.begin(9600); //Uruchomienie komunikacji
  pinMode(zielona, OUTPUT); //Konfiguracja wyjść
  pinMode(czerwona, OUTPUT);
  
   digitalWrite(zielona, HIGH);
  delay(1000);
  digitalWrite(zielona,LOW);       //Wyłączamy diody
    digitalWrite(czerwona, HIGH);
  delay(1000);
  digitalWrite(czerwona,LOW);
}
 
void loop() {
  if(Serial.available() > 0) { //Czy Arduino odebrało dane
    //Jeśli tak, to odczytujemy je do znaku końca linii i zapisz w zmiennej odebraneDane
    odebraneDane = Serial.readStringUntil('\n'); 
    
    if (odebraneDane == "zielona") { //Jeśli odebrano słowo "zielona"
      digitalWrite(zielona, HIGH); //To włączamy diodę zieloną
      delay(1000);
      digitalWrite(zielona, LOW); 
    }
    
    if (odebraneDane == "czerwona") { //Jeśli odebrano słowo "czerwona"
      digitalWrite(czerwona, HIGH); //To włączamy diodę czerwoną
      delay(1000);
      digitalWrite(czerwona, LOW); 
    }
  }
}

Kopia programu z lekcji plus te moje 6 linijek

9600 baud, autoscroll, powrót karetki. COM 3

Nie wiem jak pokazać więcej konfiguracji. Do tego momentu wszystko działało OK.I woltomierz też działa z następnej lekcji.

A tak przy okazji czy można zrobić tak by monitor wypisywał dane nie w jednej linii a jeden wpis pod drugim jak w kursie.

Edytowano przez szlak18
Link do komentarza
Share on other sites

Myślę że @Treker prosząc o konfigurację monitora portu miał na myśli coś co jest istotne dla wysyłanych komend - jak są kończone linie. Tam masz po lewej od wyboru baud rate.

Jak przyjrzysz się to ten program bazuje na odczytywaniu znaku końca linii \n

Edit: dla testu możesz wpisać w wartość początkową zmiennej np: 

String odebraneDane = "czerwona\n";

 

Edytowano przez Gieneq
Link do komentarza
Share on other sites

Dzięki Gieneq za nakierowanie. Zmieniłem ustawienia monitora COM z "powrót karetki" na NOWA linia i działa.  Można by to w kursie zaznaczyć opisując Serial.readStringUntil('\n'); - wyjaśniając dostępne parametry bo domyślam się, że powrót karetki też ma jakiś parametr - cokolwiek to znaczy. Także złapałem się na tym, że wpisując z "palca" Serial.print  wpisałem tylko print  i monitor wpisywał wszystko w jednej linii. Dopiero potem zauważyłem println i już pisał linia pod linią.

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

Faktycznie, może to być mylące zwłaszcza że we wcześniejszych ćwiczeniach jest inne ustawienie. Dziękujemy za sugestię 😀

Powodzenia w dalszych ćwiczeniach, w razie problemów pisz! 😉

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

Witam

Mam problem z kompilacją kodu:

int licznik = 0; 
 
void setup() {
  Serial.begin(9600); //Inicjalizacja połączenia z PC
}
 
void loop() {
  Serial.println(licznik); //Wysłanie wartości zmiennej licznik
  licznik = licznik + 1; //Zwiększenie licznika o 1
  delay(100); //Opóźnienie, aby efekt był lepiej widoczny
}

Wyskakuje komunikat :

exit status 1
Błąd kompilacji dla płytki Arduino/Genuino Uno.

Ktoś miał ten problem?

Edytowano przez Treker
Poprawiłem formatowanie.
Link do komentarza
Share on other sites

Cześć, mam mały problem z częścią" Interakcja z układem - sterowanie diodami przez UART".

Po wpisaniu odpowiedniej komendy zapala się odpowiednia dioda ale nie gaśnie. Świeci się na stałe aż do wpisania innego polecania do monitora portu szeregowego. 

Tutaj kod:
 

#define czerwona 6 
#define zielona 8

String zapalic = ""; //zdefiniowanie zmiennej jako pusty ciag znakow

void setup() {
  Serial.begin(9600); //uruchomienie komunikacj
  pinMode(czerwona, OUTPUT); //konfiguracja wyjsc
  pinMode(zielona, OUTPUT);

  digitalWrite(czerwona, LOW); //Wylaczenie diod
  digitalWrite(zielona, LOW);

}

void loop() {
  if(Serial.available() > 0) { //spr czy Arduino odebralo dane
    zapalic = Serial.readStringUntil('\n');
    // Jesli tak to wstawienie danych do zmiennej
  }

  if(zapalic == "zielona") { //Jesli wpisano "zielona"
    digitalWrite(zielona, HIGH); //wlaczenie zielonej
    delay (1000); //odczekanie 1 sek
    digitalWrite(zielona, LOW); //wylaczenie zielonej
           
  } 
  if(zapalic == "czerwona") { //jesli wpisano czerwona
    digitalWrite(czerwona, HIGH); //wlaczenie czerwonej
    delay(1000); //Odczekanie 1 sek
    digitalWrite(czerwona, LOW); //wylaczenie czerwonej
    
  }

 

 

EDYCJA: już znalazłem błąd 🙂. Źle zamknięta była pierwsza funkcja warunkowa if. Zaraz po jej wykonaniu zamiast po wykonaniu całego programu. 

 

Zadanie domowe 2.4 - kod: 

 

#define czerwona 6 
#define zielona 8

String zapalic = ""; //zdefiniowanie zmiennej jako pusty ciag znakow

void setup() {
  Serial.begin(9600); //uruchomienie komunikacj
  pinMode(czerwona, OUTPUT); //konfiguracja wyjsc
  pinMode(zielona, OUTPUT);

  digitalWrite(czerwona, LOW); //Wylaczenie diod
  digitalWrite(zielona, LOW);
  Serial.println("Podaj kolor diody!");

}

void loop() {
  if(Serial.available() > 0) { //spr czy Arduino odebralo dane
    zapalic = Serial.readStringUntil('\n');
    // Jesli tak to wstawienie danych do zmiennej
  

  if(zapalic == "zielona") { //Jesli wpisano "zielona"
    digitalWrite(zielona, HIGH); //wlaczenie zielonej
    delay (1000); //odczekanie 1 sek
    digitalWrite(zielona, LOW); //wylaczenie zielonej
    } else if(zapalic == "czerwona") { //jesli wpisano czerwona
    digitalWrite(czerwona, HIGH); //wlaczenie czerwonej
    delay(1000); //Odczekanie 1 sek
    digitalWrite(czerwona, LOW); //wylaczenie czerwonej 
    } else { 
      Serial.println("Podaj wlasciwy kolor diody (czerowna/zielona)!");
    } 
  }
}
 

 

 

Zadanie 2.5: 

#define czerwona 6 
#define zielona 8

String zapalic = ""; //zdefiniowanie zmiennej jako pusty ciag znakow
boolean StanZielonej = false; // Zdefiniowanie stanu zielonej
boolean StanCzerwonej = false; // Zdefiniowanie stanu czerwonej

void setup() {
  Serial.begin(9600); //uruchomienie komunikacj
  pinMode(czerwona, OUTPUT); //konfiguracja wyjsc
  pinMode(zielona, OUTPUT);

  digitalWrite(czerwona, StanCzerwonej); //Wylaczenie diod
  digitalWrite(zielona, StanZielonej);
  Serial.println("Podaj kolor diody!");

}

void loop() {
  if(Serial.available() > 0) { //spr czy Arduino odebralo dane
    zapalic = Serial.readStringUntil('\n');
    // Jesli tak to wstawienie danych do zmiennej
  

  if(zapalic == "zielona") { //Jesli wpisano "zielona"
    StanZielonej = !StanZielonej; //zmiana stanu diody zielonej
    digitalWrite(zielona, StanZielonej); 
    } else if(zapalic == "czerwona") { //jesli wpisano czerwona
    StanCzerwonej = !StanCzerwonej; //zmiana stanu diody czerwonej
    digitalWrite(czerwona, StanCzerwonej); 
    } else { 
      Serial.println("Podaj wlasciwy kolor diody (czerowna/zielona)!");
    } 
  }
}
 

 

Edytowano przez BHBmacieg
Link do komentarza
Share on other sites

Zrobiłem to bez zmiennych typu bool, w zasadzie nie widziałem potrzeby ich używania i program działa ok. Czy tak może być?

#define zielona 8
#define czerwona 9

 
String odebraneDane = ""; //Pusty ciąg odebranych danych
 
void setup() {
  Serial.begin(9600); //Uruchomienie komunikacji
  pinMode(8, OUTPUT); //Konfiguracja wyjść
  pinMode(9, OUTPUT);
  
  digitalWrite(8, LOW); //Wyłączamy diody
  digitalWrite(9, LOW);
  bool pinMode(9, OUTPUT);


}
 
void loop() {
    
  if(Serial.available() > 0) { //Czy Arduino odebrało dane
    //Jeśli tak, to odczytujemy je do znaku końca linii i zapisz w zmiennej odebraneDane
    odebraneDane = Serial.readStringUntil('\n'); 

      
      if(digitalRead(zielona) == LOW && odebraneDane == "zielona"){
        digitalWrite(8, HIGH);
         delay(1000);
          digitalWrite(9, LOW);
         String odebraneDane = ""; 
    
  }


 else if (digitalRead(zielona) == HIGH && odebraneDane == "zielona"){
        digitalWrite(8, LOW);
         delay(1000);
         String odebraneDane = ""; 
    
  }

 if(digitalRead(czerwona) == LOW && odebraneDane == "czerwona"){
        digitalWrite(9, HIGH);
         delay(1000);
          digitalWrite(8, LOW);
         String odebraneDane = ""; 
    
  }


 else if (digitalRead(czerwona) == HIGH && odebraneDane == "czerwona"){
        digitalWrite(9, LOW);
         delay(1000);
         String odebraneDane = ""; 
    
  }
 
        
    
   
  
  }
}

 

1 godzinę temu, BHBmacieg napisał:

Cześć, mam mały problem z częścią" Interakcja z układem - sterowanie diodami przez UART".

Po wpisaniu odpowiedniej komendy zapala się odpowiednia dioda ale nie gaśnie. Świeci się na stałe aż do wpisania innego polecania do monitora portu szeregowego. 

Tutaj kod:

Dodaj po void loop()

jeszcze taką linijkę

String zapalic = " ";

Dioda jest wciąż się świeci ponieważ w buforze pamięci cały czas jest "zielona" i pętla po prostu odpala ją znowu gdy tego nie widzisz 🙂

#define czerwona 9 
#define zielona 8

String zapalic = ""; //zdefiniowanie zmiennej jako pusty ciag znakow

void setup() {
  Serial.begin(9600); //uruchomienie komunikacj
  pinMode(czerwona, OUTPUT); //konfiguracja wyjsc
  pinMode(zielona, OUTPUT);

  digitalWrite(czerwona, LOW); //Wylaczenie diod
  digitalWrite(zielona, LOW);

}

void loop() {
    String zapalic = "";
  if(Serial.available() > 0) { //spr czy Arduino odebralo dane
    zapalic = Serial.readStringUntil('\n');
    // Jesli tak to wstawienie danych do zmiennej
  }

  if(zapalic == "zielona") { //Jesli wpisano "zielona"
    digitalWrite(zielona, HIGH); //wlaczenie zielonej
    delay (1000); //odczekanie 1 sek
    digitalWrite(zielona, LOW); //wylaczenie zielonej
  
           
  } 
  else if(zapalic == "czerwona") { //jesli wpisano czerwona
    digitalWrite(czerwona, HIGH); //wlaczenie czerwonej
    delay(1000); //Odczekanie 1 sek
    digitalWrite(czerwona, LOW); //wylaczenie czerwonej
    
  }
Serial.println(zapalic);
}

 

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

@wnuczus witam na forum 🙂

1 godzinę temu, wnuczus napisał:

Zrobiłem to bez zmiennych typu bool, w zasadzie nie widziałem potrzeby ich używania i program działa ok. Czy tak może być?

Pewnie, można i tak 🙂 Popracuj tylko trochę nad wcięciami i usuń zbędne puste linie w kodzie - łatwiej będzie wtedy wszystko analizować.

Link do komentarza
Share on other sites

2 godziny temu, wnuczus napisał:

Dodaj po void loop()

jeszcze taką linijkę

String zapalic = " ";

Dioda jest wciąż się świeci ponieważ w buforze pamięci cały czas jest "zielona" i pętla po prostu odpala ją znowu gdy tego nie widzisz 🙂

dziękuję za zainteresowanie 🙂 Udało mi się jednak wcześniej znaleźć błąd i go wyeliminować.Wspomniałem o tym w edycji posta. 

Teraz biorę się za budowę sygnalizacji świetlnej dla aut i pieszych sterowanej z poziomu monitora portu szeregowego. 

 

Edytuję post żeby nie robić multipostów. Chwilę jeszcze poświęciłem na tę część kursu. Zbudowałem sygnalizacje świetlną sterowaną za pomocą komunikacji Arduino z PC. Stan początkowy to wszystkie diody wyłączone. Komenda "czerwoneA" powoduje zapalenie czerwonego dla aut i zielonego dla pieszych. Komenda "zmiana na zieloneA" powoduje w pierwszej kolejności miganie zielonego dla pieszych (zrealizowane przez pętle for), następnie zmianę na z czerwonego na żółte dla aut i na końcu zmianę z żółtego na zielone dla aut oraz wygasza zielone dla pieszych i zmienia je na czerwone. Komenda "zmiana na czerwoneA" działa "odwrotnie" do poprzedniej komendy z tym, że pomija miganie światłem dla pieszych. Dodatkowo przy wpisaniu błędnej komendy otrzymujemy odpowiedni komunikat. 

Poniżej kod:

#define czerwoneA 8
#define zolteA 7
#define zieloneA 6
#define czerwoneP 4
#define zieloneP 3

String sekwencja = ""; // zdefiniowanie pustej zmiennej
int i = 0;


void setup() {
  Serial.begin(9600); //uruchomienie komunikacji
  pinMode(czerwoneA, OUTPUT); //zdefiniowanie wyjsc
  pinMode(zolteA, OUTPUT);
  pinMode(zieloneA, OUTPUT);
  pinMode(czerwoneP, OUTPUT);
  pinMode(zieloneP, OUTPUT);

  digitalWrite(czerwoneA, LOW); // ustalenie stanu poczatkowego swiatel
  digitalWrite(zolteA, LOW);
  digitalWrite(zieloneA, LOW);
  digitalWrite(czerwoneP, LOW);
  digitalWrite(zieloneP, LOW);

}

void loop() {

  if(Serial.available() > 0) { //sprawdzenie czy Arduino odebralo dane
    sekwencja = Serial.readStringUntil('\n');
    // zapisanie stanu do zmiennej 

    if(sekwencja == "czerwoneA") { //jesli czerwona dla aut  to:
      digitalWrite(czerwoneA, HIGH); //czerwone dla aut
      digitalWrite(zieloneP, HIGH); //zielone dla pieszych
    } else if(sekwencja == "zmiana na zieloneA") { //sekwencja zmiany swiatla na zielone dla aut
      digitalWrite(czerwoneA, HIGH); //stan poczatkowy zmiany na zielone dla aut
      digitalWrite(zieloneP, HIGH);
      for(i; i<7; i++) { //miganie zielonego dla pieszych
        digitalWrite(zieloneP, LOW);
        delay(300);
        digitalWrite(zieloneP, HIGH);
        delay(300);
      }
      i = 0;
      digitalWrite(zieloneP, LOW); //wylaczenie zielonego dla pieszych
      digitalWrite(czerwoneA, LOW); //wylaczenie czerwonego dla aut
      digitalWrite(zolteA, HIGH); //wlaczenie zoltego dla aut
      digitalWrite(czerwoneP, HIGH); //wlaczenie czerwonego dla pieszych
      delay(1000);
      digitalWrite(zieloneA, HIGH); //wlaczenie zielonego dla aut
      digitalWrite(zolteA, LOW); //wylaczenie zoltego dla aut
      } else if(sekwencja == "zmiana na czerwoneA") { //sekwencja zmiany swiatla na czerwone dla aut
        digitalWrite(zieloneA, LOW); //wylaczenie zielonego dla aut
        digitalWrite(zolteA, HIGH); //wlaczenie zoltego dla aut
        delay(1000);
        digitalWrite(zolteA, LOW);
        digitalWrite(czerwoneP, LOW);
        digitalWrite(zieloneP, HIGH);
        digitalWrite(czerwoneA, HIGH);
      } else {
        Serial.println("Podaj właściwą komendę!");
      }
    }
  }

Jeśli ktoś ma jakieś propozycje czy pomysły jak kod ulepszyć albo co w nim zmienić to jestem otwarty i chętnie podyskutuję. Docelowo chcę to połączyć z poprzednią częścią kursu i dodać przycisk, który będzie powodował uruchamianie tych samych sekwencji co komendy z PC tak aby wszystko mogło działać zarówno w połączeniu z PC jak i na zasilaniu bateryjnym bez dostępu do PC. 

Edytowano przez BHBmacieg
Link do komentarza
Share on other sites

Witam. Już po raz kolejny czytam komentarze i patrze na rozwiązania innych i chyba zaczynam (żeby nie powiedzieć "załamywać") się mocno wątpić w swoje możliwości. Utknąłem w jednym miejscu i ani rusz.

Przeczytałem od 1 do 3 części kursu programowania już chyba z 5 razy od deski do deski i nie rozumiem w jak innym udaje się wykorzystać ten" boolean"  czy "&&" skoro nigdzie wcześniej nie było żadnego przykładu jak to zrobić🤔.  Nawet po przejrzeniu wstawionych kodów nie rozumiem  na jakiej  jakiej zasadzie to działa. Chyba że muszę wcześniej ukończyć jakiś inny kurs dla tych co z programowaniem nie spotykają się po raz pierwszy😕   

Edytowano przez Vova
Link do komentarza
Share on other sites

Cześć. Wydaje mi się, że dla osób, które nigdy nie miały choćby krótkiego kontaktu z programowaniem ten kurs może wydawać się trudny i niezrozumiały. Warto wcześniej poznać podstawy programowania, podstawowe funkcje w języku C++, C czy dowolnym innym zbliżonym. Ja sam osobiście też tego kontaktu z programowaniem nie miałem dużo, bo raptem dwa semestry laboratoriów na studiach, gdzie programowałem w języku Visual Baisc oraz w domowym zaciszu napisałem kilka prostych programów w Pythonie. 

Jeśli chodzi o wymienione przez Ciebie niezrozumiałe elementy to w gruncie rzeczy są one bardzo proste w swoim działaniu. Zmienna typu boolean jest zmienną logiczną i może przyjąć tylko dwie wartości: True lub False (co jest interpretowane przez komputer jako odpowiednio 1 lub 0). W naszym przypadku możemy za jej pomocą sterować stanem zadeklarowengo wyjścia na LED. 1 to stan wysoki (High) a 0 to stan niski (Low). Natomiast napis typu "StanZielonej = !StanZielonej" umieszczony w funkcji loop powoduje zmianę wartości tej zmiennej na przeciwną za każdym razem, gdy warunek zawarty w funkcji warunkowej będzie spełniony (w tym przypadku jest to wpisanie do portu słowa "zielona") 

 

Jeśli chodzi o spójnik & & bądź inaczej AND to jest to spójnik, który wymusza sprawdzenie przez program prawdziwości dwóch lub więcej warunków jednocześnie. Dla przykładu :

"else if (digitalRead(czerwona) == HIGH && odebraneDane == "czerwona") "

Program sprawdza najpierw czy stan wyjście przypisanym do "czerwona" jest wysoki (1) oraz czy wartość zmiennej "odebraneDane" w danym momencie ma wartość "czerwona". Program wejdzie do wnętrza funkcji warunkowej tylko wtedy gdy oba te warunki będą spełnione jednocześnie. Wystarczy, że jeden z nich (lub obydwa) przyjmie wartość inna niż zadana to program ominie całą tą funkcję warunkową. Jest jeszcze spójnik OR, który wymaga poprawnosci tylko jednego z kilku warunków. Reszta może być fałszywa a program i tak wejdzie do funkcji. 

Link do komentarza
Share on other sites

8 godzin temu, Vova napisał:

Przeczytałem od 1 do 3 części kursu programowania już chyba z 5 razy od deski do deski i nie rozumiem w jak innym udaje się wykorzystać ten" boolean"  czy "&&" skoro nigdzie wcześniej nie było żadnego przykładu jak to zrobić🤔.  Nawet po przejrzeniu wstawionych kodów nie rozumiem  na jakiej  jakiej zasadzie to działa. Chyba że muszę wcześniej ukończyć jakiś inny kurs dla tych co z programowaniem nie spotykają się po raz pierwszy😕   

@Vova musisz brać poprawkę na to, że niektóre osoby korzystające z tego kursu mają już jakieś doświadczenie w programowaniu i zwyczajnie samodzielnie wplotły do rozwiązań zadań domowych coś, co nie było tutaj omawiane. Nie przekreślam takich rozwiązań, bo nie mogę przecież wymagać, aby ktoś specjalnie zapominał o niektórych rozwiązaniach. Nie znaczy to jednak, że jest to jedyne możliwe i poprawne rozwiązanie całego zadania 🙂 

Łącznie warunków za pomocą && to tylko skrócenie zapisu, który można stworzyć za pomocą dwóch if'ów, zmienne typu boolean to z kolei "zwykłe zmienne", które mogą przyjmować tylko 2 wartości. Nie ma w tym nic strasznego 😉 Najlepiej będzie, jeśli zwyczajnie pokażesz nam swoje próby - chętnie coś doradzimy, wskażemy błędy lub doradzimy co warto poprawić.

Link do komentarza
Share on other sites

Witam

Też nie miałem styczności z programowaniem, tylko z kursem elektroniki 1 i 2 oraz kurs techniki cyfrowej. Nie wiem jak inni napisali to zadanie z gwiazdką (oprócz użytkownika Wnuczus), ale ja napisałem w ten sposób (bez &&) i działa, może to będzie dla Pana zrozumiałe? (od laika)

String odebraneDane = "";
boolean czerwona = false;
boolean zielona = false;

void setup () {
  Serial.begin(9600);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);

  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
}

void loop (){
 if(Serial.available() > 0)
 {
 odebraneDane = Serial.readStringUntil('\n');
  if (odebraneDane == "zielona")
  {   
   if (zielona == false)
     {
       digitalWrite(8, HIGH);
       boolean (zielona = true);   
     }
  else
     {
     digitalWrite(8, LOW);
     boolean (zielona = false);
     }
  }

     
  if (odebraneDane == "czerwona")
  {
   if (czerwona == true)
     {
       digitalWrite(9, LOW);
       boolean (czerwona = false);   
     }
  else
     {
     digitalWrite(9, HIGH);
       boolean (czerwona = true);
     }
  }
 }
}

Później przeczytałem kod "Wnuczus" i spróbowałem napisać podobny:

String odebraneDane = "";


void setup () {
  Serial.begin(9600);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);

  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
}

void loop (){
 if(Serial.available() > 0)
 {
 odebraneDane = Serial.readStringUntil('\n');
 
  if (digitalRead(8) == LOW && odebraneDane == "zielona")
 
  {   
       digitalWrite(8, HIGH);
  }
else
   {
     digitalWrite(8, LOW);
    }
 

     
   if (digitalRead(9) == LOW && odebraneDane == "czerwona")
  {   
       digitalWrite(9, HIGH);
  }
  else
   {  
     digitalWrite(9, LOW);
    }
  }
}
    

też działa.

Ale nie używam #define, bo nie ogarniam tego:)

 

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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

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