Knihovna je software (tecka).
Ale protoze nechces na tom MCU nastavovat ve spravnem poradi bity na spravnych mistech a ve spravny cas, kdyz to ma nekam poslat nejakou zpravu prez seriovy port, tak nekdo, kdo tohle resil uz driv si napsal par funkci, co to vyrazne usnadni - a tomu shluku funkci se rika knihovna.
To MCU ma v "kremiku" zabudovany obvod, ktery umi usnadnit ten prenos na konkretnim pinu (pinech), takze zadas co se ma prenest a cosi hardwaroveho vyresi vetsinu problemu okolo a na konec z toho vypadne, jestli se to povedlo, nebo ne. Rika se tomu HardwareSerial (protoze vetsinu prace odre hardware).
Seriovy prenos jde ovsem udelat i tak, ze na nejakem pinu bude tvuj program ve spravnych intervalech nastavovat nuly a jednicky, takze to navenek bude vypadat stejne (nebo aspon podobne), nicmene to jde udelat se skoro kazdym pinem. Jen je to pro MCU naroznejsi, protoze to, co by delal kremik sam na pozadi, to musi pracne odsimulovat. Rika se tomu SoftwareSerial (protoze vetsinu prace odrze software a to MCU to musi pocitat a nestiha se teda (tolik) venovat jinym vecem).
Takze existuje knihovna, co ti usnadnuje praci s Hardvarovym Seriovym prenosem a existuje knihovna co si usnadnuje praci se Softwarovym prenosem.
Pro ten Softwarovy prenos potrebuje casovani, ktere ji vzdycky rekne, ze prave ted ma na tom pinu neco nejak nastavit (protoze uz ubehnul spravny cas), te casti MCU, co tohle umi delat se rika casovac. Casto ma MCU i dva nebo tri (nebo vic) a casto se ty casovace od sebe lisi tim, co vsechno umi.
Techto sluzeb casto vyuzivaji i jine knihovny pro jine funkce (treba aby ten MCU vedel, kolik casu ubehlo, nebo aby dokazal delat PWM/analogWrite, nebo aby cosi jineho) a pokud vic knihoven potrebuje pouzit stejy casovac, tak se o nej vetsinou nedohodnou a pak to ruzne nefunguje castecne, nebo vubec.
Knihovna pro Seriovy prenos prez HW port se casto jmenuje HardwareSerial (nebo jenom Serial), knihovna pro seriovy prenos se casto jmenuje SoftwareSerial.
Kvalita knihoven (a ukazkovych programu) pro Arduino je casto nevalna a casto takovy program ci knihovna vubec nepocita s tim, ze by tam mohlo bezet i neco jineho, tak si zabere vsechno pro sebe jak to autorovi prijde nejsnazsi a neresi koexistenci s dalsimi knihovnami (a periferiemi). Arduino vzniklo jako projekt, jak nechat blikat LEDkama (nebo bzucet bzucakem, nebo tak neco) lidi co neumi programovat a nechteji se to ucit a snazi se je co nejvic odstinit od toho, co ten hardware tam vlastne dela a co nejvic predstirat, ze ono to nejak samo (a kdyz jde o jdnoduchou vec, tak to celkem i funguje). Za tim u8celem vzali knihovnu Wiring (coz je teda velky soubor knihoven), ktera se stara o to, aby se slozity hardware dal jednoduse ovladat pomoci nekolika jednoduchych funkci a s minimem znalosti (a bylo z toho celkem mrzeni, protoze si ji vzali bez souhlasu jejiho autora a ani ho nezminili a pak s tim byly dlouhou dobu tahanice).
Ale jako vysledek se celkem povedl, s Arduinem si hraje spousta kreativcu, co by te s programovanim v C++ (a ucenim se C++) poslala do haje (a pritom vlastne nedelaji nic jineho, jen se jim to cudne zamlci a povi se jim jen nezbytne minimum) a LEDky jim blikaji, bzucaky bzuci a kreativni projekty, jak si dat do vlasu chumel LEDek a blikat a vypadat hrozne cool, aniz bych vedel co delam, rostou jak houby po desti.
Samozrejme s timhle pristupem jdou primitivni veci snadno, lehke vetsinou taky a tezsi prakticky vubec, ackoliv by ten MCU na to mel, jen kdyby mu nekdo napsal poradny program a ne jen slepenec nahodnych prikazu a nahodnych knihoven postahovany odkudsi z netu a vubec nepochopeny.
Jenze to by znamenalo se skutecne naucit programovat a to je moc prace a nedustojne kreativnich kreativcu, na ktere Arduino miri.
Ale tem MCU je natolik levny a vykonny (a diky temto kampanim i snadno dostupny), ze ho pouziva i rada lidi na mnohem pokrocilejsi veci, nez jen blikani LEDkou. A pak narazi na omezeni platformy Arduino a prechazi na jine programovaci platformy, ktere jim ten samy chip umozni ovladat podstatne lepe, za cenu toho, ze se o nem musi naucit podstatne vic.