rejze69: const int pin=A4 .Do int nelze ukláday písmena a vůbec mi nedochází co má ta deklarace znamenat.
A4 je Analog 4 pin, definovany v hardware/arduino/avr/variants/standard (a podobne dle typu cilove platformy) /pins_arduino.h
Kód: Vybrat vše
...
#define PIN_A4 (18)
...
static const uint8_t A4 = PIN_A4;
...
takze davat ho do int samozrejme jde, navic by stacil obycejny byte.
Sperhak:
Kód: Vybrat vše
if (b == 1 && buttonState == HIGH ) {
Treba b1 a button na HIGH držať 15s aby sa uspal alebo stačí na par ms splniť podmienku a spraví sa všetko čo je v nej?
ta podminka porovna b s jednickou a buttonState taky s jednickou, to je par strojovych instrukci (cti neco pod mikrosekundu)
Kód: Vybrat vše
int reading = digitalRead(buttonPin);
buttonState = reading;
digitalRead(buttonPin) je funkce na par radek, ale podstatne je to, ze bez ohledu na vsechna ostatni zdrzeni (dana vypocty v ni) v ni, si JEN JEDNOU precte obsah prislusneho registru, coz je JEDINA asm instrukce (tedy 1/ 16,000,000 s) behem ktere se cte z HW ulozeny stav napeti na tom pinu coz je bud nula, nebo jedna, at uz je tam cokoli mezi 0 a 5V (resp. 3.3V), tak se to na jednu z tehle hodnot prevede, protoze nic jineho nez 0 nebo 1 v bitu byt proste nemuze.
Takze pokud ve spravnou dobu je na prislusnem pinu spravne napeti, tak digitalRead(..) vrati jednicku. To napeti tam musi byt dost dlouho na to, aby se nabil kondik dany prechodem CMOS tranzistoru na dostatecne napeti - radove jeste kratsi dobu, nez trva JEDNA asm instrukce.
Ten delay tam jen zpusobi, ze se to sleepNow() zavola az o 15s pozdeji, nez je cela ta podminka vyhodnocena. (mikroprocesor ti do hlavy nevidi, dela, co mu naprogramujes. if (a==1 && b==1) je pro nej jen nejake porovnani hodnot bez hlubsiho vyznamu a provede se takrka okamzite.)