UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA FAKULTETA ZA MATEMATIKO IN FIZIKO Program: fizika - tehnika 8ýENJE PROGRAMSKEGA JEZIKA C++ NA PRIMERIH S PODROýJA MERJENJA IN KRMILJENJA DIPLOMSKO DELO Mentor: dr. Slavko KocijanþLþ, izr. prof. Kandidat: Primož Hladnik Somentor: dr. Boštjan Murovec, doc. Ljubljana, september, 2008
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
UNIVERZA V LJUBLJANI
PEDAGOŠKA FAKULTETA
FAKULTETA ZA MATEMATIKO IN FIZIKO
Program: fizika - tehnika
ENJE PROGRAMSKEGA JEZIKA C++NA PRIMERIH S PODRO JA MERJENJA
IN KRMILJENJADIPLOMSKO DELO
Mentor: dr. Slavko Kocijan , izr. prof. Kandidat: Primož Hladnik
Somentor: dr. Boštjan Murovec, doc.
Ljubljana, september, 2008
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
II
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
III
ZahvalaNajprej bi se rad zahvalil mentorju, izrednemu profesorju dr. Slavku Kocijan u,
za potrpežljivo branje diplomskega dela in vseh predlaganih popravkov; dr.
Boštjanu Murovcu za vso pomo pri literaturi, programiranju in za moralno
vzpodbudo. Zahvala pa gre seveda tudi ženi Mojci in staršem, ki so me ves as
spremljali in me vzpodbujali pri študiju.
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
IV
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
V
Povzetek
Programski jezik C++ velja za enega najbolj univerzalnih programskih jezikov. V
okviru brezpla nega programskega razvojnega okolja Microsoft Visual C++
Express, ki je del Microsoft Visual Studio Express 2008, je odli no razvojno
orodje C++ dostopno komurkoli.
Diplomsko delo, za razliko od tradicionalnega spoznavanja sintakse
programskega jezika, temelji na u enju preko že narejenih osnovnih primerov
programske kode, temelje ih na ra unalniškem krmiljenju in merjenju. Prvi koraki
v u enje jezika temeljijo na prižiganju posameznih LED diod (lu k), branju stanja
stikal, signalov s potenciometra ali fotoupora itd. Pri tem je osnova USB vhodno-
izhodni merilno-krmilni vmesnik eProDas-SC1, v nadaljevanju vmesnik, razvit v
okviru projekta ComLab.
Klju ne besede: eProDas, u enje programiranja, C++, merjenje, krmiljenje,
programiranje, ra unalništvo, pou evanje robotike
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
VI
Abstract
Learning programming language C++ based on dataacquisition examples
The C++ Programming language is known to be one of the most universal
programming languages. Within the framework of Microsoft Visual Studio
Express 2008, it is possible to obtain a free copy of Microsoft Visual C++ Express
2008, which is an excellent development tool accessible to everybody.
Contrary to traditional teaching of programming languages, this thesis
approaches teaching through prepared pieces of code, based on computer data
acquisition system. First steps into teaching starts with turning on LED diodes,
reading of switches as well as signals from potentiometer, photo resistor etc. An
USB data acquisition module eProDas-SC1, which was developed within the
ComLab Project, is used for the task of communication between personal
computer and attached periphery.
Keywords: eProDas, learning programming, C++, data acquisition,
microcontroller, programming, teaching robotics
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
VII
Kazalo
1 Uvod...............................................................................................................12 Programski jezik C++ .....................................................................................3
2.1 Zgodovina C++........................................................................................4
2.2 C++ v šolstvu ..........................................................................................5
2.3 C++ v Industriji ........................................................................................5
2.4 Prednosti in slabosti jezika C++ ..............................................................6
3 Koncept u enja programskih jezikov na primerih s podro ja merjenja inkrmiljenja. ..............................................................................................................74 Priprava programske opreme.......................................................................11
5.10 Povzetek ukazov za vmesnik ................................................................28
5.11 Krmiljenje kora nega motorja................................................................29
6 Za etek novega projekta ..............................................................................326.1 Gradnja programa »Model uli ne razsvetljave« ....................................35
6.2 Lu ke Knight Rider................................................................................41
7 Sestava programov v konzoli .......................................................................497.1 Naloge za izpis v konzoli .......................................................................50
ki nam jo vrne trackbar1 moramo konvertirati v decimalni zapis (double)DOutNum(PortD, 9);Wait(System::Convert::ToDouble(trackBar1->Value)/1000);DOutNum(PortD, 10);Wait(System::Convert::ToDouble(trackBar1->Value)/1000);DOutNum(PortD, 6);Wait(System::Convert::ToDouble(trackBar1->Value)/1000);}if (smer==2){//pogoj, koda v zavitih oklepajih se izvrši v
primeru, da je smer enaka 2DOutNum(PortD, 6);Wait(System::Convert::ToDouble(trackBar1->Value)/1000);DOutNum(PortD, 10);Wait(System::Convert::ToDouble(trackBar1->Value)/1000);DOutNum(PortD, 9);Wait(System::Convert::ToDouble(trackBar1->Value)/1000);DOutNum(PortD, 5);Wait(System::Convert::ToDouble(trackBar1->Value)/1000);}
for(int i=0; i<8; i++){//za nemo šteti pri i=0 izvedemo stavke in i pove ujemo za 1 dokler jemanjši od 8// i je v vsakem krogu/zanki število nBit, se pravi številka bita
DOutBit(PortB, i, 1); Wait(0.1); DOutBit(PortB, i, 0); }for(int i=6; i>-1; i--){
//za nemo šteti pri i=6 (7 lu ka od 8), in i zmanjšujemo za 1 dokler jeve ji od -1//i je v vsakem krogu/zanki enak nBit, se pravi številki bita na portuPortB
DOutBit(PortB, i, 1); Wait(0.1); DOutBit(PortB, i, 0); }
For zanka je zelo uporabna, saj nam prihrani veliko pisanja takrat, ko se del kode
pove a ali pomanjša za 1. For zanka je oblike kot v programski kodi (Programska
koda 6.8).
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
44
Programska koda 6.8: Prototip for zankefor(za etništevec; pogoj; pove anještevca){stavek;stavek;…}
Takoj za oklepajem se nahaja stavek z za etnim števcem, številom, ki mu
dolo imo za etno vrednost; nato primerjamo v drugem stavku vrednost s
pogojem, ki smo ga postavili (npr.: i<8; ) in nazadnje še pove amo ali
pomanjšamo števec za 1, da se le-ta z vsakim naslednjim obhodom približa
pogoju (npr.:i++ ali i--).
Za pregled že napisane kode poženemo Knight rider.sln v mapi primeri.
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
45
6.3 Iskalec svetlobe
V tej nalogi bomo uporabili vse dosedanje znanje programiranja vmesnika.
Sestavimo napravo Iskalec svetlobe (Slika 6.15). Napravo bomo krmilili tako, da
bo obra ala son ne celice proti izvoru svetlobe, da le-te ujamejo najve svetlobe
na svojo površino in tako proizvedejo im ve ji tok. Za pogon bomo uporabili
kora ni motor, ki ga krmilimo preko H-krmilja, ki nam omogo a ve je tokove,
primerne za poganjanje manjših nizkonapetostnih motorjev. Klju ni sestavni deli
na sliki (Slika 6.15): 1 - varnostno stikalo, 2 - son ne celice, 3 - fotoupor, 4 -
kora ni motor, 5 - izhod iz son nih celic, 6 - sponke, priklopljene na analogni
vhod Ch1 s katerimi merimo napetost na son nih celicah.
Slika 6.15: Iskalec svetlobe
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
46
Za varnost konstrukcije pa uporabimo stikalo, ki se sproži, e se celice preve
obrnejo v eno ali drugo smer. Shema vezave je na sliki (Slika 6.16).
Slika 6.16: Shema iskalca svetlobe
Osnovna ideja ja, da se smer vrtenja motorja spremeni, e se po primerjavi
zadnjih dveh meritev svetlobe vrednost na analognem vhodu, ki meri jakost
svetlobe, zmanjša. Koda s komentarji in razlago je v programski kodi
(Programska koda 6.9).
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
47
Programska koda 6.9: Koda programa Iskalec svetlobe/////////////deklaracija globalnih spremenljivk//////////////////////int svetloba1, svetloba2, svetloba3, smer;/////////////globalne funkcije, ki jih kli emo v asovniku///////////void test(){
if (DInBit(PortB, 0)==1) obrni(); //proženje varnostnstenga stikala}void obrni(){
Wait(0.1);if (smer==1) smer=2;else if (smer==2) smer=1;
}void branje(){ //branje iz izpis na zaslonsvetloba1=svetloba2;svetloba2=AIn10bNum(Ch0);label1->Text= "Svetlost= " + System::Convert::ToString(svetloba2);label3->Text= "Napetost= "+ System::Convert::ToString(AIn10bVol(Ch1))+" V";}void smer1(){
branje(); //bere analogne vhodeif (smer==1) smer1();//požene v desnoif (smer==2) smer2();//požene v levotest(); //preveri varnostno stikalobranje();if ((svetloba1>svetloba2)) {//primerjava zadnjih dveh meritev
Za pregled že napisane kode poženemo Iskalec svetlobe.sln v mapi primeri.
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
49
7 Sestava programov v konzoli
Vsak programski jezik ima dolo eno sintakso, pravila, kako pišemo program. Kaj
vsebuje vsaka programska koda jezika C++? Vsebuje »zaglavje« (ang. header),
ki vsebuje vrstice #include. Tu programska koda sporo i prevajalniku C++ naj
uporabi imena iz knjižnic, katerih ime (npr. <iostream> ali "eProDasCPPLib.h"
itd.) sledi programska koda (na primer Programska koda 7.1). Prazne vrstice
prevajalnik spregleda in nimajo posebnega pomena. Uporabne so v kolikor
izboljšajo preglednost in na pogled lo ijo »zaglavje« od ostalega dela kode.
Sledi bistvo programa, ki se za ne s funkcijo void main() ali int main().
Funkcijo main prevajalnik tudi prepozna kot za etek programa, ki smo ga napisali
ne glede na to, kje v programski kodi se nahaja.
Pomemben del so z zeleno barvo ozna eni //komentarji, ki jih dodamo
programski kodi, kadar želimo pove ati njeno preglednost in razumljivost, ozna iti
pomembna mesta in razložiti pomen napisanih vrstic. Komentarji se nahajajo za
dvema poševnicama “//” ali med “/*” in “*/”, z njimi pa postanejo kompleksnejši
programi razumljivejši tudi drugim.
V konzolnem na inu se danes programi zdijo neobi ajni, vendar nekateri v tem
vidijo tudi prednost, ker se tako laže vidi sintakso in se posve a le njej. Gumbi,
drsniki in podobni drugi objekti pa tu nimajo pomena, saj je vhodna enota
tipkovnica ali vmesnik
Programska koda 7.1: Primer kode za konzolo//datoteka je bila ustvarjena 25.7.2008#include "eProDasCPPLib.h" // knjižnica, ki upravlja z napravo eProDas#include <iostream> //standardna knjižnica, upravlja s podatki vkonzolivoid main() { eProDasInit(1); //zaženi eProDas napravo
DOutBit(PortB, 1, 1); //to je glavni del našega programa Wait(5); //po akamo 5 sekund eProDasClose();//odklopi eProDas napravo in po isti za seboj}
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
50
7.1 Naloge za izpis v konzoli
Naloge so zastavljene tako, da je najprej opisan namen naloge, kaj naj bi bil pri
konkretni nalogi cilj oziroma kon ni rezultat programiranja, nato sledi seznam
potrebnih elektri nih elementov (diod, uporov, stikal, fotouporov itd.). Navodilom
sledi primer celotne kode za program s komentarji in za kodo razlaga novih
ukazov. Podobno kot pri grafi nem na inu se lotimo gradnje tudi za konzolni
na in.
Nov projekt za nemo (Slika 7.1). Izberemo Win32 console application (Slika 7.2),
ga poimenujemo in kliknemo OK, nato next, izberemo Console application in
Empty project ter kliknemo Finish.
Slika 7.1: Izbira novega projekta v konzoli
Vsi primeri programov v konzoli se nahajo v mapi primeri/konzola/ (zaženete
datoteke .sln) in so poimenovani enako kot naslov naloge.
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
51
Slika 7.2: Izbira nastavitev projekta
Slika 7.3: Dodajanje nove CPP datoteke
V projekt dodamo še eProDasCPPLib.cpp datoteko (Slika 6.4).
Naloge so razdeljene v štiri sklope:
digitalni izhod, pri katerem se seznanimo s prižiganjem lu k
digitalni vhod, ki ga prožimo s stikalom
analogni vhod za branje napetosti na elementih
izpis meritev v tekstovno datoteko
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
52
7.2 Digitalni izhod
Na vmesniku vodnike in elektri ne elemente priklapljamo na brezvija ne sponke,
ozna ene s rko in številko (Slika 7.4).
Slika 7.4: Brezvija ne sponke (ang. Cage-clamp)
7.2.1 Prižiganje lu ke (Digitalni izhod)
Namen naloge:
Napisati program, s katerim vklopimo LED diodo.
Potrebujemo:
LED diodo in upornik med 300 in 1 k .
Najprej je potrebno na vmesnik eProDas priklju iti lu ke. V našem primeru so to
svetle e diode. Za svetle e diode je pomembno, kako jih vežemo. Daljšo nogico
na upor in krajšo na digitalni izhod na PortB (Slika 7.5) in (Slika 5.4).
Slika 7.5: Vezava svetle e diode
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
53
Pri predstavljanju sintakse se izogibamo podrobni razlagi vsake vrstice. Zaenkrat
so za nas pomembne samo vrstice, ki dajo na napravo eProDas viden rezultat.
Le-te so v nadaljevanju natisnjene krepko.
Prvo vajo bomo za eli neposredno na vmesniku eProDas. Prepišemo naslednje
vrstice v C++ program in poskušamo doumeti, kaj katera vrstica kode po ne. V
tej prvi nalogi je predstavljena klju na vrstica, ki prižge prvo LED diodo na
»PortB« (na vmesniku ozna eno z B0-B7) na prvem pinu, B0.
Programska koda 7.2: Prižiganje lu ke na digitalnem izhodu//Prižiganje lu ke (digtalni izhod)#include "eProDasCPPLib.h"void main() {
eProDasInit(1); //zaženi eProDas napravo
DOutBit(PortB, 0, 1);//Prižgemo prvo LED diodo na PortB, pin 0 eProDasClose();//odklopi eProDas napravo in po isti za seboj}
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
54
7.2.2 Prižiganje ve lu k
Namen naloge:
Napisati program, s katerim vklopimo ve LED diod.
Potrebujemo:
LED diode in upori med 300 in 1k .
Najprej na vmesnik eProDas priklopimo LED diode kot v prejšnji vaji (Slika 5.7),
ali pa priklopimo 8 LED diod na PortB, kot kaže slika (Slika 7.4).
Programska koda 7.3: Prižiganje ve lu k naenkrat//Prižiganje ve lu k naenkrat#include "eProDasCPPLib.h"void main(){ eProDasInit(1); DOutBit(PortB, 0, 1); DOutBit(PortB, 1, 1); DOutBit(PortB, 2, 1); eProDasClose();}
e želimo prižgati še ve lu k, potem samo dodamo vrstice, kar pa je zamudno,
e prižigamo vse lu ke na PortB, pa tudi prižgejo se isto asno, zato obstaja
na in, kako prižgati ve LED diod hkrati v eni vrstici.
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
55
7.2.3 Prižiganje ve lu k naenkrat
Namen naloge:
Napisati program, s katerim vklopimo ve LED diod hkrati v eni vrstici.
Potrebujemo:
LED diode in upornike med 300 in 1k . Vežemo jih tako kot pri prejšnjih vajah
(Slika 5.7).
Programska koda 7.4: Prižiganje ve lu k naenkrat for zanka//Prižiganje ve lu k naenkrat#include "eProDasCPPLib.h"void main(){
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
57
Lu ke spreminjajo stanje na 0,5 s.
e napišimo program, v katerem bodo lu ke utripnile desetkrat, stokrat ali
ve krat, bomo imeli kar precej dela. V primeru, da se isto stanje ponavlja, je bolj
smiselno, da uporabimo zanko.
V naslednjem primeru bo zanka opravila dvajset ponovitev vklopa in izklopa lu k.
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
58
7.2.5 Utripanje lu k (for zanka)
Namen naloge:
Napisati program, s katerim vklapljamo in izklapljamo ve LED diod hkrati tako,
da le-te utripnejo dvajsetkrat.
LED diode in upornike med 300 in 1k vežemo enako kot pri prejšnjih nekaj
vajah.
Programska koda 7.7: Utripanje lu k s for zanko//Utripanje lu k s for zanko#include "eProDasCPPLib.h"void main(){//naloži knjižnicoeProDasInit(1); //zaženi eProDas napravofor (int i=0; i<20; i++){
For zanka (Programska koda 7.7, natisnjena krepko) deluje tako, da na za etku
postavi spremeljivko i na ni , potem preveri, e je spremeljivka i manjša od 20,
izvrši kodo med zavitima oklepajema, nato pa i pove a za ena. Ta postopek
ponavlja dokler je i manjši od 20. Ko i doseže število 20 se zanka prekine.
Zanko lahko za vajo spremenimo tudi tako, da bo ponovila svoj potek tridesetkrat.
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
59
7.3 Digitalni vhod
Pri teh nalogah je digitalni vhod v vseh primerih prožen z mikrostikalom. Proženje
dogodkov je možno na ve na inov:
dogodek proži napetost +5 voltov ali napetost 0 V na digitalnem vhodu (logi na 1
ali 0), pri tem stikalo vežemo na dva na ina, kot kaže slika (Slika 5.9) in shemi
(Slika 7.8).
dogodek proži prehod na digitalnem vhodu iz 0 na +5 V (Slika 7.6)
dogodek proži prehod na digitalnem vhodu iz +5 na 0 V (Slika 7.7)
7.3.1 Vklop LED diode s stikalom
Namen naloge:
Napisati program, s katerim vklapljamo LED diodo s pritiskom na stikalo.
Potrebujemo:
LED diodo, dva upornika med 300 in 1k ter stikalo vezano kot kaže shema
(Slika 7.6).
Slika 7.6: Vezava stikala in LED diode, vklop pri + 5 V
Vežemo lahko še na drug na in, tako, da se zgodi vklop pri 0 V (Slika 7.7).
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
60
Slika 7.7: Vezava stikala in LED diode, vklop pri 0 V
Pri tej nalogi se sre amo s pogojem, da se mora ob sklenjenem stikalu prižgati
LED dioda (Programska koda 7.8).
Programska koda 7.8: Vklop LED diode s stikalom//Vklop LED diode s stikalom#include "eProDasCPPLib.h"void main(){//naloži knjižnicoeProDasInit(1); //zaženi eProDas napravofor (;;){
if (DInBit(PortD, 0)==1)DOutBit(PortB, 0, 1);
else DOutBit(PortB, 0, 0);}}
Za for zanko nismo podali nobenega pogoja, zato se le-ta ponavlja v nedogled
(Programska koda 7.8).
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
61
7.3.2 Prekinitev utripanja lu k s stikalom
Namen naloge:
Napisati program, s katerim bodo lu ke neprestano utripale na 0,5 s. Utripanje pa
prekinemo s pritiskom na stikalo.
Potrebujemo:
dva upora od 300 do 1k , mikrostikalo, LED diodo.
Programska koda 7.9: prekinitev utripanja lu k s stikalom#include "eProDasCPPLib.h"void main(){ eProDasInit(1); //zaženi eProDas napravodo {
}while (DInBit(PortD, 0)==1);//zanka se prekine, e je stikalovklopljenoeProDasClose();}
Program ek prekinemo s pritiskom na stikalo, ki je priklopljeno na D0 in + 5 V
(Slika 7.8 - levo). Stikalo nastavimo tako, da ob pritisku preide iz stanja + 5 V na
stanje 0 V. Kako izgleda vezje in programska koda, e se zanka prekine, ko je
stanje na D0 + 5 V?
Slika 7.8: Vezava stikala na vmesnik + 5 V in 0 V.
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
62
7.4 Analogni vhod
Vseh 12 analognih vhodov na napravi eProDas-SC1 je zapisanih v tabeli na
za etku (Tabela 5.1)
Z analognim vhodom lahko merimo napetosti od 0 do + 5 V. V ta namen
uporabimo ukaz AIn10bNum(Ch0), ki prebere in zapiše 10-bitno vrednost
(210=1024) ali ukaz AIn10bVol(Ch0), ki vrnjeno numeri no vrednost že prera una
v napetost po ena bi (Ena ba 5.1).
7.4.1 Branje numeri ne vrednosti in izpis na zaslon
Namen naloge:
Napisati program, ki bo pogledal na analogni vhod in ga izpisal na zaslon.
Prenehanje branja prekinemo s pritiskom na stikalo.
Potrebujemo:
fotoupor, dva 1k upora, stikalo.
Za naslednjo nalogo priklopite na vmesnik fotoupor. Za fotoupor je zna ilno, da
spremeni svoje lastnosti, kadar ga osvetlimo. Osvetljenemu se upornost zmanjša,
zatemnjenemu pa pove a. Fotoupor je lahko vezan na dva na ina, tako kot kaže
slika (Slika 6.6). Vezava na levi strani vrne število bolj proti 1023, ko je fotoupor
osvetljen. Ko ni osvetljen, vrne število, ki gre proti 0. Vezava na desni pa ravno
obratno. Ko je fotoupor osvetljen, vrne število, ki gre proti 0 in ko ni osvetljen,
proti 1023 (Programska koda 7.10).
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
63
Programska koda 7.10: Branje numeri ne vrednosti in izpis na zaslon#include "eProDasCPPLib.h"#include <iostream>//naloži knjižnico, ki upravlja z vhodi natipkovnici in izhodi na zaslonvoid main () {
Izpis na zaslon poteka tako, da zapišemo std::cout, sledita dva operatorja <<,nato pa besedilo v dvojnih narekovajih. e želimo izpisati še kaj, samo dodamo
operatorja in besedilo v narekovajih. Namesto besedila v narekovajih lahko
uporabimo spremenljivko, katere vsebina se potem izpiše na zaslon. Stavek
kon amo s podpi jem »;«.
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
64
7.4.2 Branje analognega vhoda in izpis napetosti na zaslon
Namen naloge:
Napisati program, s katerim preberemo napetosti in jih izpišemo na zaslon
(Programska koda 7.11).
Potrebujemo potenciometer, ki ga priklopimo na A0 (Ch0), kot kaže slika (Slika
5.16). Program prekinemo s pritiskom na stikalo, vezano na D0.
Programska koda 7.11: Branje analognega vhoda in izpis napetosti na zaslon//merjenje napetosti na analognem vhodu#include "eProDasCPPLib.h"#include <iostream>using namespace std; //to vrstico napišemo, da nam ni potrebno pisatistd::coutvoid main () {
eProDasInit(1); //zaženi eProDas napravo
do{cout<<"Napetost na analognem vhodu je:";double num;num = AIn10bNum(Ch0);double napetost;napetost= AIn10bVol(Ch0);
cout<< napetost<<"\tV\n"; //\t je tabulator \n pa nova vrstica}while (DInBit(PortD, 0)==0); //stikalo za prekinitev izvajanja
programaeProDasClose();
}
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
65
7.4.3 Model uli ne razsvetljave v konzolskem na inu
V tem primeru bomo uporabili kombinacijo analognega vhoda in digitalnega
izhoda.
Vezje vežemo kot na sliki (Slika 7.9).
Slika 7.9: Vezava modela uli ne razsvetljave
Programska koda 7.12: Model uli ne razsvetljave//model uli ne razsvetljave//ta program vklopi lu i, ko postane pretemno#include "eProDasCPPLib.h"#include <iostream> //vkljucevanje knjiznice za vhod iz tipkovnice inizhod na zaslonvoid main () {
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
66
7.5 Shranjevanje podatkov meritev
Pri merjenju karakteristike elektronskih elementov pogosto potrebujemo ve
zaporednih meritev v kratkem asu, podatke pa potem želimo obdelati kasneje v
kakšen drugem programu, kot je na primer Excell in izdelati graf poteka meritve.
V tem primeru potrebujemo program, ki nam bo podatke meritev shranil v
datoteko.
7.5.1 Shranjevanje vrstice v datoteko
Preden se lotimo zapisovanja meritev v datoteko, najprej poglejmo, kako
zapišemo podatke v datoteko (Programska koda 7.13). Za zapisovanje v
datoteko potrebujemo knjižnico fstream, ki jo vklju imo v projekt z ukazom
#include <fstream> v zaglavju (ang. header) programa.
Programska koda 7.13: Shranjevanje vrstice v datoteko//zapis v datoteko#include "eProDasCPPLib.h"#include "iostream"#include "fstream"//knjižnica za delo z datotekamiusing namespace std; //to vrstico napišemo, da nam ni potrebno pisatistd::coutvoid main () {
eProDasInit(1); //zaženi eProDas napravoofstream datoteka;datoteka.open ("meritve.txt");datoteka << "Tu bomo shranili podatke! \n";datoteka.close();//zapremo in shranimo datotekocout<<"\"Tu bomo shranili podatke\", je bilo zapisano v datoteko
meritve.txt";eProDasClose();
}
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
67
7.5.2 Shranjevanje meritve praznjenja kondenzatorja v datoteko
Naloga:
Sestaviti vezje in spisati program, ki bo ob vklopu stikala prebral napetost na
analognem vhodu in zapisal njegovo vrednost v datoteko kondenzator.txt
(Programska koda 7.14).
Potrebujemo:
kondenzator, dva 1 k upornika, dve stikali
Vezje vežemo kot na shemi (Slika 7.10):
Slika 7.10: Vezava vezja za merjenje praznjenja kondenzatorja
enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik
68
Programska koda 7.14: Zapis meritve praznjenja kondenzatorja v datoteko//zapis meritve praznjenja kondenzatorja v datoteko#include "eProDasCPPLib.h"#include "iostream"#include "fstream"//knjižnica za delo z datotekamiusing namespace std; //to vrstico napišemo, da nam ni potrebno pisatistd::coutfloat napetost();void main () {
eProDasInit(1); //zaženi eProDas napravo
ofstream datoteka;datoteka.open ("kondenzator.txt");//ustvari in odpre datoteko
kondenzator.txtdatoteka << "zaporedna vrstica\t napetost\n";//zapiše prvo
vrstico
while(DInBit(PortD, 0)==1){
}for(int i=0;DInBit(PortD, 0)==0; i++){
//for zanka kli e funkcijo napetost() dokler je stikalovklopljeno
datoteka << i <<"\t\t"<< napetost() <<"V\n";//izpis vdatoteko
}
datoteka.close();cout<<"Podatki zapisani v datoteko kondenzator.txt";//obvestilo o
zapisu v datotekoWait(2); //pred izhodom iz programa po akamo 2 sekundi, da lahko