Sunteți pe pagina 1din 256

PCLP II-Cursul 2

Sef.luc.dr.ing. Corneliu DRUGĂ


2.1. Tipuri de calculatoare
 Introducere
Calculatorul, numit și sistem de calcul, computer sau ordinator,
este o mașină de prelucrat date și informații conform unei liste de
instrucțiuni numită program. În zilele noastre calculatoarele se
construiesc în mare majoritate din componente electronice și de
aceea cuvântul „calculator” înseamnă de obicei un calculator
electronic.
Calculatoarele actuale nu sunt doar mașini de prelucrat informații,
ci și dispozitive care facilitează comunicația între doi sau mai mulți
utilizatori, de exemplu sub formă de numere, text, imagini, sunet sau
video sau chiar toate deodată (multimedia). [1]
2.1. Tipuri de calculatoare
 Scurt istoric
Cel mai vechi mecanism cunoscut care putea funcționa ca o mașină de
calculat se consideră a fi mecanismul din Antikythira, datând din anul
87 î.e.n. și folosit aparent pentru calcularea mișcărilor planetelor.
Tehnologia care a stat la baza acestui mecanism nu este cunoscută.
Odată cu revigorarea matematicii și a științelor în timpul Renașterii
europene au apărut o succesiune de dispozitive mecanice de calculat,
bazate pe principiul ceasornicului, de exemplu mașina inventată de
Blaise Pascal. Tehnica de stocare și citire a datelor pe cartele perforate
a apărut în secolul al XIX-lea. În același secol, Charles Babbage este cel
dintâi care proiectează o mașină de calcul complet programabilă
(1837), însă din păcate proiectul său nu va prinde roade, în parte din
cauza limitărilor tehnologice ale vremii. [1]
2.1. Tipuri de calculatoare
 Scurt istoric
În prima jumătate a sec.al XX-lea, nevoile de calcul ale comunității
științifice erau satisfăcute de calculatoare analoage, foarte
specializate și din ce în ce mai sofisticate. Perfecționarea electronicii
digitale (datorată lui Claude Shannon în anii 1930) a condus la
abandonarea calculatoarelor analogice în favoarea celor digitale, care
modelează problemele în numere (biți) în loc de semnale electrice sau
mecanice.[1]
Este greu de precizat care a fost primul calculator digital; realizări
notabile au fost: calculatorul Atanasoff-Berry, mașinile Z ale
germanului Konrad Zuse, care, deși foarte nepractic, a fost probabil
cel dintâi calculator universal, apoi calculatorul ENIAC cu o arhitectură
relativ inflexibilă care cerea modificări ale cablajelor la fiecare
reprogramare, precum și calculatorul secret britanic Colossus,
construit pe bază de lămpi și programabil electronic.[1]
2.1. Tipuri de calculatoare
 Scurt istoric
Echipa de proiectare a ENIAC-ului, recunoscând neajunsurile
acestuia, a elaborat o altă arhitectură, mult mai flexibilă, cunoscută
sub numele de arhitectura von Neumann sau „arhitectură cu program
memorat“. Aceasta stă la baza aproape tuturor mașinilor de calcul
actuale. Primul sistem construit pe arhitectura von Neumann a
fost EDSAC.
În anii 1960 lămpile (tuburile electronice) au fost înlocuite
de tranzistori, mult mai eficienți, mai mici, mai ieftini și mai fiabili,
ceea ce a dus la miniaturizarea și ieftinirea calculatoarelor. Din anii
1970, adoptarea circuitelor integrate a coborât și mai mult prețul și
dimensiunea calculatoarelor, permițând printre altele și
apariția calculatoarelor personale de acum.
2.1 Tipuri de calculatoare
 Arhitectura von Neumann
Deși design-ul și performanțele calculatoarelor s-au îmbunătățit în comparație
cu anii 1940, principiile arhitecturii von Neumann sunt în continuare la baza
aproape tuturor mașinilor de calcul contemporane.
Această arhitectură descrie un calculator cu patru module importante:
unitatea aritmetică-logică (UAL), unitatea de control (UC), memoria centrală
și dispozitivele de intrare/ieșire (I/E). Acestea sunt interconectate cu un
mănunchi de fire numit magistrală de date pe care circulă datele de calcul și
instrucțiunile.
Conceptual, memoria unui calculator poate fi văzută ca o mulțime de „celule“
numerotate. Fiecare celulă primește drept adresă un număr unic propriu; ele
pot înmagazina o cantitate mică, prestabilită de informație. Informația poate
fi ori o instrucțiune, ori date propriu-zise. Instrucțiunile spun calculatorului ce
să facă, iar datele sunt acele informații care trebuie prelucrate conform cu
instrucțiunile. În principiu orice celulă poate stoca (memora) atât instrucțiuni
cât și date. [1]
2.1 Tipuri de calculatoare
 Arhitectura von Neumann
2.1 Tipuri de calculatoare
 Arhitectura Harvard
Arhitectura Harvard este caracterizată prin stocarea separată a
instrucțiunilor și datelor. Numele acestei arhitecturi provine de la
sistemul de calcul Harvard Mark I, ce stoca instrucțiunile pe 24 biți pe
o bandă perforată, iar datele în contoare electromecanice ce permiteau
23 de cifre.
Din cauza lungimii cuvintelor, a tehnologiei de implementare și a
structurii memoriei de adresare diferite, în cadrul acestei arhitecturi nu
este necesar ca cele două tipuri de memorie (program si date) să
dispună de aceleași caracteristici. De regulă memoria pentru instrucțiuni
are o capacitate mai mare decăt cea de date. De exemplu,
microcontrolerele PIC au un cuvânt de date de 8 biți și o lungime a
instrucțiunii de 12, 14, 16 sau 32 biți.[2]
În funcție de necesarul de memorie, instrucțiunile pot fi stocate de
exemplu într-o memorie de tip ROM („read-only”), în timp ce datele se
află într-o memorie de tip „citire-scriere” RAM (Random Access Memory).
2.1 Tipuri de calculatoare
 Arhitectura Harvard
2.1 Tipuri de calculatoare
 Harvard vs von Neumann
În cazul arhitecturii Von Neumann pura, procesorul se afla fie in faza
FETCH și citește codul instrucțiunii, fie în faza EXECUTE și proceseaza
sau citește/scrie date din/în memorie.
Orice paralelism între cele doua faze este exclus deoarece memoria și
procesorul sunt conectate printr-o singura magistrala.
Performanța Procesorului este afectata deoarece timpul de procesare
este mult mai mic decât timpul de accesare a memoriei.
La ora actuala exista și memorii cu timp de acces mult mai mic decât
cele uzuale dar datorita consumului și prețului de cost nu pot fi utilizate
decât la capacitați foarte mici. De aceea în aplicațiile unde viteza este o
prioritate este utilizata arhitectura Harvard. [3]
2.1 Tipuri de calculatoare
 Harvard vs von Neumann
Arhitectura Harvard permite o extensie simpla pentru
prelucrari SIMD (Single Instruction, Multiple Data),
folosind o singura memorie de instrucțiuni și mai multe
memorii de date. [3]
Într-o arhitectura von Neumann instrucțiunile pot fi
prelucrate ca și orice alt operand (principiul P2) ceea ce
marește flexibilitatea utilizarii.
Pastrarea în aceeași memorie a datelor și codului executabil simplifica
implantarea unor viruși introduși sub forma unui pachet de date deși în
realitate este vorba de instrucțiuni executabile. Din această cauză au fost
create diferite arhitecturi care să combine avantajele celor două arhitecturi
pure prezentate anterior și în același timp să elimine neajunsurile specifice.
2.1 Tipuri de calculatoare
 Arhitectura Harvard modificată
Arhitectura Harvard modificată este orice variantă a arhitecturii Harvard care
permite accesarea conținutului memoriei de instrucțiuni ca și cum ar reprezenta
date.
Modificările pot fi realizate în diverse variante, scopul fiind de fiecare dată
înlăturarea barierei stricte între cod și date, fără a pierde totuși avantajul
accesului paralel la instrucțiuni și date specific arhitecturii Harvard pure.
Unele variante păstrează spațiile de adrese separate dar oferă instrucțiuni cod
mașină speciale pentru a accesa memoria de instrucțiuni ca și cum ar conține
date. Această abordare permite păstrarea unor
constante în memoria de instrucțiuni eliberând spațiu în memoria de
Date. [3]
De asemenea datele inițiale pot fi transferate direct din memoria de
instrucțiuni în memoria de date care la pornirea calculatorului are un
conținut aleator.
2.1 Tipuri de calculatoare
 Arhitectura Harvard modificată
Arhitectura Harvard modificată este orice variantă a arhitecturii Harvard care
permite accesarea conținutului memoriei de instrucțiuni ca și cum ar reprezenta
date.
Modificările pot fi realizate în diverse variante, scopul fiind de fiecare dată
înlăturarea barierei stricte între cod și date, fără a pierde totuși avantajul
accesului paralel la instrucțiuni și date specific arhitecturii Harvard pure.
Unele variante păstrează spațiile de adrese separate dar oferă instrucțiuni cod
mașină speciale pentru a accesa memoria de instrucțiuni ca și cum ar conține
date. Această abordare permite păstrarea unor
constante în memoria de instrucțiuni eliberând spațiu în memoria de
Date. [3]
De asemenea datele inițiale pot fi transferate direct din memoria de
instrucțiuni în memoria de date care la pornirea calculatorului are un
conținut aleator.
2.2 Tipuri de procesoare
 PROCESOARE CISC ȘI RISC
Se considera ca o instrucțiune este simpla daca realizeaza o operație
relativ simpla, care implica un numar mic de resurse și poate fi în
general executata pe perioada unui impuls de tact.
Exemplu: incrementarea unui registru al procesorului, citirea unei
date din memorie, scrierea unei date în memorie, operații de
adunare/scadere între conținutul a doua registre, instrucțiuni de salt sau
ramificare etc.
Se considera ca o instrucțiune este complexa daca nu poate fi
executata pe perioada unui impuls de tact, implica mai multe resuse
diferite (procesor+memorie) și poate fi înlocuita printr-o serie de
instrucțiuni simple.
 Examplu: operații aritmetice și logice cu un operand din memorie,
 apelul la subrutine etc. [3]
2.2 Tipuri de procesoare
 PROCESOARE CISC ȘI RISC

[3]
2.2 Tipuri de procesoare
 PROCESOARE CISC ȘI RISC

[3]
2.2 Tipuri de procesoare
 Dezavantajele procesoarelor CISC
Diferențe foarte mari în lungimea diferitelor instrucțiuni, ceea
ce impune procesorului operații logice suplimentare (numărarea
octețiilor pentru citirea unei instrucțiuni, execuția secvențială a unui
număr diferit de microinstrucțiuni pe instrucțiune etc.);
Diferențe foarte mari între timpii de execuție iar viteza de execuție
trebuie corelată cu timpul de execuție al celei mai complexe
instrucțiuni;
Realizarea unității microcodate ocupă mult spațiu pe pastila de
siliciu;
Studiile statistice au arătat că, în aplicații, instrucțiunile complexe sunt
mult mai puțin frecvente decât cele simple (sub 10%) dar ele
penalizează întregul sistem;
2.2 Tipuri de procesoare
 Avantajele procesoarelor RISC
 utilizarea a unui set cu mai puține instrucțiuni simple;
 eliminarea microcodului și implicit creșterea vitezei de lucru;
 posibilitatea executării unei instrucțiuni pe un singur ciclu de tact;
 Instrucțiuni cu aceiași lungime;
 accesarea memoriei principale prin doar două instrucțiuni simple LOAD și
STORE;
simplificarea modurilor de adresare a memoriei prin arhitectura internă;
 creșterea numărului de registre interne, ceea ce reduce numărul acceselor la
memoria principală;
 utilizarea unui format de instrucțiune care elimină aproape complet
decodificatorul de instrucțiuni, simplificând mult structura procesorului (la
procesoare pe 32 sau 64 biți);
 facilitarea paralelismuluiîn activitatea procesorului (procesoare pipeline);
 reducerea consumului de energie pe procesor.
2.2 Tipuri de procesoare
 Dezavantajele procesoarelor RISC
 Sunt necesare compilatoare complexe pentru optimizarea codului;
 Codul obținut prin compilare este mai mare.[3]
2.2 Tipuri de calculatoare
 Clasificarea calculatoarelor
 Prima clasificare a calculatoarelor poate fi făcută după familia de calculatoare
căreia ii apartine:
1. Mainframe-uri.
2. Minicalculatoare.
3 Microcalculatoare.
4.Supercalculatoare
Mainframe-urile sunt calculatoare mari şi foarte scumpe,specifice anilor 1960-
1970.Aceste calculatoare prezinta urmatoarele avantaje:
• Procesează date la vitze superioare,astfel încît pot rezolva sarcinile complxe mult
mai rapid.
• Drive-urile pot stoca mult mai multe date si manipula fişiere mai mari decît o pot
face sistemele mai mici.
• Sisemele de operare permit utilizarea simultană a acestora de către mai mulţi
utilizatori,prin intermediul utilizării tehnicii multiprogramării(utilizatorii sunt
conectati la calculator prin unitaăţi de tastatura şi ecran,numite terminale si unităţi
vizuale de afişare,VDU-visual dysplay units.[4]
2.2 Tipuri de calculatoare
 Clasificarea calculatoarelor
 1. Mainframe-uri.

.[4]
2.2 Tipuri de calculatoare
 Clasificarea calculatoarelor
 1. Minicalculatoare.
Minicalculatoarele sunt calculatoare cu vitze de 10 la a treia - 10 la a
cincea operaţii pe secunda,cu o lungime a cuvîntului mică(8,12,16 biţi).
În general sunt calculatoare ieftine şi sunt recomandate pentru
companiile mai mici.Un asemenea calculator este mai mic decît un
mainframe,capacitatea de stocare este mai mică şi nu permite atît de
mulţi utilizatori simultan ca un mainframe.Primul minicalculator cu
adevărat popular a fost PDP 8,lansat în 1965,şi produs de firma DEC-
Digital Eqipament Corporation.Alte exemple de
minicalculatoare:NOVA,DEC-VAX.familia d4 calculatoare româneşti
FELIX.Actualmente,liderul mondial in domeniul minicalculatoarelor este
IBM,cu peste 300.000 instalări,disponibil in mai multe variante(IBM AS
400 Aplication Sistem 400).[4]
2.2 Tipuri de calculatoare
 Clasificarea calculatoarelor
 2. Minicalculatoare.
2.2 Tipuri de calculatoare
 Clasificarea calculatoarelor
 3. Microcalculatoare.
Microcalculatoarele sunt calculatoare a căror unitate centrală este un
microprocesor. Primele microprocesoare au apărut în anii '70 dar s-au dezvoltat
mai ales în anii '80 şi continuă să evolueze; ele lucrează pe 8, 16 sau 32 de biţi
(cazul calculatoarelor folosite în prezent). Sunt sisteme interactive,
monoutilizator (la un moment dat sunt exploatate de un singur utilizator).
Microcalculatoarele s-au răspîndit curînd ca urmare a evoluţiei tehnologiei care a
redus foarte mult costurile lor de fabricaţie. De alftel, aceste costuri sunt în
continuă scădere iar performanţele evoluează tot mai mult.
Primele microcalculatoare au fost calculatoare personale familiale: Sinclair
Spectrum, Commodore sau cele românesti Prae, aMIC, HC, TIMS, Cobra. Aceste
calculatoare puteau lucra direct în limbajul Basic fiindcă memoria lor internă
cuprindea o parte care nu se ştergea în absenţa curentului electric si în care
utilizatorul nu putea scrie (ROM), unde era înregistrat din fabricaţie un
interpretor Basic (un program care traduce în limbaj masină şi execută fiecare
instructiune, o dată ce aceasta a fost scrisă). Cel mai uzual periferic al acestor
calculatoare era casetofonul, a cărui fiabilitate lăsa uneori de dorit.[4]
2.2 Tipuri de calculatoare
 Clasificarea calculatoarelor
 3. Microcalculatoare.

ICE Felix Fabrica de Calculatoare Bucureşti (ICEF) a fost înfiinţată în 1970 şi a început să
producă sisteme de calcul pe baza licenţelor achiziţionate de la compania franceză CII
(Franţa).
Pe calculatoarele Felix se lucrau toate statisticile şi se rulau toate programele
informatice din România înainte de 1989. ICE Felix a produs şi minicalculatoarele HC, un
tip de precursor al PC-urilor de azi.
2.2 Tipuri de calculatoare
 Clasificarea calculatoarelor
 3. Microcalculatoare.
Ulterior au apărut calculatoarele personale (PC) profesionale. Dintre primele
microcalculatoare profesionale românesti amintim: M18, M118, CUBZ, M216 (de
remarcat că acesta din urmă putea lucra atît sub sistemul de operare CP/M, cвt si
sub DOS); ulterior a apărut familia Felix PC. Pe plan mondial amintim calculatoarele
Apple MacIntosh, cu o interfaţă foarte prietenoasă cu utilizatorul, create mai ales
pentru neprofesionişti şi calculatoarele de tip IBM PC, care au înregistrat o evoluţie
tehnologică de-a dreptul spectaculoasă, bazată în principal pe evoluţia
microprocesoarelor (cele mai cunoscute sunt realizate de firma Intel). Creşterea
performantelor tehnice a fost îndeaproape urmată de evoluţia soft-ului, într-o
spirală din ce în ce mai dinamică.
Pentru calculatoarele personale cu performanţe ridicate, care sunt dotate cu cîte un
microprocesor mai puternic si un monitor de calitate оnaltă, cu facilităţi grafice
deosebite, se foloseste uzual denumirea destaţii de lucru (“workstations”). Cele mai
cunoscute staţii de lucru au fost create de firmele SUN, Hewlett-Packard şi DEC.
Staţiile de lucru se folosesc uzual pentru aplicaţii profesionale, dezvoltare de soft,
probleme care necesită facilităţi grafice performante, cum ar fi proiectarea
inginerească şi pot fi conectate în reţele de calculatoare.
2.2 Tipuri de calculatoare
 Clasificarea calculatoarelor
 3. Microcalculatoare.
Cel mai răspîndit sistem de operare al microcalculatoarelor este DOS, care are la
bază primul sistem de operare al microcalculatoarelor, CP/M, îmbunătăţit cu
principii din UNIX (cum ar fi structura arborescentă a directoarelor).
Datorită mediilor de programare, calculatoarele personale au devenit
instrumente de lucru mai convenabile pentru informaticieni. În plus, mai ales in
ultimul deceniu, produsele soft au evoluat foarte mult, dezvoltîndu-şi o interfaţă
din ce în ce mai accesibilă, care a atras tot mai mult şi utilizatorii
neprofesionişti. În acest sens, exemplul sistemelor Windows, devenite şi ele din
ce în ce mai performante, este foarte concludent. Astfel, calculatoarele
personale au devenit un instrument de prelucrare a informaţiei larg utilizat atît
pentru prelucrări de birotică, cît şi pentru aplicaţii profesionale. Adesea, pentru
crearea de sisteme de calcul cu performanţe mai ridicate si un cost relativ redus,
se optează pentru conectarea calculatoarelor personale în reţele de
calculatoare.[4]
2.2 Tipuri de calculatoare
 Clasificarea calculatoarelor
 4. Supercalculatoare.

Supercalculatoarele [PC-Web] au o memorie interna si o viteza de lucru foarte


mari: pot executa pînă la cîteva sute de milioane de instrucţiuni pe secunda, fiind
cele mai rapide tipuri de calculatoare. De obicei sunt utilizate pentru aplicaţii
specifice, care necesita calcule matematice complexe, mari consumatoare de
timp şi memorie, cum ar fi, de exemplu, grafică animată, prognozele geologice
sau meteorologice, probleme complexe de fizică pentru care se doreste aplicarea
unor algoritmi matematici riguroşi: dinamica fluidelor, fizica nucleară. Cel mai
cunoscut tip de supercalculator este CRAY [Cray].
Supercalculatoarele lucrează pe 32 si 64 de biţi şi au o arhitectura performantă,
neîngrădita de principiile clasice (de exemplu, sisteme multiprocesor – cu mai
multe unităţi centrale). În SUA există un institut specializat pe cercetări în
domeniul supercalculatoarelor, numit NCSA (National Center for Supercomputer
Applications).[4]
2.2 Tipuri de calculatoare
Clasificareacalculatoarelor
4. Supercalculatoare.
2.2 Tipuri de calculatoare
Clasificareacalculatoarelor
4. Supercalculatoare.
Cei de la TechRadar au alcatuit un clasament al celor
mai performante calculatoare din lume. Din tot acest
top 5, doua supercomputere sunt pe teritoriul SUA, doua
in China si unul in Japonia.
1. Tainhe - 1A. Supercomputerul chinezesc poate opera
la o viteza de 2,5 petaflopi (un petaflop are 1.000 de
trilioane operatii in virgula mobila pe secunda).
2.2 Tipuri de calculatoare
Clasificareacalculatoarelor
4. Supercalculatoare.
El are si cu ce sa realizeze aceste operatii, pentru ca
este dotat cu o memorie de 229.376 GB de RAM (de
peste 100.000 mai puternic decat un PC obisnuit) si are
si 186.368 de nuclee. Aparatul isi are "domiciulul" in
Centrul National de Supercomputing din Shenzhen, unde
este folosit de universitati si companii chinezesti.
2.2 Tipuri de calculatoare
Clasificareacalculatoarelor
4. Supercalculatoare.
2. Jaguar - calculatorul cu un sfert de milion de nuclee.
Cunoscut sub "numele de scena" de Jaguar, supercomputerul
Cray XT5-HE este localizat in Laboratorul National Oak Ridge,
din SUA. [5]
Cele peste 224.000 de nuclee s-au adunat sub aceeasi
"carapace" datorita cip-urilor Opteron, care au fiecare cate 6
nuclee. Performantele acestuia ajung la 1,76 petaflopi.
Supercalculatorul care se afla la Oak Ridge este cel mai rapid
calculator din lume care se ocupa de cercetare neclasificata.
2.2 Tipuri de calculatoare
Clasificareacalculatoarelor
4. Supercalculatoare.
3. Dawning Nebulae. Despre acesta nu se stiu prea
multe, doar ca atunci cand a fost lansat, in 2010, era cel
mai rapid computer din lume, cu o performanta de 1,27
petaflopi.
Acesta a ajuns pe locul 3 dupa ce Tianhe si Jaguar au
fost imbunatatite. Ca si fratele sau din China, Dawning
Nebulae este "cazat" tot la Centrul National de
Supercomputing din Shenzhen.[5]
2.2 Tipuri de calculatoare
Clasificareacalculatoarelor
4. Supercalculatoare.

4.Hopper - salvatorul planetei. Acest supercomputer "se


gandeste" la lucruri importante, precum schimbarea
climatului, energie curata, astrofizica si alte domenii de
aceasta categorie.
Centrul National de Cercetare Energetica din Departamentul
de Energie al SUA isi ofera serviciile pentru mai bine de 3.000
de cercetatori din domeniul climatic.[5]
2.2 Tipuri de calculatoare
 Clasificarea calculatoarelor
Pentru arhitectura calculatoarelor multiprocesor se foloseste conceptul de
arhitectura paralelă: mai multor procesoare sunt interconectate pentru realizarea
aceloraşi sarcini.
Procesoarele pot să realizeze în acelaşi timp secvenţe de operaţii independente,
pentru ca apoi rezultatele intermediare obtinute sa fie combinate corespunzător. În
mod obişnuit, există un procesor principal, numit master, care le coordoneaza pe
celelalte, dîndu-le spre execuţie sarcini independente din programul utilizatorului
sau punîndu-le în asteptare.
Sistemele proiectate ca arhitecturi paralele pot fi clasificate:
• după fluxurile de date si de instructiuni în sisteme cu: un flux de instrucţiuni şi un
flux de date, un flux de instrucţiuni şi mai multe fluxuri de date, mai multe fluxuri
de instrucţiuni şi un flux de date sau mai multe fluxuri de instrucţiuni şi mai multe
fluxuri de date
• după numărul de procesoare (granularitatea): zeci de procesoare autonome
conectate ("ferme") sau sute, pînă la zeci de mii de procesoare conectate în paralel
("cuburi")
• după modul de folosire a memoriei interne de către procesoare: partajate sau
proprii.
2.2 Tipuri de calculatoare
Clasificareacalculatoarelor
5. Calculatoare de proces.
Calculatoarele de proces controleaza procese tehnologice sau
diverse analize experimentale asistate de calculator,
prelucrînd informaţii numerice sau analogice despre procesul
studiat şi furnizînd ieşiri numerice sau analogice cu rol de
reglare a procesului. Pentru comunicarea între calculator şi
procesul despre care se culeg informaţii şi respectiv la care
trebuie sa ajunga iesirile generate de calculator există o
interfata capabila sa convertească informaţii analogice în
numerice şi invers.[4]
2.2 Tipuri de calculatoare
 Clasificarea
calculatoarelor
5. Calculatoare de proces.
Structura unui calculator de proces:
Aceste sisteme de calcul functioneaza în timp real, adică timpul
de raspuns al calculatorului este compatibil cu constantele de
timp ale procesului gestionat.
Un calculator de proces exercită funcţii de control si comandă /
reglare asupra procesului pe care îl conduce, în sensul
supravegherii lui şi a prelucrarii datelor de proces culese,
respectiv al schimbării stării acestuia în caz ca prin prelucrarea
informaţiilor culese se constata ca acest lucru este necesar.
Primul calculator comercializat a fost UNIVAC (UNIversal
Automatic Computer ) realizat pe structura calculatorului EDVAC,
în anul 1951. [4]
2.2 Tipuri de calculatoare
Clasificareacalculatoarelor
5. Calculatoare de proces.
2.2 Tipuri de calculatoare
Clasificarea calculatoarelor
Generaţia I (1946-1956) caracterizată prin :
 Hardware: relee, tuburi electronice ;
 Software: programe cablate, cod masină, limbaj de
asamblare ;
 Capacitate de memorie : 2 Kocteti ;
 Viteză de operare : 10.000 de operatii/sec. ;
 Calulatoare : ENIAC, UNIVAC, IBM ;
2.2 Tipuri de calculatoare
Clasificarea calculatoarelor
Generaţia a II–a (1957-1963) marcată de
apariţia tranzistorului :
 Hardware: tranzistoare, memorii cu ferite, cablaj
imprimat ;
 Software : limbaj de nivel înalt ( Algol, Fortan)
 Memorie : 32 Kocteţi ;
 Viteza : 200.000 de instrucţiuni/sec
 Calculatoare : IBM 7040, NCR501 ;[4]
2.2 Tipuri de calculatoare
 Clasificareacalculatoarelor
Generaţia a III–a (1964- 1981) caracterizată prin :
 Hardware : circuite integrate ( la început pe scara redusă, apoi pe
scara medie si largă ; scara de integrare se refera la numarul de
componente electronice pe unitatea de suprafată ), cablaje imprimate
multistrat , discuri magnetice, aparariţia primelor microprocesoare ;
 Software : limbaje de nivel foarte înalt, programare orientate pe
obiecte B.Pascal, programare structurate LISP, primele programe
pentru grafică şi baze de date .
 Memorie : 1÷2 Mocteţi ;
 Viteza : 5.000.000 de operaţii/sec ;
 Calculatoare : IBM 370 , FELIX
 Comunicatii : Primele comunicaţii prin satelit, transmisia de date prin
fibra optică
2.2 Tipuri de calculatoare
 Clasificarea calculatoarelor
Generaţia a IV-a (1982-1989) caracterizată prin:
 Hardware: circuite integrate pe scară foarte mare ( VLSI ) ,
sisteme distribuite de calcul, apar microprocesoarele de 16/32
biţi, primele elemente optice (discurile optice ) ;
 Software : Pachete de programe de largă utilizare, sisteme
expert , sisteme de operare, se perfecţioneaza limbajele de
programare orientate pe obiect, baze de date relationale ;
 Memorie : 8÷10 Mocteţi ;
 Viteza : 30 de milioane de instrucţiuni/sec ;
 Calculatoare : INDEPENDENT, CORAL, IBM (apar mai multe
versiuni)
2.2 Tipuri de calculatoare
 Clasificarea calculatoarelor
Generaţia a V-a ( 1991- 2002 ) în curs de dezvolatare:
 Hardware : circuite integrate pe scara ultralargă ULSI ( proiectare circuite
integrate 3D ), arhitecturi paralele, alte soluţii arhitecturale noi ( retele
neurale etc. ), proiectele galiu-arsen .
 Software : limbaje concurente,programare functională, prelucrare simbolică ,
baze de cunostiinţe, sisteme expert evoluate,programe de realitate virtuale,
acum apar şi sistemele de operare windows. Aceasta perioada este marcată de
apariţia internetului şi extinderea rapidă a acestei reţele mondiale.
 Memorie : de la zeci,sute de Mocteti pînă la Gocteţi ;
 Viteza : 1G de instructiuni /sec – 3 G de instrucţiuni/sec
 Comunicaţiile: au atins un nivel nemaîintîlnit.. emisiile radio de ordinul GHz,
reţele globale pe fibra optică , reţele de comunicare prin satelit.
 Calculatoare : o gama foarte largă de calculatoare .[4]
2.2 Tipuri de calculatoare
Bibliografie
[1] https://ro.wikipedia.org/wiki/Calculator,
[2] https://ro.wikipedia.org/wiki/Arhitectur%C4%83_Harvard
[3] Barbulescu Lucian: Structura si organizarea calculatoarelor: http://www.cs.ucv.ro/~luci/SOC/SOC_04.pdf
[4] http://clasificareacalculatoarelor.blogspot.com/
[5] http://www.ziare.com/internet-si-tehnologie/calculator/cele-mai-tari-supercomputere-din-lume-afla-ce-
stiu-sa-faca-1089127
[6] .
PCLP II-Cursul 1
Sef.luc.dr.ing. Corneliu DRUGĂ
1. Introducere
 Structura cursului
1. Introducere
 Bibliografie recomandată
1. Introducere
 Lucrările de laborator
1. Introducere
 Evaluare
2. Limbaje de programare

 2.1 Limbaje utilizate la programarea calculatoarelor


 2.2 Limbaje de nivel inferior (asamblare)
 2.3 Limbaje de nivel superior
 2.4 Limbaje orientate pe obiecte
2.1 Limbaje utilizate la programarea calculatoarelor
 Limbajul de programare este un limbaj formal de expresii și reguli
(sau tehnici) valide de formulare a instrucțiunilor pentru un
computer.
 Un limbaj de programare are definite un set de reguli sintactice și
semantice.[1]
 El dă posibilitatea programatorului să specifice în mod exact și
amănunțit acțiunile pe care trebuie să le execute calculatorul, în
ce ordine și cu ce date. Specificarea constă practic în
întocmirea/scrierea programelor necesare ("programare"). [1]
2.1 Limbaje utilizate la programarea calculatoarelor
Categorii de limbaje de programare
A. După paradigma programării
 limbaje ezoterice (ex. Brainfuck)
 limbaje procedurale ( ex. C, Java, Perl)
 limbaje funcționale (ex. ML, Haskell)
 limbaje pentru programarea logică (ex. Prolog, DATALOG)
 limbaje mixte: ex.LISP oferă un amestec de programare imperativă și
programare funcțională. [1]
2.1 Limbaje utilizate la programarea calculatoarelor
Categorii de limbaje de programare
B. După nivelul de abstractizare ( ex.ușurința cu care programele pot fi
citite și înțelese de către programatori):
 limbaje de generația întâi: limbajele cod-mașină (limbaje mașină)
 limbaje de generația a doua: limbajele de asamblare
 limbaje de generația a treia: limbaje de nivel înalt, cum ar fi C-ul (și
toate derivatele sale: C++, Java, C#), Pascal, Fortran ș.a.
 limbaje de generația a patra: limbajele neprocedurale, orientate pe
rezolvarea unei anumite clase de probleme: SQL ș.a.
 limbaje de generația a cincea: limbaje utilizate în domenii precum
logica fuzzy, inteligența artificială și rețelele
neuronale: Prolog, LISP ș.a. [1]
2.1 Limbaje utilizate la programarea calculatoarelor
Mediu de dezvoltare
 Un mediu de dezvoltare (engl. software development environment, sau
integrated development environment -IDE- "mediu integrat de dezvoltare)
este un set de programe care ajută programatorul în scrierea programelor.
Un mediu de dezvoltare combină toți pașii necesari creării unui program
(ex.: editarea codului sursă, compilarea, depanarea, testarea, generarea de
documentație) într-un singur soft, care, de regulă, oferă o interfață cu
utilizatorul grafică, prietenoasă.
 Principalele componente ale unui mediu de dezvoltare sunt editorul de cod
sursă și depanatorul. Mediile de dezvoltare apelează compilatoare, sau
interpretoare, care pot veni în același pachet cu mediul însuși, sau pot fi
instalate separat de către programator. De obicei un mediu de dezvoltare
este specific unui anumit limbaj de programare, însă există la ora actuală și
medii de dezvoltare care pot lucra cu mai multe limbaje, de ex. Eclipse sau
Microsoft Visual Studio.[2]
2.2 Limbaje de nivel inferior (asamblare)
 Un limbaj de asamblare este un limbaj de programare a
calculatoarelor care, în locul codului mașină, folosește o desemnare
simbolică a elementelor programului, relativ ușor de citit și interpretat
de către om. Exemplu: limbajul Assembler de la compania IBM.
 Caracteristici:
 Fiecare tip de procesor deține propriul său limbaj numit "codul
mașină", care reprezintă modul binar de codificare a instrucțiunilor și
datelor în memorie, în forma direct executabilă. Instrucțiunile pot fi în
general operații elementare (aritmetice, logice, transfer de date) sau
și operații de comandă și control a procesorului. Codul mașină este, ca
orice cod, format mai ales din cifre, fiind greu de reținut pentru un
programator.
2.2 Limbaje de nivel inferior (asamblare)
 Caracteristici:
 Pentru a putea fi interpretate de procesor, programul scris de om
("codul sursă", scris de exemplu în limbaj de asamblare) trebuie întâi
redus prin compilare (sau asamblare sau interpretare) la "codul obiect"
(în cod mașină), în acest scop fiind folosite "compilatoarele",
"asambloarele" sau "interpretorii".
 Programarea în limbaj de asamblare presupune o bună cunoaștere a
structurii procesorului și a componentelor sale adiacente. Ea face ca
utilizatorul să aibă acces la toate facilitățile unui calculator; dar
programul rezultat va putea funcționa numai pe acest tip de
calculator. Dacă programul trebuie portat (transpus) și pe alte tipuri de
calculatoare, atunci se preferă limbajele de programare de nivel mai
înalt.
2.2 Limbaje de nivel inferior (asamblare)
 Caracteristici:
 De obicei limbajele de asamblare oferă și posibilitatea alcătuirii de așa
numite macrouri, după necesitățile programului. Un macro este o
pseudo-instrucțiune (formal ea arată ca și o instrucțiune standard),
creată și definită chiar de către programator, care constă într-o
grupare de mai multe instrucțiuni obișnuite și care primește un nume
cu care poate apoi fi chemată în programul popriu-zis. Macrourile
măresc eficiența programării, deoarece prescurtează programarea și o
fac mai facilă. În cursul asamblării macrourile sunt înlocuite cu
gruparea de instrucțiuni obișnuite, conform definiției respective,
proces care se numește macrosubstituție. Din cauza facilităților de tip
macro limbajul "assembler" este numit uneori și "macro assembler".
2.2 Limbaje de nivel inferior (asamblare)
 Asamblarea
 Asamblarea este procesul prin care codul sursă, scris în limbaj de asamblare, este
transformat în cod mașină sau cod obiect. Codul sursă poate fi dispus pe mai multe
module. Procesul invers se numește "dezasamblare".
 Etapele asamblării:
 Mai întâi se generează o tabelă de simboluri, ce conține toate numele simbolice din
programul sursă, exceptând numele simbolice externe (din alte module), instrucțiuni și
directive de asamblare.
 Asamblorul contorizează instrucțiunile și datele, asociind numelor simbolice un
"deplasament" față de începutul programului, ca și cum programul ar începe de la adresa
0. În realitate, programul nu se încarcă în RAM la adresa 0, ci de la o adresă furnizată de
sistemul de operare, în spațiul de memorie disponibil; această adresă chiar poate de
fiecare dată să fie alta. Deci programul furnizat de asamblor trebuie de obicei să fie
"relocabil".
 Se obține programul obiect, traducând fiecare instrucțiune și înlocuind numele simbolice
cu valoarea sau adresa din tabela de simboluri.
 Programul executabil se obține în urma etapei de editare de legături (linkage edit), care
permite legarea mai multor module relocabile într-un singur fișier executabil, rezolvându-
se referințele încrucișate dintre ele.
2.3 Limbaje de nivel superior
 Limbajul C
 C este un limbaj de programare standardizat, fiind implementat pe
majoritatea platformelor de calcul existente azi, și este cel mai popular
limbaj de programare pentru scrierea de software de sistem. Este apreciat
pentru eficiența codului obiect generat de compilatoarele C, și pentru
portabilitatea sa. A fost dezvoltat la începutul anilor 1970 de Ken
Thompson și Dennis Ritchie, care aveau nevoie de un limbaj simplu și
portabil pentru scrierea nucleului sistemului de operare UNIX.
 Sintaxa limbajului C a stat la baza multor limbaje create ulterior și încă
populare azi: C++, Java, JavaScript, C#, D.[5]
 C este un limbaj de programare relativ minimalist ce operează în strânsă
legătură cu hardware-ul, fiind cel mai apropiat de limbajul de asamblare
față de majoritatea celorlalte limbaje de programare.
2.3 Limbaje de nivel superior
 Limbajul C are urmatoarele caracteristici importante:
 Este un limbaj de bază simplu, cu importante funcționalități cum ar fi funcțiile
matematice sau cele de manipulare ale fișierelor;
 Este focalizat pe paradigma programării procedurale, care facilitează
programarea într-un mod structurat;
 Utilizează un set simplu de tipuri de date ce împiedică multe operații
neintenționate
 Folosește un limbaj preprocesor (preprocesorul C), pentru sarcini cum ar fi
definirea de macrouri și includerea mai multor fișiere sursă
 Permite accesarea la nivel scăzut a memoriei calculatorului prin utilizarea
pointerilor
 Permite folosirea parametrilor, care sunt comunicați funcțiilor prin valoare și nu
prin referință
2.3 Limbaje de nivel superior
 Limbajul C are urmatoarele caracteristici importante:
 Pointeri la funcții, ce permit forme rudimentare de închidere și polimorfism
 Declararea variabilelor
 Structuri de date sau tipuri de date agregate, definite de utilizator prin (struct),
ce permit ca date înrudite să fie combinate și manipulate ca un întreg
Ce lipsește limbajului C:
 Un sistem automat de colectare a reziduurilor (de memorie) (eng. Garbage
collection)
 Clasele și obiectele (programarea orientată pe obiecte)
 Un sistem avansat de tipuri de date
 Programarea generică
 Supraîncărcarea
 Procesarea listelor
2.3 Limbaje de nivel superior
Limbajul C++
 C++ este un limbaj de programare general, compilat. Este un limbaj multi-
paradigmă, cu verificarea statică a tipului variabilelor ce suportă
programare procedurală, abstractizare a datelor, programare orientată pe
obiecte. În anii 1990, C++ a devenit unul dintre cele mai populare limbaje
de programare comerciale, rămânând până azi.[5]

 Bjarne Stroustrup de la Bell Labs a dezvoltat C++ (inițial denumit C cu


clase) în anii 1980, ca o serie de îmbunătățiri ale limbajului C. Acestea au
început cu adăugarea noțiunii de clase, apoi de funcții virtuale,
suprascrierea operatorilor, moștenire multiplă, șabloane (eng. template) și
excepții. Limbajul de programare C++ a fost standardizat în 1998 ca și ISO
14882:1998, versiunea curentă fiind din 2003, ISO 14882:2003. Următoarea
versiune standard, cunoscută informal ca C++0x, este în lucru.[5]
2.3 Limbaje de nivel superior
Limbajul C++
 C++ este un limbaj de programare general, compilat. Este un limbaj multi-
paradigmă, cu verificarea statică a tipului variabilelor ce suportă
programare procedurală, abstractizare a datelor, programare orientată pe
obiecte. În anii 1990, C++ a devenit unul dintre cele mai populare limbaje
de programare comerciale, rămânând până azi.[6]

 Bjarne Stroustrup de la Bell Labs a dezvoltat C++ (inițial denumit C cu


clase) în anii 1980, ca o serie de îmbunătățiri ale limbajului C. Acestea au
început cu adăugarea noțiunii de clase, apoi de funcții virtuale,
suprascrierea operatorilor, moștenire multiplă, șabloane (eng. template) și
excepții. Limbajul de programare C++ a fost standardizat în 1998 ca și ISO
14882:1998, versiunea curentă fiind din 2003, ISO 14882:2003. Următoarea
versiune standard, cunoscută informal ca C++0x, este în lucru.
2.3 Limbaje de nivel superior
Limbajul C++
 În 1982, numele limbajului a fost schimbat de la C cu clase la C++. Au fost
adaugate noi facilități, inclusiv funcții virtuale, supraîncărcarea operatorilor și a
funcțiilor, referințe, constante, alocare dinamică, un control al tipului mai
puternic și noua variantă de comentariu pe un singur rând (liniile care încep cu
caracterele '//').
 În 1985 a fost lansată prima ediție a cărții "The C++ Programming Language"
(Limbajul de programare C++), oferind informații importante despre limbaj, care
încă nu era un standard oficial. În 1989 a fost lansată versiunea 2.0 a C++. Au
apărut acum moștenirea multiplă, clase abstracte, funcții statice, funcții
constante și membri protected. În 1990 o altă carte a fost lansată, oferind suport
pentru standarde viitoare. Ultimele adăugări includeau template-uri, excepții,
spații de nume (namespace-uri) și tipul boolean.
 O dată cu evoluția limbajului C++, a evoluat și o bibliotecă standard. Prima
adăugire a fost biblioteca de intrări/ieșiri (I/O stream), care oferea facilități
pentru a înlocui funcțiile tradiționale C cum ar fi printf și scanf. Mai târziu,
printre cele mai semnificative adăugari la biblioteca standard a fost STL
(Standard Template Library) (Biblioteca de formate standard). După ani de lucru,
un comitet ANSI-ISO a standardizat C++ în 1998 (ISO/IEC 14882:1998).[6]
2.3 Limbaje de nivel superior
Limbajul C#
 C# este un limbaj de programare orientat-obiect conceput
de Microsoft la sfârșitul anilor 90. A fost conceput ca un
concurent pentru limbajul Java. Ca și acesta, C# este un derivat
al limbajului de programare C++.[6] C# simplifică mult scrierea de
programe pentru sistemul de operare Windows.
 Totodata, este un limbaj de programare nou conceput pentru .NET si este
semnificativ in doua privinte:
 Este proiectat si directionat in mod specific pentru utilizarea cu Microsoft
.NET Framework (o bogata platforma pentru dezvoltarea ,implementarea si
executarea aplicatiilor distribuite).
 Este un limbaj bazat pe metodologia moderna de proiectare orientata spre
obiect si atunci cand a fost proiectata, Microsoft a invatat din experienta
tuturor celorlalte limbaje similare care au fost in jur, de vreme ce
principiile orientate spre obiecte au ajuns la proeminenta acum 20 de ani.
2.3 Limbaje de nivel superior
Limbajul C#
C# este o limba in sine. Desi este proiectat sa genereze coduri care vizeaza .NET, nu
face parte din acesta. Unele caracteristici sunt acceptate de .NET, dar nu de C#, si
unele caracteristici ale limbajului C# nu sunt acceptate de .NET sau de MSIL (spre
exemplu , unele cazuri de supraincarcare a operatorilor). Cu toate acestea,
deoarece limbajul C# este destinat utilizarii cu .NET, trebuie sa intelegeti acest
Framework, daca doriti sa dezvoltati in mod eficient aplicatiile C#.
 C# a apărut ca o versiune îmbunătăţită a limbajele de programare Java, C, şi C++.
Cel mai mare avantaj al programării C#, în comparație cu limbajele din care a
derivat, este utilizarea mult mai uşoară. Ca să scrieţi un program C# nu aveți
nevoie decât de un editor de text simplu ca Notepad şi programul .NET
Framework instalat pe calculatorul vostru. Acest program este o mare bibliotecă
de instrumente pe care o puteţi folosi cu ajutorul a peste 20 de limbaje de
programare.
 Având în vedere că .NET Framework este potrivit pentru numeroase sisteme de
operare, scrierea codurilor în C# vă permite să creaţi software pentru mediile
Windows, Linux, iOS, OSX, Android şi BSD.
2.3 Limbaje de nivel superior
 Limbajul Java
 Java este un limbaj de programare orientat-obiect, puternic tipizat,
conceput de către James Gosling la Sun Microsystems (acum filială Oracle)
la începutul anilor,’90 fiind lansat în 1995.
 Limbajul împrumută o mare parte din sintaxă de la C și C++, dar are un
model al obiectelor mai simplu și prezintă mai puține facilități de nivel jos.
Un program Java compilat, corect scris, poate fi rulat fără modificări pe
orice platformă care e instalată o mașină virtuală Java (eng. Java Virtual
Machine, prescurtat JVM). Acest nivel de portabilitate (inexistent pentru
limbaje mai vechi cum ar fi C) este posibil deoarece sursele Java sunt
compilate într-un format standard numit cod de octeți ( byte-code) care
este intermediar între codul mașină (dependent de tipul calculatorului) și
codul sursă.
2.3 Limbaje de nivel superior
Limbajul Java
 Mașina virtuală Java este mediul în care se execută programele Java. În
prezent, există mai mulți furnizori de JVM, printre care Oracle, IBM, Bea,
FSF. În 2006, Sun a anunțat că face disponibilă varianta sa de JVM ca open-
source.
Există 4 platforme Java furnizate de Oracle:
 Java Card - pentru smartcard-uri (carduri cu cip);
 Java Platform, Micro Edition (Java ME) — pentru hardware cu resurse
limitate, gen PDA sau telefoane mobile;
 Java Platform, Standard Edition (Java SE) — pentru sisteme gen
workstation, este ceea ce se găsește pe PC-uri;
 Java Platform, Enterprise Edition (Java EE) — pentru sisteme de calcul mari
(ex. servere ), eventual distribuite.
2.4 Limbaje orientate pe obiecte
 Programarea orientată pe obiecte (POO, uneori și Programarea orientată obiect, în
limba engleză, Object Oriented Programming (OOP)) este o paradigmă de
programare, axată pe ideea încapsulării, adică grupării datelor și codului care
operează asupra lor, într-o singură structură. Un alt concept important asociat
programării orientate obiect este polimorfismul, care permite abstractizări ce permit
o descriere conceptuală mai simplă a soluției.
 Programarea orientată pe obiect (Programare Orientată Obiectual) este unul din cei
mai importanți pași făcuți în evoluția limbajelor de programare spre o mai puternică
abstractizare în implementarea programelor. Ea a apărut din necesitatea exprimării
problemei într-un mod mai simplu, pentru a putea fi înțeleasă de cât mai mulți
programatori. Astfel unitățile care alcătuiesc un program se apropie mai mult de
modul nostru de a gândi decât modul de lucru al calculatorului. Până la apariția
programării orientate pe obiect, programele erau implementate în limbaje de
programare procedurale (C, Pascal) sau în limbaje care nici măcar nu ofereau o
modalitate de grupare a instrucțiunilor în unități logice (funcții, proceduri) cum este
cazul limbajului de asamblare (asembler). Altfel spus o problemă preluată din natură
trebuia fragmentată în repetate rânduri astfel încât să se identifice elementele
distincte, implementabile într-un limbaj de programare.
2.4 Limbaje orientate pe obiecte
 O mare problemă a programării procedurale era separarea datelor de unitățile
care prelucrau datele (subrutinele), ceea ce făcea foarte dificilă extinderea și
întreținerea unui program. Astfel s-a pus problema ca aceste
două entități (date și subrutine) să fie grupate într-un anumit mod, astfel încât
subrutinele să "știe" în permanență ce date prelucrează și, mai mult decât
atât, ele să formeze un modul, adică o unitate care separă implementarea de
interfață, ceea ce implică posibilitatea refolosirii codului. A apărut astfel
conceptul de clasă. Clasa realizează, în speță, ceea ce am văzut mai înainte:
grupează datele și unitățile de prelucrare a acestora într-un modul, unindu-le
astfel într-o entitate mult mai naturală.
 Deși tehnica se numește "Programare Orientată Obiectual", conceptul de bază
al ei este Clasa. Clasa, pe lângă faptul că abstractizează foarte mult
analiza/sinteza problemei, are proprietatea de generalitate, ea desemnând o
mulțime de obiecte care împart o serie de proprietăți.
2.4 Limbaje orientate pe obiecte
 De exemplu: Clasa "floare" desemnează toate plantele care au flori, precum clasa
"Fruct" desemnează toate obiectele pe care noi le identificam ca fiind fructe.
Bineînțeles, în implementarea efectivă a programului nu se lucrează cu entități
abstracte, precum clasele ci se lucrează cu obiecte, care sunt "instanțieri" ale claselor.
Altfel spus, plecând de la exemplul de mai sus, dacă se construiește un program care
să lucreze cu fructe, el nu va prelucra entitatea "fruct" ci va lucra cu entități concrete
ale clasei "fruct", adică "măr", "pară", "portocală", etc.
 Apare însă următoarea problemă: "cum se trece de la o structură generală la una
particulară, mai precis ce înseamnă efectiv procesul de instanțiere?". Instanțierea
(trecerea de la clasă la obiect) înseamnă atribuirea unor proprietăți specifice clasei,
astfel încât aceasta să indice un obiect anume, care se diferențiază de toate celelalte
obiecte din clasă printr-o serie de atribute. Dacă vom considera ca "fruct_exotic" care
desemnează clasa tuturor fructelor exotice ce conține proprietatea "culoare" atunci
atribuind acesteia valoarea "galben" noi vom crea o nouă mulțime (clasa fructelor
exotice care au culoarea galbenă) care este o subclasă a clasei "fruct_exotic", deci
realizăm astfel o particularizare. Mai mult decât atât, dacă vom adăuga noi și noi
atribute vom individualiza clasa astfel încât să ajungem la un caz concret, care este
Obiectul.
2.4 Limbaje orientate pe obiecte
Principii de baza:
 Abstractizarea – Este posibilitatea ca un program să separe unele aspecte ale informației pe care o
manipulează, adică posibilitatea de a se concentra asupra esențialului. Fiecare obiect în sistem are
rolul unui “actor” abstract, care poate executa acțiuni, își poate modifica și comunica starea și
poate comunica cu alte obiecte din sistem fără a dezvălui cum au fost implementate acele
facilitați.
 Încapsularea – numită și ascunderea de informații: Asigură faptul că obiectele nu pot schimba
starea internă a altor obiecte în mod direct (ci doar prin metode puse la dispoziție de obiectul
respectiv); doar metodele proprii ale obiectului pot accesa starea acestuia. Fiecare tip de obiect
expune o interfață pentru celelalte obiecte care specifică modul cum acele obiecte pot interacționa
cu el.
 Polimorfismul – Este abilitatea de a procesa obiectele în mod diferit, în funcție de tipul sau de
clasa lor. Mai exact, este abilitatea de a redefini metode pentru clasele derivate. De exemplu
pentru o clasă Figura putem defini o metodă arie. Dacă Cerc, Dreptunghi, etc. vor extinde clasa
Figura, acestea pot redefini metoda arie.
 Moștenirea – Organizează și facilitează polimorfismul și încapsularea, permițând definirea și
crearea unor clase specializate plecând de la clase (generale) deja definite - acestea pot împărtăși
(și extinde) comportamentul lor, fără a fi nevoie de a-l redefini. Aceasta se face de obicei prin
gruparea obiectelor în clase și prin definirea de clase ca extinderi ale unor clase existente.
Conceptul de moștenire permite construirea unor clase noi, care păstrează caracteristicile și
comportarea, deci datele și funcțiile membru, de la una sau mai multe clase definite anterior,
numite clase de bază, fiind posibilă redefinirea sau adăugarea unor date și funcții noi.
2.4 Limbaje orientate pe obiecte
Concluzii:
 Ideea POO (Programare Orientată Obiectual) este de a crea programele ca o
colecție de obiecte, unități individuale de cod care interacționează unele
cu altele, în loc de simple liste de instrucțiuni sau de apeluri de proceduri
(vezi și programare procedurală).

 Obiectele POO sunt de obicei reprezentări ale obiectelor din viața reală
(domeniul problemei), astfel încât programele realizate prin tehnica POO
sunt mai ușor de înțeles, de depanat și de extins decât programele
procedurale. Aceasta este adevărată mai ales în cazul proiectelor software
complexe și de dimensiuni mari, care se gestionează făcând apel la
ingineria programării.
2.4 Limbaje orientate pe obiecte
Limbajele care folosesc principii de POO).
 C++ – Limbaj perfecte pentru a construi interfete grafice (GUI) si pentru a construi
jocuri de calculator folosind Unity.
 JavaScript – JavaScript (adesea numit si JS) este un limbaj de programare orientat
obiect (POO) folosit pentru introducerea de functionalitati in pagini web. JavaScript
introduce un element de dinamica si varietate intr-o pagina web care (in momentul
incarcarii) este rulata direct de catre browser.
 PHP – Realizarea Backend-ului pentru o pagina web interactiva, limbaj intalnit si in
inlocuirea Shell Script-ului pe Linux. Doua dintre framework-urile populare pentru
acest limbaj sunt Laravel si Symfony, de asemenea PHP-ul este adesea folosit
impreauna cu SQL-ul, limbaj folosit in programarea bazelor de date.
 Java / C# / Swift – Limbaje destinate aplicatiilor mobile pentru Android, Microsoft
sau Apple.
 Python, Perl, Ruby – Aceste trei limbaje, sunt catalogate ca limbaje de scripting,
deoarece sunt cel mai des intalnite in automatizari. Ultimul dintre acestea, Ruby,
poate fi folosit ca inlocuitor al PHP-ului, prin framework-ul Ruby on Rails, destinat
Web Developing-ului
Bibliografie
 [1] https://ro.wikipedia.org/wiki/Limbaj_de_programare,
 [2] https://ro.wikipedia.org/wiki/Mediu_de_dezvoltare
 [3] https://ro.wikipedia.org/wiki/Limbaje_de_asamblare
 [4]
 [5] https://ro.wikipedia.org/wiki/C%2B%2B
 [6] Doina Logofătu: Algoritmi fundamentali in C++. Aplicații, Ed. 1, Editura Polirom, Iași, 2007,
ISBN 9734600939.
 [7] Schach, Stephen (2006). Object-Oriented and Classical Software Engineering, Seventh
Edition. McGraw-Hill.
 [8] Abadi, Martin; Luca Cardelli (1998). A Theory of Objects. Springer-Verlag.
 [9] Abelson, Harold; Gerald Jay Sussman, (1997). Structure and Interpretation of Computer
Programs. The MIT Press.
 [10] Armstrong, Deborah J. (February 2006). "The Quarks of Object-Oriented Development".
Communications of the ACM 49 (2): 123–128. doi:10.1145/1113034.1113040. ISSN 0001-0782.
Retrieved 2006-08-08.
PROGRAMAREA PLATFORMELOR
ARDUINO
CURSUL 7
S.L.DR.ING. CORNELIUS DRUGA
7.1. COMUNICAREA USART
• [1]
7.1. COMUNICAREA SERIALĂ (RX/TX)
7.1. COMUNICAREA SERIALĂ (RX/TX)- USART
7.1. COMUNICAREA SERIALĂ (RX/TX)- USART
7.1. COMUNICAREA SERIALĂ (RX/TX)- USART
7.1. COMUNICAREA SERIALĂ (RX/TX)- USART
7.1. COMUNICAREA SERIALĂ (RX/TX)- USART
7.1. COMUNICAREA SERIALĂ (RX/TX)- USART
7.2. COMUNICAREA PRIN SPI (SERIAL PERIPHERAL INTERFACE
7.2. COMUNICAREA PRIN SPI (SERIAL PERIPHERAL INTERFACE
7.2. COMUNICAREA PRIN SPI (SERIAL PERIPHERAL INTERFACE
7.2. COMUNICAREA PRIN SPI (SERIAL PERIPHERAL INTERFACE
7.2. COMUNICAREA PRIN SPI (SERIAL PERIPHERAL INTERFACE
7.2. COMUNICAREA PRIN SPI (SERIAL PERIPHERAL INTERFACE
7.2. COMUNICAREA PRIN SPI (SERIAL PERIPHERAL INTERFACE
7.2. COMUNICAREA PRIN SPI (SERIAL PERIPHERAL INTERFACE
7.2. COMUNICAREA PRIN SPI (SERIAL PERIPHERAL INTERFACE
7.2. COMUNICAREA PRIN SPI (SERIAL PERIPHERAL INTERFACE
7.3. EMITĂTOR ȘI RECEPTOR RADIO PE 433MHZ
Modulul format din receptor și emitator RF poate fi utilizat impreuna cu plăci de dezvoltare
Arduino sau alte tipuri de microcontrollere pentru transmisia datelor la distanta. Este util în
proiectele inovative ale tale in care doresti sa transmiti diferite date dintr-o camera in alta
sau chiar la distanțe mai mari.
7.3. EMITĂTOR ȘI RECEPTOR RADIO PE 433MHZ
7.3. EMITĂTOR ȘI RECEPTOR RADIO PE 433MHZ
7.3. EMITĂTOR ȘI RECEPTOR RADIO PE 433MHZ
7.3. EMITĂTOR ȘI RECEPTOR RADIO PE 433MHZ
7.4. COMUNICARE ÎN IR
7.4. COMUNICARE ÎN IR
7.4. COMUNICARE ÎN IR
7.4. COMUNICARE ÎN IR
7.4. COMUNICARE ÎN IR
7.4. COMUNICARE ÎN IR
7.4. COMUNICARE ÎN IR
7.5. COMUNICARE ETHERNET
7.5. COMUNICARE ETHERNET
7.5. COMUNICARE ETHERNET
7.5. COMUNICARE ETHERNET
7.5. COMUNICARE ETHERNET
7.5. COMUNICARE ETHERNET
7.5. COMUNICARE ETHERNET
7.5. COMUNICARE ETHERNET
7.5. COMUNICARE ETHERNET
7.5. COMUNICARE ETHERNET
7.5. COMUNICARE ETHERNET
7.5. COMUNICARE ETHERNET
7.5. COMUNICARE ETHERNET
7.5. COMUNICARE ETHERNET
7.5. COMUNICARE ETHERNET
7.6. COMUNICARE I2C
7.6. COMUNICARE I2C
7.6. COMUNICARE I2C
7.6. COMUNICARE I2C
7.6. COMUNICARE I2C
2.3.BIBIOGRAFIE
1. Sebastian Radu Sabou –Indrumator laborator microcontrolere ARDUINO, Ed.U.T. PRESS,
Cluj-Napoca, 2018, pp.9-20.
[2] https://www.arduino.cc/en/Tutorial/DigitalPins
[3] Varlan Cosmin: Cursul 8- Comunicare, Facultatea de Informatica – Univ. “Al. I. Cuza” Iasi,
2016
[4] https://www.arduino.cc/en/Reference/SPI
[5] https://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus#Mode_Numbers
[6] https://blog.adafruit.com/2012/08/17/raspberry-pi-arduino-spi-piday-raspberrypi-
raspberry_pi/
[7] http://electronics.stackexchange.com/questions/42197/making-two-arduinos-talk-over-
spi
[8] http://forum.arduino.cc/index.php?topic=222327.0
[9] http://labalec.fr/erwan/?m=201403&paged=2
[10] http://arduinobasics.blogspot.ro/2014/06/433-mhz-rf-module-with-arduino-
tutorial.html
[11] http://arduinobasics.blogspot.ro/2014/06/433-mhz-rf-module-with-arduino-
tutorial.html
PROGRAMAREA PLATFORMELOR
ARDUINO
CURSUL 6
S.L.DR.ING. CORNELIUS DRUGA
6.1.INTRĂRI- IEȘIRI DIGITALE
• Pinii microcontrolerului Atmega328 pot fi configurați ca și intrări sau ieșiri digitale, adică cu
nivele logice. Chiar si pinii analogici pot fi utilizati ca și intrări sau ieșiri cu nivele logice.
• Înainte de a fi utilizati este necesară configurarea pinilor ca fiind de intrare sau de ieșire.
În cazul platformei Arduino, implicit pinii digitali sunt configurați ca fiind de intrare, adică
sunt în starea de înaltă impedanță. Dacă se utilizează pinii astfel configurați si nu au
conectate alte componente care să le stabilească un nivel logic, există posibilitatea ca
nivelele logice ale pinilor să fie influențate de către mediul ambiant si să genereze
modificari ale nivelelor logice „citite”, rezistenta lor echivalenta de intrare fiind de ordinul
100 Mohm. Prin urmare este necesara stabilirea unui nivel logic stabil prinintermediul unor
componente electronice externe, pentru a fi siguri ca nu se obtin valori influentate de catre
mediu. Dacă pinii respectivi nu sunt utilizati în cadrul programului ca fiind intrări atunci nu e
necesară conectarea altor componente la acei pini. [1]
6.1.INTRĂRI- IEȘIRI DIGITALE
• Atunci când sunt utilizati ca si pini de intrare este recomandata utilizarea unor rezistente
externe, de valori de ordinul 10k, conectate la VCC sau la GND („pull -up” sau „pull-down”).
• Microcontrolerul Atmega328 din componenta platformei Arduino Uno are integrate rezistente
electrice de „pull -up”, care pot fi activate utilizând parametrul INPUT_PULLUP în cadrul
instructiunii de setare a tipului de pin (de intrare sau de iesire). Activarea acestor rezistente
interne de pull-up are ca efect, oarecum, inversarea comportamentului pinilor de intrare, în
sensul în care daca nu este active senzorul de la intrare (de exemplu un comutator) se va citi
valoarea HIGH iar când senzorul este activat se va citi valoarea LOW. Uzual valoarea
rezistentelor interne de pull-up este de ordinul 20k-50k dar difera si functie de tipul
microcontrolerului. Conectând un led la GND si la un pin digital (având activa rezistenta de pull
-up) este foarte probabil ca LED-ul sa lumineze suficient cât sa fie vizibil. În cazul în care se
activeaza rezistentele de pull-up, senzorii sau comutatoarele care se conecteaza la intrare

trebui sa fie active (sa comute la activarea lor) pe starea logica de LOW. [1]
6.1.INTRĂRI- IEȘIRI DIGITALE
• Utilizarea pinilor ca ieșire digitală implică utilizarea parametrului OUTPUT în instructiunea
pinMode(). Pinul configurat ca fiind de iesire poate furniza curent de maxim 40mA, fie în starea
LOW fie in starea HIGH. Ca urmare pot alimenta sau comanda diverse circuite electrice pentru
care este suficienta valoarea maximă suportata de circuitul intern al pinului respectiv. [1]
• Uzual se pot comanda direct LED-uri (cu ajutorul unei rezistente de limitare a curentului) dar nu
se pot comanda direct motoare care necesită curenți mai mari pentru functionarea lor.
• Unul din cele mai simple programe utilizate pentru initierea utilizarii mediului de
• programare Arduino IDE precum si pentru învatarea programarii platformei Arduino Uno este
programul “Blink”, are ca efect comanda unui LED realizând efectul de clipire.
6.1.INTRĂRI- IEȘIRI DIGITALE

Este utilizată o diodă LED care este gata lipită pe


cablajul platformei Arduino
Uno, fiind conectată la pinul D13, prin intermediul
unei rezistenţe de 220 ohmi. Un
nivel logic de 5V la pinul D13 are ca efect
aprinderea LED-ului.
Programul utilizat se găseşte în Arduino IDE la
File/Examples/01.Basics/Blink
6.2. MODULAȚIA ÎN DURATA A IMPULSURILOR - PWM
• Termenul de PWM vine din limba engleza de la Pulse Witdh Modulation si inseamna ca
avem un semnal modulat în lăţimea impulsurilor de comandă.
• Factorul de umplere al unui semnal PWM se calculează cu relaţia D(fu)=Ti/T, unde Ti este
durata impulsului şi T perioada semnalului.
• Fiecare procent al unui astfel de semnal reprezintă o valoare importantă în aplicaţia pe
care o dorim să o implementăm cu un astfel de semnal spre deosebire de semnalul TTL care
poate sa aiba doar două stări (high, low). Un modulator PWM are rolul de a comanda un
comutator şi este o parte importantă şi complexă a unui regulator de tensiune în comuţatie.
• Principiul de realizare a unui astfel de modulator PWM constă în alcătuirea unei scheme
electronice care să conţină: generator în dinte de fierastrău, amplificator de eroare,
comparator [1, 2]
6.2. MODULAȚIA ÎN DURATA A IMPULSURILOR - PWM
• O diagramă simplificată pentru realizarea semnalului PWM este prezentată în figura de mai
jos.

Acest modulator PWM constă dintr-un generator în dinte de fierastrău (saw-tooth generator),
un amplificator de eroare şi un comparator.
Frecvenţa generatorului este setata de valoarea constantei de timp RC.
Amplificatorul de eroare compară tensiunea de referinţă şi semnalul de reacţie.
Semnalul de reacţie este obtinutţ de obicei, printr-o divizare a tensiunii de ieşire.
6.2. MODULAȚIA ÎN DURATA A IMPULSURILOR - PWM
• Tensiunea de la iesirea amplificatorului de eroare este comparata cu valoarea semnalului in
dinte de fierastrau. Daca iesirea acestuia este mai mare decat valoarea dintelui de fierastrau
atunci la iesirea comparatorului vom avea ‘1’ logic adica Ton.
• Daca iesirea amplificatorului este mai mica decat valoarea dintelui de fierastrau atunci la
iesirea comparatorului vom avea ‘0’ logic adica Toff. Formele de unda ale circuitului sunt
prezentate in figura de mai jos
6.2. MODULAȚIA ÎN DURATA A IMPULSURILOR - PWM
• Daca tensiunea de iesire tinde să crească, atunci tensiunea de reactie va creste peste
tensiunea de referință, astfel tensiunea de ieșire a amplificatorului de eroare va scădea
rezultand astfel o durată mai mică pentru care la iesirea comparatorului vom avea acel ‘1’
logic. Daca tensiunea de iesire scade atunci la iesire comparatorului vom avea o durata mai
mare de ‘1’ logic. Aceasta modificare a latimi impulsurilor in functie de tensiunea de iesire este
datorată factorului de umplere (duty-cicle).
• În cazul în care tensiunea de ieşire este constantă aceasta este menţinută de reacţia negativa la
valoarea dorita.
• PWM (Pulse Width Modulation) este o tehnica folosita pentru a varia în mod controlat
tensiunea data unui dispozitiv electronic. Aceasta metoda schimba foarte rapid tensiunea
oferita dispozitivului respectiv din ON în OFF și invers (treceri rapide din HIGH (5V de exemplu)
in LOW (0V).
6.2. MODULAȚIA ÎN DURATA A IMPULSURILOR - PWM
• Perioada de timp corespunzatoare valorii ON dintr-un ciclu ON-OFF se numește factor de
umplere (duty cycle) și reprezinta, în medie, ce tensiune va primi dispozitivul electronic. Astfel, se
pot controla circuite analogice din domeniul digital. Practic, asta înseamna ca un LED acționat
astfel se va putea aprinde / stinge gradual, iar în cazul unui motor acesta se va învârti mai
repede sau mai încet.
• În cazul unui motor, caruia i se aplica un semnal PWM cu factor de umplere de 0%, viteza de
rotație a acestuia va fi egala cu 0 rpm. Un factor de umplere de 100% va duce la o turație
maxima a acestuia.
• Factorul de umplere se exprima în procente și reprezinta cât la suta din perioada unui
• semnal acesta va fi pe nivelul ON. În Figura 1 se pot observa semnale PWM cu factori
• de umplere diferiți. Astfel, se poate deduce foarte ușor formula pentru a obține
• valoarea factorului de umplere (D):
6.2. MODULAȚIA ÎN DURATA A IMPULSURILOR - PWM

Modularea folosește variația factorului de umplere a unei forme de undă dreptunghiulară


pentru a genera la ieșire o tensiune analogică.
Multe circuite digitale pot genera semnale PWM. Majoritatea microcontrolerelor oferă
această facilitate, pe care o implementează folosind un numărător care este incrementat
periodic (conectat direct sau indirect la o unitate de ceas) și care este resetat la sfârșitul
fiecărei perioade a PWM-ului. Când valoarea numărătorului este mai mare decât valoarea
de referința, ieșirea PWM (output-ul) trece din starea HIGH în starea LOW (sau invers).
6.2. MODULAȚIA ÎN DURATA A IMPULSURILOR - PWM
• În cazul microcontrolerului ATmega328, semnalele de comandă PWM sunt generate cu
ajutorul timerelor sau pot fi generate doar prin intermediul unui program, în acest ultim caz
frecvenţa semnalului fiind mai mică (datorită modului de generare).
• În figura de mai jos este prezentată schema electrică de conectare a unui motor de curent
continuu prin intermediul căreia se poate comanda motorul în două regimuri, în primul caz se
poate comanda doar în modul pornit-oprit (on, off), fără să se poată modifica turaţia
acestuia, iar în al doilea caz se poate comanda astfel încât turaţia motorului să poată fi
modificată cu un număr de 256 de trepte. Factorul de umplere al semnalului PWM fiind
definit prin intermediul unui registru pe 8 biţi se poate deduce că numărul maxim de trepte
care poate fi generat este de 256. În cazul schemei de mai jos circuitul este prevăzut un
buton de pornire, buton conectat la pinul D2, care atunci când este apăsat va aduce pinul D2
la nivelul logic high, urmând ca în cuprinsul programului să fie citit şi interpretat acest nivel
logic de la intrarea D2.
6.2. MODULAȚIA ÎN DURATA A IMPULSURILOR - PWM
• Un exemplu de program generic care genereaza semnal PWM este urmatorul [1,2]:
6.2. MODULAȚIA ÎN DURATA A IMPULSURILOR - PWM

• Semnalul PWM poate fi utilizat şi


în cazul în care se doreşte
modificarea turaţiei unui motor dar
şi posibilitatea schimbării sensului
de rotaţie a acestuia. În acest scop
se utilizează circuitul din figura de
mai jos care conţine circuitul
integrat L293D, acesta fiind o
punte H integrată. [1,2]:
6.2. MODULAȚIA ÎN DURATA A IMPULSURILOR - PWM
2.3.BIBIOGRAFIE
1. Sebastian Radu Sabou –Indrumator laborator microcontrolere ARDUINO, Ed.U.T.
PRESS, Cluj-Napoca, 2018, pp.9-20.
[2] https://www.arduino.cc/en/Tutorial/DigitalPins
PROGRAMAREA PLATFORMELOR
ARDUINO
CURSUL 5
S.L.DR.ING. CORNELIUS DRUGA
5.1.ARDUINO- FUNCȚII
 Funcțiile permit structurarea programelor în segmente de cod pentru a
îndeplini sarcini individuale. Cazul tipic pentru crearea unei funcții este acela
când cineva trebuie să efectueze aceeași acțiune de mai multe ori într-un
program. Standardizarea fragmentelor de cod în funcții are câteva avantaje:
Funcțiile ajută programatorul să rămână organizat. Adesea, acest lucru
ajută la conceptualizare programul.
Funcțiile codifică o singură acțiune într-un singur loc, astfel încât funcția
trebuie gândită doar despre aceea acâiune și să fie depanată o singură dată.
Acest lucru reduce, de asemenea, șansele de erori în modificare, dacă
este necesar să fie codul schimbat.
5.1.ARDUINO- FUNCȚII
Funcțiile fac ca întreaga schiță (sketch) să fie mai mică și mai compactă,
deoarece anumite secțiuni din cod sunt reutilizate de multe ori.
Acestea facilitează reutilizarea codului în alte programe, făcându-l
modular și utilizarea funcțiilor face codul mai lizibil.
Există două funcții necesare într-o schiță (sketch) Arduino sau un program
adică configurare SETUP () și buclă LOOP ().
Alte funcții trebuie create în afara parantezelor acestor două funcții. Cea mai
comună sintaxă pentru a defini o funcție este:
Return type function name (argument1, argument2,...,)
{ statements
}
5.1.ARDUINO- FUNCȚII
5.1.ARDUINO- FUNCȚII
Declarație de funcție
O funcție este declarată în afara oricărei alte funcții, deasupra sau sub funcția
de buclă (loop).
Putem declara funcția în două moduri diferite -
1. Primul mod este doar scrierea părții funcției numită prototipul funcției
deasupra funcției buclă, care constă din:
Tipul de date returnare de funcție (de exemplu: int, float, double)
Numele funcției
Tipul argumentului funcțional.
Nu este necesar să scrieți numele argumentului.
Prototipul funcției trebuie să fie urmat de un punct și virgulă (;).
Următorul exemplu arată declarația unei funcții folosind prima metodă.
5.1.ARDUINO- FUNCȚII
Declarație de funcție
Următorul exemplu arată declarația unei funcții folosind prima metodă.
5.1.ARDUINO- FUNCȚII
Declarație de funcție
2. Al doilea mod, care se numește definiția sau declarația funcției, trebuie
declarată sub funcția buclă- loop- și constă din:
Tipul de date returnate de funcție
Numele funcției
Tipul argumentului funcțional, aici trebuie să adăugați numele argumentului
Corpul funcției (declarații din interiorul funcției care se execută când funcția
este apelată)
Următorul exemplu demonstrează declarația de funcție folosind a doua metodă.
5.1.ARDUINO- FUNCȚII
Declarație de funcție
Următorul exemplu demonstrează declarația de funcție folosind a doua metodă.
5.2.ARDUINO- ȘIRURI DE CARACTERE- STRINGS-
Șirurile sunt folosite pentru a stoca text. Acestea pot fi utilizate pentru a afișa
text pe un ecran LCD sau în fereastra IDE Serial Monitor. Șirurile sunt de
asemenea utile pentru stocarea intrării utilizatorului (de exemplu,
caracterele pe care un utilizator le introduce de la o tastatură conectată la
Arduino).
În programarea Arduino există două tipuri de șiruri:
Tablouri/șiruri ale caracterelor, care sunt aceleași cu șirurile utilizate în
limbajul C.

Stringul Arduino, care ne permite să folosim un obiect șir într-o schiță.


5.2.ARDUINO- ȘIRURI DE CARACTERE- STRINGS-
.
Primul tip de șir pe care îl vom învăța este șirul care este o serie de
caractere tip char. Un tablou este o serie consecutivă de variabile de
același tip stocată în memorie. Un șir este un tablou de variabile de tip
char. Un șir este un tablou special care are un element suplimentar la
sfârșitul șirului, care întotdeauna are valoarea 0 (zero). Aceasta este
cunoscută sub numele de „terminator de sir”- caracter cu valoare zero
(‘\0’).
Exemplu de șir de caractere de tip array
Acest exemplu va arăta cum se creează un șir și se tipărește în fereastra
monitorului serial.
5.2.ARDUINO- ȘIRURI DE CARACTERE- STRINGS-
.
Acest exemplu va arăta cum se creează un șir și se tipărește în fereastra
monitorului serial.
5.2.ARDUINO- ȘIRURI DE CARACTERE- STRINGS-
.
Următorul exemplu arată din ce este format un șir; un tablou de caractere
cu tipar caractere tipăribile/printabile și 0 ca ultim element al tabloului care
arată că aici se află capătul șirului.
Șirul poate fi tipărit în fereastra Monitorului serial Arduino IDE folosind:
Serial.println () și precizarea numelui șirului.
Același exemplu poate fi scris într-un mod mai convenabil, așa cum se
arată mai jos:
5.2.ARDUINO- ȘIRURI DE CARACTERE- STRINGS-
.
Putem modifica un șir într-o schiță, așa cum se arată în exemplu de mai
jos:
5.2.ARDUINO- ȘIRURI DE CARACTERE- STRINGS-
.
Rezultat:
5.2.ARDUINO- ȘIRURI DE CARACTERE- STRINGS-
.
Schița funcționează în felul următor.

(1) Crearea și tipărirea șirului


În schița dată mai sus, este creat un nou șir și apoi tipărit pentru afișare în
fereastra Monitor Serial
(2) Scurtarea șirului
Șirul este scurtat prin înlocuirea celui de al 14-lea caracter din șir cu terminatorul
de șir cu valoarea zero (2). Când șirul este tipărit, toate caracterele sunt tipărite
până la noul terminator de șir. Celelalte caractere nu dispar; ele mai există în
memorie și șir-tabloul are în continuare de aceeași dimensiune. Singura diferență
este că orice funcție care lucrează cu șiruri va vedea șirul până la primul
terminator nul.
5.2.ARDUINO- ȘIRURI DE CARACTERE- STRINGS-
.
Schița funcționează în felul următor.
(3) Schimbarea unui cuvânt în șir
În sfârșit, schița înlocuiește cuvântul „tort” cu „ceai” (3). Mai întâi trebuie să
înlocuiască terminator de șir la like [13] cu un spațiu astfel încât șirul să fie
restaurat la formatul inițial.
Caracterele noi suprascriu „cak” al cuvântului „cake” cu cuvântul „tea”. Acest lucru
este realizat de suprascrierea caracterelor individuale. „E” de „cake” se
înlocuiește cu un nou terminator de șir terminare. Rezultatul este că șirul este de
fapt terminat cu două terminatoare de șir, unul original de la sfârșitul șirului și
unul nou care înlocuiește „e” în „cake”. Acesta nu face nici o diferență atunci când
este tipărit noul șir deoarece funcția care imprimă șirul oprește imprimarea
caracterelor șirului când întâlnește primul terminator de șir.
5.2.ARDUINO- ȘIRURI DE CARACTERE- STRINGS-
. Funcții pentru a manipula tablourile de caractere (șiruri)
Schița anterioară a manipulat șirul într-un mod manual prin accesarea
individuală a caracterelor din șir. Pentru a facilita manipularea tablourilor de
caractee, puteți să vă scrieți propriile funcții pentru a face acest lucru sau să
utilizați unele dintre funcțiile specifice șirurilor de caractere din biblioteca
limbajului C.
1. Funcția String() - Clasa String, parte a nucleului începând cu versiunea 0019,
permite să se folosească și să manipuleze șiruri de text în moduri mai
complexe decât o fac tablourile de caractere. Puteți concatena șiruri, să
adăugați, să căutați și să înlocuiți sub-șiruri și multe altele. Este nevoie de mai
multă memorie decât la un simplu tablou de caractere, dar este și mult mai
util. Pentru referință, tablourile de caractere sunt denumite șiruri cu un „s” mic
și instanțele Clasei String sunt denumite Șiruri cu majuscula S. Rețineți că
șirurile constante, specificate în "ghilimele duble" sunt tratate ca tablouri de
caractere, nu ca și cazuri ale Clasa String.
5.2.ARDUINO- ȘIRURI DE CARACTERE- STRINGS-
. Funcții pentru a manipula tablourile de caractere (șiruri)
1. Funcția String() - Clasa String, parte a nucleului începând cu versiunea 0019,
permite să se folosească și să manipuleze șiruri de text în moduri mai
complexe decât o fac tablourile de caractere. Puteți concatena șiruri, să
adăugați, să căutați și să înlocuiți sub-șiruri și multe altele. Este nevoie de mai
multă memorie decât la un simplu tablou de caractere, dar este și mult mai
util. Pentru referință, tablourile de caractere sunt denumite șiruri cu un „s” mic
și instanțele Clasei String sunt denumite Șiruri cu majuscula S. Rețineți că
șirurile constante, specificate în "ghilimele duble" sunt tratate ca tablouri de
caractere, nu ca și cazuri ale Clasa String.
2. Funcția charAt()- acces la un anumit caracter al șirului.
3. Funcția compareTo()- Compara două șiruri, testând dacă unul vine înainte sau
nu după celălalt sau dacă sunt egale. Șirurile sunt comparate caracter cu
caracter, folosind valorile ASCII ale caracterelor. Asta înseamnă, de exemplu,
„a” vine înainte de „b”, dar dupa o'. Numerele vin înainte de litere.
5.2.ARDUINO- ȘIRURI DE CARACTERE- STRINGS-
.
4. Funcția concat()- adaugă un parametru la un șir.
5. Funcția c_str()- Convertește conținutul unui șir într-un șir sppecific
limbajului C, terminat cu null. Rețineți că acest lucru oferă acces direct la
șirul intern tampon și trebuie utilizat cu grijă. În special, ar trebui nu
modificați niciodată șirul prin indicatorul returnat (pointer-ul). Când se
modifică obiectul String sau când acesta este distrus indicatorul returnat
anterior de c_str ()-pointerul- devine invalid și
nu trebuie utilizat mai mult.
6. Funcția endsWith()- testează dacă un șir se termină cu caracterele
altui șir.
7. Funcția equals()- Compara două șiruri pentru egalitate. Comparația
este sensibilă la litere mari și majuscule, ceea ce înseamnă că șirul
„hello” nu este egal cu Șirul „HELLO”.
5.2.ARDUINO- ȘIRURI DE CARACTERE- STRINGS-
.
7. Funcția equals()- Compara două șiruri pentru egalitate. Comparația este
sensibilă la litere mari și majuscule, ceea ce înseamnă că șirul „hello” nu
este egal cu Șirul „HELLO”.
8. Funcția equalsIgnoreCase()- Compară două șiruri pentru egalitate.
Comparația nu este sensibilă la majuscule sau, ceea ce înseamnă că șirul
(„hello”) este egal cu String ("HELLO").
9. Funcția getBytes()- Copiază caracterele șirului în memoria tampon
furnizată (buffer).
10. Funcția indexOf()- Localizează un caracter sau un șir în alt șir. În mod implicit
acesta caută de la începutul șirului, dar poate porni și de la un index dat, permițând
localizarea tuturor instanțelor caracterului sau șirului.
11.Funcția lastIndexOf()- Localizează un caracter sau șir în alt șir. În mod
implicit, caută de la sfârșitul șirului, dar poate funcționa și invers de la un
index dat, permițând localizarea tuturor instanțelor caracterului sau șirului.
5.2.ARDUINO- ȘIRURI DE CARACTERE- STRINGS-
12.Funcția
. length()-Returnează lungimea șirului, în caractere. (Rețineți că
acest lucru nu include un caracterul nul de final.)
13.Funcția remove()- Modifică pe loc, un șir care îndepărtează caracterele
de la un index furnizat până la sfârșitul șirului sau de la indexul furnizat la
index plus un număr.
14.Funcția replace()- ne permite să înlocuim toate instanțele unui anumit
caracter cu un alt caracter. Puteți utiliza, această funcție, de asemenea,
pentru a înlocui subșirurile unui șir cu alt subșir.
15.Funcția reserve()- vă permite să alocați un zonă tampon în
memorie pentru manipularea șirurilor.
16. Funcția setCharAt()- setează un caracter al șirului. Nu are efect asupra
indiciilor externi lungimii existente a șirului.
17. Funcția startsWith()- Testează dacă un șir de caractere începe sau nu
cu caracterele altui șir.
5.2.ARDUINO- ȘIRURI DE CARACTERE- STRINGS-
. funcția tochararray() - copiază caracterele șirului în memoria tampon
18.
furnizată.
19. funcția substring() - obțineți un subșir al unui șir. indicele de pornire este
inclus (caracterul corespunzător este inclus în substrat), dar
indexul de încheiere opțional este exclusiv (caracterul corespunzător
nu este inclus în substrat). dacă indicele final este omis, subșirul continuă
până la sfârșitul șirului.
20. funcția toint()- convertește un șir valid într-un număr întreg. șirul de
intrare ar trebui să înceapă cu un număr întreg. dacă șirul conține numere,
ne –întregi(reale) funcția nu va mai efectua conversia.
21. funcția tofloat()- convertește un șir valabil într-un număr real- float. șirul
de intrare ar trebui să înceapă cu o cifră. dacă șirul conține caractere care
nu sunt cifre,funcția va opri efectuarea conversiei. de exemplu,
șirurile „123.45”, „123” și „123fish” sunt convertite în 123.45,123,00,
respectiv 123,00.
5.2.ARDUINO- ȘIRURI DE CARACTERE- STRINGS-
.
22. Funcția toLowerCase()- Obțineți o versiune cu minuscule a unui șir.
Începând cu 1.0, toLowerCase () modifică șirul în loc decât să returneze
unul nou.

23. Funcția toUpperCase()- Obțineți o versiune cu majuscule a unui șir.


Începând cu 1.0, toUpperCase () modifică șirul în loc decât să returneze
unul nou.

24. Funcția trim()- Obțineți o versiune a șirului cu orice spațiul eliminat.


5.2.ARDUINO-
.
ȘIRURI DE CARACTERE-
STRINGS- EXEMPLE
5.2.ARDUINO-
.
ȘIRURI DE CARACTERE-
STRINGS- EXEMPLE
5.3.ARDUINO- STRING OBJECT
.
Al doilea tip de șir utilizat în programarea Arduino este Obiectul Șir- String
Object.
Un obiect este o construcție care conține atât date cât și funcții. Un obiect
String poate fi creat la fel ca o variabilă căreia i se atribuie o valoare sau
un șir. Obiectul String conține funcții (care se numesc „metode” în
programarea orientată pe obiecte -OOP) care operează pe datele șirului
conținute în Obiectul Șir (String object).
Următoarele schițe și explicații vor clarifica ce este un obiect și cum este
utilizat Obiectul Șir.
5.3.ARDUINO- STRING OBJECT
.
5.3.ARDUINO- STRING OBJECT
.

Explicații:
Un obiect șir este creat și i se atribuie o valoare (sau un șir)
în partea superioară a schiței (codului).

Aceasta creează un Obiect Șir cu numele my_str și îi conferă o


valoare „This is my string.". Aceasta poate fi comparată cu crearea
unei variabile și atribuirea unei valori acesteia, cum ar fi un număr
întreg:
5.3.ARDUINO- STRING OBJECT

Schița funcționează în felul următor.


(1) Tipărirea șirului
Șirul poate fi tipărit în fereastra Serial Monitor la fel ca un șir de caractere.
(2) Convertirea șirului în majuscule
Obiectul Șir my_str care a fost creat, are o serie de funcții sau metode care
pot fi operat pe el. Aceste metode sunt invocate folosind numele
Obiectului Șir my_str urmate de operatorul punct (.) și apoi numele funcției
de utilizat.
5.3.ARDUINO- STRING OBJECT
Schița funcționează în felul următor:
Funcția toUpperCase () operează pe șirul conținut în obiectul my_str care
este de tip String și transformă datele (sau textul) pe care obiectul le conține
în caractere mari.
O listă cu funcții pe care Clasa Șiruri le conține poate fi găsit în Arduino
String reference. Tehnic, șir se numește clasă și este folosită la
crearea Obiectelor String.
(3) Suprascrierea unui șir
Operatorul de alocare este folosit pentru a atribui un nou șir Obiectului
my_str care înlocuiește șirul vechi.

Operatorul de alocare nu poate fi folosit pe șiruri de caractere, dar


funcționează pe Obiecte String.
5.3.ARDUINO- STRING OBJECT
(4) Înlocuirea unui cuvânt în șir
Funcția replace () este utilizată pentru a înlocui primul șir care i-a fost
transmis cu al doilea șir trimis la ea.

(5) Obținerea lungimii șirului


Obținerea lungimii șirului se face cu ușurință folosind lenght (). În schița
de exemplu, rezultatul returnat de lenght () este trecut direct la
Serial.println () fără a utiliza un variabilă intermediară.
5.4.ARDUINO- TIME
Arduino oferă patru funcții diferite de manipulare a timpului. Sunt-
 delay () function,
 delayMicroseconds () function
 millis () function
 micros () function
1. delay() function- Acceptă un singur număr întreg ca argument. Acest
număr reprezintă timpul (măsurat în milisecunde). programul ar trebui să
aștepte până să treacă la următoarea linie de cod atunci când întâlnește
acest lucru funcţie. Cu toate acestea, problema este că funcția delay ()
nu este o modalitate bună de a vă face program să aștepte, deoarece
este cunoscută ca o funcție de „blocare”.
5.4.ARDUINO- TIME
Arduino oferă patru funcții diferite de manipulare a timpului. Sunt-
 delay () function,
 delayMicroseconds () function
 millis () function
 micros () function
1. delay() function- Acceptă un singur număr întreg ca argument. Acest
număr reprezintă timpul (măsurat în milisecunde). programul ar trebui să
aștepte până să treacă la următoarea linie de cod atunci când întâlnește
acest lucru funcţie. Cu toate acestea, problema este că funcția delay ()
nu este o modalitate bună de a vă face program să aștepte, deoarece
este cunoscută ca o funcție de „blocare”.

unde, ms este timpul în milisecunde pentru a face pauză (unsigned long).


5.4.ARDUINO- TIME
5.4.ARDUINO- TIME
2. delayMicroseconds() function- Acceptă un singur număr întreg ca
argument. Acest număr reprezintă timpul măsurat în microsecunde.
Sunt o mie de microsecunde într-o milisecundă și un milion de
microsecunde într-o secundă.
În prezent, cea mai mare valoare care poate produce o întârziere exactă
este 16383. Pentru întârzieri mai mari de câteva mii de microsecunde,
trebuie să se utilizeze în schimb funcția delay().
5.4.ARDUINO- TIME
2. delayMicroseconds() function- exemplu
5.4.ARDUINO- TIME
3. millis() function-Returnează numărul de milisecunde trecute de când
placa Arduino a început să ruleze programul curent. Acest număr se revine
la zero după aproximativ 50 de zile.
5.4.ARDUINO- TIME
3. micros() function- Returnează numărul de microsecunde de când placa Arduino a
început să ruleze programul curent. Acest număr se revarsă, adică revine la zero
după aproximativ 70 de minute. Pe plăcile Arduino de 16 MHz (de exemplu,
Duemilanove și Nano), această funcție are o rezoluție de patru microsecunde (adică
valoarea returnată este întotdeauna multiplu din patru). Pe plăcile Arduino de 8 MHz
(de exemplu, LilyPad), această funcție are o rezoluție din opt microsecunde.
2.3.BIBIOGRAFIE
1. Arduino Tutorilas Point: www.tutorialspoint.com, 2016, pp.42-48
2. Instructiuni C/C++ (partea a II-a)- Instrucțiuni de ciclare, disponibil la:
www.math.uaic.ro › down_files › cpp2017 › instructiuni_ii_2017
3. Drugă C: Notițe de curs- PCLP I, 2019
4. https://www.arduino.cc/reference/en/language/functions/time/millis/
5.https://www.arduino.cc/reference/en/language/functions/time/delaymicroseconds
PROGRAMAREA PLATFORMELOR
ARDUINO
CURSUL 2
S.L.DR.ING. CORNELIUS DRUGA
2.1.ARDUINO- STRUCTURI DE DECIZIE
 Structurile de luare a deciziilor impun ca programatorul să specifice una sau mai multe condiții pentru a fi
evaluate sau testate de program. Ar trebui să fie alături de o declarație sau declarații care trebuie executate în
cazul în care condiția este adevărată, și, opțional, alte declarații care trebuie executate în cazul în care se
stabilește că este falsă condiția. Urmărește forma generală a unei structuri tipice de luare a deciziilor găsită în
majoritatea limbajelor de programare. Aveți posibilitatea să controlați funcțiile platformei prin trimiterea unui
set de instrucțiuni către microcontrolerul de pe placă prin intermediul IDE-ului Arduino.
2.1.ARDUINO- STRUCTURI DE DECIZIE
• Diferite forme ale instructiunii IF:
2.1.ARDUINO- STRUCTURI DE DECIZIE-IF
2.1.ARDUINO- STRUCTURI DE DECIZIE-IF…ELSE IF …ELSE
Instrucțiunea if poate fi urmată de o altă instructiune opțională else if…else, care este
foarte utilă pentru a testa diverse condiții folosind o singură instrucțiune if ... else if.
Când se utilizează instrucțiunea if...else if... else trebuie să se țină cont de:
2.1.ARDUINO- STRUCTURI DE DECIZIE-IF…ELSE IF …ELSE
2.1.ARDUINO- STRUCTURI DE DECIZIE- IF…ELSE IF …ELSE
2.1.ARDUINO- STRUCTURI DE DECIZIE- SWITCH CASE
Similar cu instrucțiunile if, switch ... case controlează fluxul de programe permițând
programatorii să specifice coduri diferite care ar trebui să fie executate în diferite condiții.
În particular, o instrucțiune de comutare (switch) compară valoarea unei variabile cu valorile
specificate în declarațiile - case. Când se găsește o instrucțiune case a cărei valoare se
potrivește cu cea a variabilei, este executat codul în aceea situație.
Instrucțiunea break realizează o ieșire (întrerupere forțată) a instrucțiunii switch și este
folosită, de obicei, la sfârșitul fiecărui caz (case). Fără break, instrucțiunea switch va continua
să execute urmând expresii („falling-through”) până la break sau până este atins sfârșitul
instrucțiunii switch.
2.1.ARDUINO- STRUCTURI DE DECIZIE- SWITCH CASE
2.1.ARDUINO- STRUCTURI DE DECIZIE- SWITCH CASE
2.1.ARDUINO- STRUCTURI DE DECIZIE- SWITCH CASE
Iată un exemplu simplu cu switch. Să presupunem că avem o fază variabilă cu
doar 3 stări diferite (0, 1 sau 2) și o funcție (eveniment) corespunzătoare pentru
fiecare dintre aceste stări.
2.1.ARDUINO- STRUCTURI DE DECIZIE- OPERATORUL CONDIȚIONAL ? :
Operatorul condiționat ? : este singurul operator ternar din C.
Sintaxa operatorului condițional ? : este:

Se evaluează mai întâi expresia1. Dacă valoarea sa este adevărată, atunci expresia2 este
evaluată și expresia3 este ignorată. Dacă expresia1 este evaluată ca falsă, atunci
expresia3 se evaluează iar expresia2 este ignorată. Rezultatul va fi o valoare fie a
expresiei2, fie a expresiei3 în funcție de care dintre ei se evaluează ca Adevărat.
Operatorul condiționat se asociază de la dreapta la stânga.
2.2.ARDUINO- STRUCTURI DE TIP BUCLĂ- LOOPS
Instrucţiunile de ciclare (repetitive, iterative, etc) sunt utilizate în situaţia în care o anumită
secvenţă de cod trebuie executată de mai multe ori în mod consecutiv, numărul de repetiţii
fiind fix, stabilit iniţial, sau variabil, depinzând de rezultatul acţiunii repetate.
Limbajul C pune la dispoziţia programatorilor trei instrucţiuni de ciclare: while, do-while şi
for, toate trei utilizând pentru continuarea ciclării o condiţie de tip “cât timp este adevărat
că …”, diferenţa dintre ele fiind dată, în principal, de momentul testării condiţiei de ciclare:
în cazul instrucţiunii while testarea are loc înaintea fiecărei execuţii a acţiunii repetate
(testare anterioară), în cazul do-while testarea se face la reluare, după fiecare execuţie
(testare posterioară), iar în cazul instrucţiunii for testarea se face analog cazului while,
instrucţiunea for având însă prevăzută şi evaluarea unei anumite expresii înainte de fiecare
reluare, precum şi o secvenţă iniţială, executată înaintea intrării în ciclare.
Instrucţiunile repetitive păstrează controlul fluxului de execuţie al programului până când
are loc ieşirea din ciclare. O ieşire din ciclare poate fi normală, atunci când controlul este
preluat de următoarea instrucţiune din textul sursă în urma evaluării condiţiei de repetare a
ciclării, sau poate fi forţată, prin executarea unei instrucţiuni de salt aflate în corpul
instrucţiunii repetitive.
2.2.ARDUINO- STRUCTURI DE TIP BUCLĂ- LOOPS
Limbajele de programare oferă diverse structuri de control care permit căi de execuție
mai complicate. O instrucțiune tip buclă ne permite să executăm o declarație sau un grup
de declarații de mai multe ori. Următoarea este forma generală a unei instrucțiuni de tip
buclă în cea mai mare parte a limbajelor de programare.
2.2.ARDUINO- STRUCTURI DE TIP BUCLĂ- LOOPS
Limbajul de programare C oferă următoarele tipuri de bucle:
bucla while
bucla do while
bucla for
bucla nested
buclă infinită
A. While Loop - se va bucla continuu și la infinit până când expresia din interiorul parantezelor,
() devine falsă. Dacă starea variabilei testate nu se schimbă bucla while nu se va sfârși
niciodată. While este un ciclu/buclă cu test inițial.
Sintaxa buclei/ ciclului while este următoarea:
2.2.ARDUINO- STRUCTURI DE TIP BUCLĂ- WHILE LOOP
2.2.ARDUINO- STRUCTURI DE TIP BUCLĂ- WHILE LOOP

Instrucţiunea while îşi inserează în mod repetat în fluxul de execuţie instrucţiunea sa corp,
atât timp cât expresia-test este adevarată (are o valoare nenulă). Este asemănătoare cu
instrucţiunea if, cu diferenţa esenţială că instrucţiunea while păstrează controlul după
executarea instrucţiunii corp, reluând evaluarea expresiei-test. Controlul execuţiei trece la
următoarea instrucţiune din textul sursă al programului (dacă în corp nu sunt prevăzute
salturi) numai atunci când expresia test devine falsă (egală cu zero). Dacă expresia test
este falsă de la bun început, instrucţiunea corp nu este
executată niciodată.Tipul expresiei-test trebuie sa fie boolean sau scalar (număr sau
pointer, caz în care are loc conversia implicită la tipul bool) şi la evaluare sunt completate
toate efectele ei secundare înaintea luării deciziei de contiunare sau de terminare a
ciclării. Instrucţiunea-corp poate fi de orice tip (inclusiv o instrucţiune while), dar ca să
aibe sens utilizarea ei trebuie sa fie o instrucţiune efectivă şi nu o declaraţie, de exemplu.
De regulă, instrucţiunea corp este o instrucţiune compusă, conţinând
o secvenţă de cod care descrie acţiunea care trebuie repetată.
2.2.ARDUINO- STRUCTURI DE TIP BUCLĂ- DO WHILE LOOP

Bucla do ... while este similară cu bucla while. În bucla while, continuare
corpului buclei/ciclului este testată la începutul buclei înainte de a se efectua
corpul buclei.
În cazul do ... while se testează condiția de continuare a buclei după
executarea corpului buclei. Prin urmare, corpul buclei va fi executat cel puțin o
dată.
2.2.ARDUINO- STRUCTURI DE TIP BUCLĂ- FOR LOOP
Sintaxa: for (expresie-inițială; expresie-test; expresie-reluare)
Instrucțiunea for, cu o sintaxă mult mai complexă decât celelalte instrucțiuni de ciclare,
furnizează o scriere compactă a etapelor standard de execuție a unui proces iterativ:
inițializarea variabilelor înaintea startului, evaluarea testului de ciclare, execuţia acţiunilor
din corpul ciclului, actualizarea variabilelor implicate în expresia-test, reluarea testării.
Execuţia instrucţiunii for începe cu evaluarea expresie-iniţiale şi completarea tuturor
efectelor sale secundare. Expresia iniţială poate fi de orice tip, scopul ei este de
iniţializare a valorilor variabilelor implicate în ciclare (dacă trebuie facute mai multe
atribuiri se poate folosi operatorul virgulă, desigur). Ea este evaluată o singură dată,
imediat înainte de intrarea în ciclarea propriu-zisă. După evaluarea expresiei de
iniţializare se trece la evaluarea expresiei-test (şi completarea efectelor ei secundare).
Expresia test trebuie să fie de tip boolean sau scalar.
Dacă rezultatul evaluarii e fals execuţia instrucţiunii for se încheie aici, iar controlul este
preluat de următoarea instrucţiune din textul sursă.
2.2.ARDUINO- STRUCTURI DE TIP BUCLĂ- FOR LOOP

Dacă expresia-test este adevarată se continuă cu execuţia instrucţiunii-corp. După finalizarea


acţiunilor descrise de corpul ciclui for (instrucţiunea-corp) şi imediat înainte de reluarea
testării este evaluată expresia-reluare. Expresia-reluare poate avea orice tip, ea este
utilizată mai ales pentru actualizarea valorii variabilei index. După completarea
efectelor secundare a expresiei-reluare se reia procesul iterativ prin re-evaluarea expresiei
test.
Oricare dintre cele trei expresii din antetul instrucţiunii for poate lipsi, doar prezenţa celor
două simboluri punct şi virgulă este obligatorie. În cazul în care lipseşte expresia-test (fapt
interzis pentru if sau pentru while) se consideră ca testul de reluare a iteraţiei este în mod
implicit satisfăcut. În acest caz, dacă nu este prevăzută ieşirea forţată (prin salt) din ciclare,
execuţia instrucţiunii for continuă la nesfârşit şi, în consecinţă, blocheaza execuţia
programului.
2.2.ARDUINO- STRUCTURI DE TIP BUCLĂ- FOR LOOP
De reţinut: următoarea formă a
instrucţiunei for:
2.2.ARDUINO- STRUCTURI DE TIP BUCLĂ- FOR LOOP
2.2.ARDUINO- STRUCTURI DE TIP BUCLĂ- NESTED LOOP
Limbajul C ne permite să utilizăm o buclă în interiorul altei bucle (nested loop). Următorul
exemplu ilustrează conceptul.
2.2.ARDUINO- STRUCTURI DE TIP BUCLĂ- INFINITE LOOP
Este bucla care nu are nicio condiție de încheiere, astfel încât bucla devine infinită.
În cazul sintaxei buclei infinite (infinite loop) avem mai multe cazuri:
2.3.BIBIOGRAFIE
1. Arduino Tutorilas Point: www.tutorialspoint.com, 2016, pp.42-48
2. Instructiuni C/C++ (partea a II-a)- Instrucțiuni de ciclare, disponibil la:
www.math.uaic.ro › down_files › cpp2017 › instructiuni_ii_2017
3. Drugă C: Notițe de curs- PCLP I, 2019
SISTEME DE DEZVOLTARE ARDUINO.
MODELE. ARDUINO UNO DESCRIERE
CURSUL 3
S.L.DR.ING. CORNELIUS DRUGA
1.1 GENERALITĂȚI PRIVIND PLATFORMELE ARDUINO
• Arduino este o platformă prototip (open-source) bazată pe configurație hardware și software ușor de
folosit. Se compune dintr-o placă de circuite, care poate fi programată (denumită în continuare un
microcontroler) și un software numit Arduino IDE (Integrated Development Mediu), care este folosit
pentru a scrie și a încărca codul computerului pe placa fizică.
• Caracteristicile principale sunt:
plăcile Arduino pot citi semnale de intrare analogice sau digitale de la diferiți senzori și săi
transforme într-un semnal de ieșire, pentru: pornirea/oprirea unui motor, aprinderea/stingera unui
LED, conectarea la Cloud și multe alte acțiuni.
Aveți posibilitatea să controlați funcțiile platformei prin trimiterea unui set de instrucțiuni către
microcontrolerul de pe placă prin intermediul IDE-ului Arduino (denumit în continuare software de
încărcare).
Spre deosebire de majoritatea circuitelor programabile anterioare, Arduino nu are nevoie de un
dispozitiv extern (numit programator) pentru a încărca un nou cod pe placă. Puteți folosi pur și simplu
un cablu USB. În plus, ID-ul Arduino utilizează o versiune simplificată a C ++, ceea ce îl face mai ușor
de programat.
1.1 GENERALITĂȚI PRIVIND PLATFORMELE ARDUINO
1.1 GENERALITĂȚI PRIVIND PLATFORMELE ARDUINO

• 1.1.1 Modele de Platforme Arduino


Pe piață există diferite tipuri de plăci Arduino în funcție de diferitele microcontrolere
folosite. Cu toate acestea, toate plăcile Arduino au un lucru în comun: sunt programate
prin Arduino IDE. Diferențele se bazează pe numărul de intrări și ieșiri (numărul de
senzori, LED-uri și butoanele pe care le puteți utiliza pe o singură placă), viteză,
tensiune de operare, factor de formă etc.
Unele plăcile sunt concepute să fie încorporate și nu au interfață de programare
(hardware), care va trebui să fie cumpărată separat.
Unele pot rula direct de la o baterie de 3.7V, altele au nevoie de cel puțin 5V.
1.2 DESCRIEREA PLATFORMELOR ARDUINO
1.2 DESCRIEREA PLATFORMELOR ARDUINO
Placa Arduino poate fi alimentată cu ajutorul cablului USB de la computer.
Tot ce trebuie să se conecteze cablului USB la conexiunea USB (1).
Plăcile Arduino pot fi alimentate direct de la o sursă de curent continuu
prin intermediul mufei Jack (2).
Funcția regulatorului de tensiune este de a controla tensiunea dată plăcii
Arduino și stabilizarea tensiunilor DC utilizate de procesor și de alte elemente.
Oscilatorul de cristal ajută platforma Arduino să gestioneze problemele legate
de timp. Cum calculează Arduino timpul ? Răspunsul este, folosind oscilatorul cu
cristal de cuart (frecvența este de 16.000.000 Hertz sau 16 MHz).
Puteți să resetați placa Arduino, adică să rulați programul de la început.
Puteți să resetați placa Arduino UNO în două moduri. Mai întâi, utilizând
butonul de resetare (17) de pe placă. În al doilea rând, se poate conecta un
buton extern de resetare la pinul RESET (5).
1.2 DESCRIEREA PLATFORMELOR ARDUINO
3.3V (6): Alimentare 3.3 volți de ieșire.
5 V (7): Alimentare 5 volți de ieșire
Majoritatea componentelor utilizate cu placa Arduino funcționează bine cu 3.3 și 5 volți.
GND (8) (pământare/masă): Există mai mulți pini GND pe Arduino, oricare dintre acestea
pot fi utilizate pentru a lega circuitul la masă.
Vin (9): Acest pin poate fi folosit si pentru alimentarea placii Arduino de la o sursă externă
de alimentare, cum ar fi o sursă de curent alternativ (AC).
Placa Arduino UNO are cinci pini de intrare analogici A0 până la A5. Aceștia pot
citi semnalul de la un senzor analogic cum ar fi senzorul de umiditate sau senzorul
de temperatură și să îl convertească într-o valoare digitală care poate fi citită de
către microprocesor/ microcontroller.
Fiecare placă Arduino are propriul microcontrolier (11). Principalul IC (circuit
integrat) de pe Arduino este ușor diferit de la placă la placă.
Microcontrolerele sunt de obicei ale Companiei ATMEL. Trebuie să știți ce IC
conține placa dvs. înainte de încărcarea unui nou program de la IDE
Arduino. Aceste informații sunt disponibile la în partea de sus a IC. Pentru
mai multe detalii despre construcția și funcțiile IC, le puteți găsi în fișa
ICSP (12) este un AVR, un mic antet de programare pentru Arduino format din
MOSI, MISO, SCK, RESET, VCC și GND. Acesta este adesea denumit SPI (Serial
Peripheral Interface), care ar putea fi considerată o "extindere" a ieșirii.

Acest LED ar trebui să se aprindă când conectați Arduino la sursa de


alimentare pentru a indica faptul că plăcuța este alimentată corect. Dacă
această lumină nu se aprinde, atunci există ceva în neregulă cu conexiunea.

Pe placa Arduino se găsesc două etichete: TX (transmitere) și RX (recepție).


Ele apar în două locurile pe Arduino UNO. Mai întâi, la pinii digitali 0 și 1,
pentru a indica pinii responsabili cu comunicația serială. În al doilea rând, TX
și RX Led-ul (13). Led-ul TX clipește cu viteză diferită în timp ce trimiteți
datele seriale. Viteza de clipire depinde de viteza baud
utilizate de consiliu. RX clipește în timpul procesului de recepție.
Placa Arduino UNO are 14 pinii I/O digitali (dintre care oferă 6 pini PWM
(Pulse Width Modulation) la ieșire. Acești pini pot fi configurați pentru a
acționa ca pini digitali de intrare pentru a citi valorile logice (0 sau 1) sau
de ieșire pentru a comanda diferite module cum ar fi: LED-uri, relee, MPP
etc. Pinul etichetat "~" poate fi folosit pentru a genera PWM.

AREF reprezintă Analog Reference. Este uneori, folosit pentru a seta o


tensiune de referință externă (între 0 și 5 volți) ca limită superioară pentru
pinii de intrare analogici.
1.3 INSTALAREA PLĂCII ARDUINO
• Pasul 1: În primul rând trebuie aleasă placa Arduino, care va fi folosită în aplicații și un
cablu USB. În cazul în care utilizați Arduino UNO, Arduino Duemilanove, Nano, Arduino
Mega 2560 sau Diecimila, veți avea nevoie de un cablu USB standard (conector A la
conectorul B), (de tipul celor folosite la conectarea imprimantelor), după cum se prezintă în
imaginea următoare.

În cazul în care folosiți Arduino Nano, veți avea nevoie de un cablu USB (A la Mini-B),
așa cum se arată în imaginea următoare.
• Step 2: Download Arduino IDE Software. Puteți obține diferite versiuni ale IDE Arduino
din pagina de Download (Descărcare) de pe web site-ul Oficial Arduino. Trebuie să
selectați software-ul dvs., compatibil cu sistemul dvs. de operare (Windows, IOS sau
Linux). După terminarea descărcării fișierului, dezarhivați fișierul.
Pasul 3: Alimentați placa Arduino. Arduino Uno, Mega, Duemilanove, Leonardo și Arduino
Nano se alimentează automat de la conexiunea USB la computer, fie dintr-o sursă externă
de alimentare. Dacă utilizați un Arduino Diecimila, trebuie să vă asigurați că placa este
configurată corect pentru a se alimenta cu energie de la conexiunea USB (Sursa de
alimentare este selectată cu un jumper). Conectați placa Arduino la computer utilizând
cablul USB adecvat, astfel LED-ul de alimentare verde (PWR etichetat) ar trebui să fie
aprins.

Pasul 4: Rulați IDE-ul Arduino. După ce software-ul Arduino IDE este descărcat, trebuie să
dezarhivați dosarul. În interiorul dosarului, puteți găsi pictograma aplicației cu o etichetă
de infinit (application.exe). Faceți dublu clic pe pictograma pentru a rula IDE-ul.
Pasul 5: Deschideți primul proiect.
Aveți două opțiuni:
Creați un nou proiect.
Deschideți un exemplu de proiect existent.
Pentru a crea un nou proiect, selectați Fișier -> Nou.
Pentru a deschide un exemplu de proiect existent, selectați Fișier -> Exemplu ->
Elemente de bază -> Blink.
Pasul 6: Selectați placa dvs. Arduino.
Pentru a evita orice eroare în timpul încărcării programului pe placă, trebuie să selectați
corect modelul de placă Arduino folosit. Mergeți la Tools -> Board și selectați modelul plăcii.
Pasul 7: Selectați portul serial.
Selectați dispozitivul serial al plăcii Arduino. Accesați meniul Instrumente -> Port serial.
Pasul 8: Încărcați programul pe placa Arduino.
Înainte de a explica modul în care putem încărca programul nostru pe placă, trebuie să
prezentăm funcțiile fiecărui simbol care apare în bara de instrumente Arduino IDE.

A - folosit pentru a verifica dacă există o eroare de compilare.


B - Folosit pentru a încărca un program pe placa Arduino.
C- Comandă rapidă utilizată pentru a crea o schiță nouă.
D - Folosit pentru a deschide direct una dintre schițele din Exemple.
E-ul pentru a salva schița.
F - Monitor serial utilizat pentru a recepționa datele seriale de pe placă și pentru a trimite
datele seriale la bord.
Faceți clic pe butonul "Încărcați" din Bara de instrumente. Așteptați câteva secunde; apoi
LED-urile RX și TX de pe placă, vor lumina intermitent. Dacă încărcarea are succes, mesajul
Opțiunea "Încărcare finalizată" va apărea în bara de stare.
1.4 PROGRAMAREA PLĂCILOR ARDUINO
Software-ul Arduino este open-source.
Sketch (Schița): Prima terminologie nouă este programul Arduino numit "schiță".
Programele Arduino pot fi împărțite în trei părți principale: Structura, Valori (variabile și
constante) și Funcții.
Structura software cuprinde două funcții principale:
• Setup () Funcția de configurare
• Loop () Functia buclă.
SCOP: Funcția setup () este apelată când începe să ruleze o schiță. Se utilizează pentru a
inițializa variabilele, modurile cu pini, bibliotecile etc. Funcția de configurare va funcționa
numai o dată, după fiecare pornire sau resetare a plăcii Arduino.
INTRARE: -
IEȘIRE: -
RETURN: -
SCOP: După crearea funcției setup (), care inițializează și setează valorile
inițiale, funcția buclă () face exact ceea ce sugerează numele acesteia, și buclele
consecutive. Utilizați-l pentru a activa controlul asupra plăcii Arduino.

INTRARE: -

IEȘIRE: -

RETURN: -
1.5 TIPURI DE DATE
• Tipurile de date din C se referă la un sistem extins utilizat pentru
declararea variabilelor sau funcțiilor de diferite tipuri. Tipul unei
variabile determină spațiul pe care îl ocupă în memorie și modul în
care este interpretat modelul de biți stocat.
• Următorul tabel oferă toate tipurile de date pe care le veți folosi în
timpul programarii platformelor Arduino.
1.5 TIPURI DE DATE
• VOID : Cuvântul cheie void este utilizat doar în declarațiile de funcții.
Acesta indică faptul că funcția se aștepta să nu returneze nicio
valoare/informație catre funcției din care a fost apelată.
• Boo

• BOOLEAN: Un boolean păstrează una dintre cele două valori,


adevărată sau falsă. Fiecare variabilă booleană ocupă un octet de
memorie.
1.5 TIPURI DE DATE
• CHAR : Un tip de date care preia un octet de memorie care stochează o valoare a
caracterului. Literele sunt scrise cu ghilimele de acest fel: ‘A’ și pentru mai multe
caractere, se folosesc șiruri de caractere care sunt scrise astfel: “ABC”.
• Cu toate acestea, caracterele sunt stocate ca numere. Puteți vedea codarea
specifică în diagrama ASCII. Aceasta înseamnă că este posibil să se efectueze
operații aritmetice pe caractere, în care se folosește valoarea codului ASCII a
caracterului. De exemplu, ‘A’ + 1 are valoarea 66, deoarece valoarea codului
ASCII a majusculei A este 65..
1.5 TIPURI DE DATE
1.5 TIPURI DE DATE
• unsigned char : este un tip de date fara semn care ocupă un octet de memorie.
Acest tip de date codează numerele de la 0 la 255.

• Byte: Un octet stochează un număr fără semn pe 8 biți, de la 0 la 255.

• Int: întregii sunt tipul principal de date pentru stocarea numerelor. Acest tip de date
stochează o valoare de 16 biți (2 byte). Se obține astfel un interval de la -32,768
la 32,767 (valoarea minimă de -2 ^ 15 și valoarea maximă din (2 ^ 15) - 1).
1.5 TIPURI DE DATE
• Int: Dimensiunea acestora variază de la placă la placă. Pe Arduino Due, de exemplu,
acest tip de date se memorează pe 32 de biți (4 byte). Astfel, se obține o gamă de
la -2,147.483.648 la 2.147.483.647 (o valoare minimă de -2 ^ 31 și o valoare
maximă de (2 ^ 31) - 1).

• Unsigned int : Ints-urile nesemnate (numere întregi nesemnate) sunt identice cu cele în
modul în care stochează un 2 octeți
• valoare. În loc să stocheze numere negative, acestea stochează doar valori pozitive,
• obținând un interval util de la 0 la 65.535 (2 ^ 16) - 1). The Due stochează o
valoare de 4 biți (32 biți), variind de la 0 la 4.294.967.295 (2 ^ 32 - 1).
1.5 TIPURI DE DATE
• Word: Pe Arduino Uno și pe alte platforme bazate pe ATMEGA, un cuvânt stochează
un număr fara semn pe 16 biți. Pe Arduino Due si Zero, stochează un număr fara semn
pe 32 de biți.

• Long: Variabilele de tip Long sunt variabile de mărime extinsă pentru stocarea
numărului și stochează pe 32 biți (4 octeți), de la 2.147.483.648 la 2.147.483.647.
1.5 TIPURI DE DATE
• Unsigned long : sunt variabile de mărime extinsă pentru stocarea numărului și
stocarea pe 32 biți (4 octeți). Spre deosebire de variabilele lungile standard (Long),
cele lungile fara semn (unsigned long) nu vor stoca numere negative, ceea ce face ca
intervalul lor sa fie de la 0 la 4.294.967.295 (2^32 -1).

• Short: este un tip de date pe 16 biți. Pe toate platformele Arduinos (bazate pe


ATMega și ARM), o variabila Short stoceaza o valoare pe 16 biți (2 octeti). Aceasta
conduce la un interval de la -32,768 la 32,767 (valoarea minimă de -2^15 și o
valoare maximă de (2^15) - 1).
1.5 TIPURI DE DATE
• Float:Tipul de date folosit pentru reprezentarea numerelor reale (numere cu virgula
mobila sau numere care au un punct zecimal). Aceste numere sunt adesea folosite
pentru a aproxima valorile analogice și continue, deoarece acestea au o rezoluție mai
mare decât numerele întregi. Numerele în virgulă mobila pot fi in domeniul -
3.4028235E-38 până la 3.4028235E+38 (precizie 7 cifre). Sunt stocate sub formă de
informații de 32 biți (4 octeți).

• Double: Pe Arduino Uno și alte platforme bazate pe ATMEGA, acest tip de date
(numere reale cu dubla precizie) ocupă patru octeți. Pe Arduino Due, acest tip de date
ocupa 8-octeți (64 biți).
1.6 VARIABILE SI CONSTANTE
• După cum știm, în C++ variabilele despre care am învățat până acum trebuie declarate și odată cu
declararea li se alocă în memorie spațiu în conformitate cu tipul lor. Sistemul de operare alocă
fiecărui program, în memoria RAM, trei zone în care putem memora variabile:
• zona de date
• zona de stivă
• zona liberă (heap)
• O variabilă se caracterizează prin: clasa de memorare, vizibilitate, durata de viață, tipul variabilei
• Variabilele în limbajul de programare C/C++, pe care le utilizează si Arduino, au o proprietate
numită domeniu de aplicare. Un domeniu de aplicare este o regiune a programului și există trei
locuri unde pot fi variabile declarate:
• În interiorul unei funcții sau a unui bloc, caz in care se numesc variabile locale.
• În definirea parametrilor funcției, caz in care se numesc parametrii formali.
• În afara tuturor funcțiilor, caz in care se numesc variabile globale.
1.6 VARIABILE SI CONSTANTE
• Variabilele locale
Variabilele declarate în interiorul unei funcții sau bloc sunt numite variabile locale. Pot
fi folosite numai pentru enunțurile care se află în acea funcție sau bloc de cod.
1.6 VARIABILE SI CONSTANTE
• Variabilele globale: sunt definite în afara tuturor funcțiilor, de obicei în partea de sus a
programului. Variabilele globale își vor păstra valoarea pe toată durata de viață a
programului. O variabilă globală poate fi accesată de orice funcție. Adică este
disponibilă o variabilă globală pentru utilizare pe întregul program după declararea
acestuia.
1.7 OPERATORI
• Un operator este un simbol care îi spune compilatorului să efectueze anumite funcții
matematice sau logice. Limbajul C /C++ este bogată în operatori integrați și oferă
următoarele tipuri de operatori:
• Operatori aritmetici
• Operatori de comparație
• Operatori booleeni
• Operatori pe bit
• Operatori compuși.
1.7 OPERATORI
• Operatori aritmetici- Exemplu
1.7 OPERATORI
• Operatori comparatie- Exemple
1.7 OPERATORI
• Operatori comparatie-
Exemple
1.7 OPERATORI
• Operatori comparatie- Exemple continuare
1.7 OPERATORI
• Operatori booleeni
1.7 OPERATORI
• Operatori booleeni- Exemple
1.7 OPERATORI
• Operatori booleeni- Exemple continuare
1.7 OPERATORI
• Operatori pe biti
1.7 OPERATORI
• Operatori pe biti
1.7 OPERATORI
• Operatori pe biti
1.7 OPERATORI
• Operatori pe biti

S-ar putea să vă placă și