Skocz do zawartości

Prośba o wytłumaczenie kodu z książki


Shogman

Pomocna odpowiedź

Witam, zakupiłem książkę "Arduino w akcji" licząc na to że bez większej wiedzy o programowaniu będę w stanie czegoś się nauczyć, jednak nie mogą zrozumieć kilku kwestii w jednym z początkowych programów

volatile int state = LOW;  // deklaracja i inicjalizacja zmiennej z atrybutem volatile 
int ledArray[] = { 8, 9, 10, 11, 12 };
int count = 0;
int timer = 75;
int pause = 500;

void setup() {
  for (count = 0; count < 5; count++) {
     pinMode(ledArray[count], OUTPUT);
  }
  attachInterrupt(0, ledOnOff, RISING);  // inicjalizacja przerwania 
}

void loop() {
  if (state) {
     for (count = 0; count < 5; count++) {
        digitalWrite(ledArray[count], HIGH);
        delay(timer);
     }
     delay(pause);  // opóźnienie wykonywania kodu 

     for (count = 0; count < 5; count++) {
        digitalWrite(ledArray[count], LOW);
        delay(timer);
     }
     delay(pause);
  }
}

void ledOnOff() {
  static unsigned long lastMillis = 0;  // użycie zmiennej statycznej 
  unsigned long newMillis = millis();
  if (newMillis - lastMillis < 50) {  // zapobieganie odbijaniu styków 
  } else {
     state = !state;
     lastMillis = newMillis;
  }
}

Pierwsze pytanie: volatile int state = LOW; - czemu zmiennej int przypisujemy LOW? Czy chodzi o to że kompilator przeczyta to jakby tam było 0?

Drugie pytanie: if (state) - nie rozumiem tego warunku, co ma się stać z tą zmienną żeby wykonała się ta instrukcja?

Z góry dziękuję za odpowiedzi i przepraszam za ignorancje, jeżeli te pytania nie mają sensu i takie rzeczy powinno się wiedzieć 😉

Link do komentarza
Share on other sites

Pierwsze pytanie: volatile int state = LOW; - czemu zmiennej int przypisujemy LOW? Czy chodzi o to że kompilator przeczyta to jakby tam było 0?

Do tego się to sprowadza, bo LOW to po prostu stała (a dokładniej, makro preprocesora) predefiniowane w środowisku Arduino.

Drugie pytanie: if (state) - nie rozumiem tego warunku, co ma się stać z tą zmienną żeby wykonała się ta instrukcja?

Warunek wykona się, gdy wartość będzie różna od zera.

Link do komentarza
Share on other sites

Co do pierwszego pytania to zobacz sobie plik Arduino.h w folderze Arduino/hardware/arduino/avr/cores/arduino.

W linii 40 i 41 masz:

#define HIGH 0x1
#define LOW  0x0
Link do komentarza
Share on other sites

Zaczynając od zera, kiedy już obejrzałeś kilka arduinowych programów i mniej więcej wiesz jak to wygląda, trochę nie ma sensu (i szkoda czasu) iść po omacku. Moim zdaniem bardzo przyda Ci się teraz jakaś książka o samym języku C. Nawet kanoniczna i w pewnym sensie kultowa pozycja Kernighan/Ritchie:

http://helion.pl/ksiazki/jezyk-ansi-c-programowanie-wydanie-ii-brian-w-kernighan-dennis-m-ritchie,jansic.htm

będzie bardzo pomocna. Bardzo ładnie i miękko wprowadza w język, jego składnię a przede wszystkim w ideę C, budowanie kodu i korzystanie z instrukcji i funkcji. Mimo że nie ma tam nic o obiektach, metodach, szablonach, funkcjach lambda, przeciążaniu itp elementach nowoczesnego C++ to jednak jest to uznana "biblia" języka i każdy powinien ją mieć na półce - stanowi dobre odniesienie i rozwiewa wiele wątpliwości, szczególnie w początkowych fazach nauki. Czyta się ją jak dobrą powieść a po czymś takim będziesz połykał programiki Arduino jak ciepłe bułeczki będąc w stanie samemu tworzyć coś o niebo bardziej skomplikowanego.

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

Dzięki za odpowiedzi, rozjaśniły mi działanie tego programu 😉

@marek1707 Kurczę, liczyłem na to że ta książka będzie dobrym podręcznikiem do nauki programowania Arduino, a tutaj jednak programy są wytłumaczone dosyć powierzchownie (przynajmniej według mnie), może rzeczywiście trzeba będzie się zaopatrzyć w inną książkę

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.