"U potrazi za tartufima AVR-a" - Blink control
Kada govorimo o zadatku većina početnika bi pokušala čitati tipku i kontrolirati impulse LED-a, što je apsolutno krivo razmišljanje. Istovremeno paziti na korisnika, njegovu tipku, brojati impulse koje on unosi, paziti na debounce, paziti na dugi pritisak tipke (1 S) i kontrolirati rad LED-a, moram priznati NEMOGUĆE JE. Nemamo baš tako dobar mozak da možemo sve ove kombinacije programirati paralelno. To je ono što početnici stalno pokušavaju i uvijek se gube u kombinacijama "što bi bilo kad bi bilo".
Prvenstveno moramo znati razdvojiti problem na zasebne cjeline, koje su u pravilu trivijalne. Tipka po kojoj lupa korisnik programski gledano gotovo nema nikakve veze sa blinkanjem LED-a. Zamislimo da imamo 2 crne kutije, jedna kontrolira LED, a druga kontrolira tipkalo. Jedina poveznica između ove dvije kutije govana je uključi, isključi i blinkaj toliko puta u sekundi.
Evo nas na prekretnici "što prvo pisati"?
Kako god da okrenemo ne smijemo pisati obe stvari istovremeno, dakle nikako pokušati napisati program onako "iz rukava".
Između njih 2 koliko ih ja vidim, prvo ću odabrati kontrolu LED-a, a to istovremeno znači da tipke za mene ne postoje. Uopće ne želim razmišljati o debounce, 1S, na kojem je portu... Za mene moj izbor kutije znači što u nju ulazi, što izlazi i što kutija radi.
Ulazi:
Uključi ili isključi blinkanje
Blinkaj n puta u sekundi
Izlazi:
Ništa
Radi:
Blinka
Ove 2 stvari ne moraju biti u posebnoj datoteci, što je najgore mogu biti u istoj datoteci, u istoj funkciji, pa čak i izmješane u funkciji. Jedino moraju biti odvojene u našoj glavi dok programiramo jednu ili drugu stvar. Ovim načinom razmišljanja svaki program, da je ne znam koliko kompliciran možemo razdvojiti na niz jednostavnih stvari. U konačnici samo povežemo jednu, drugu ili petu kutiju govana i čudom stvar radi savršeno.
