Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@1:921e6706811e, 2015-12-23 (annotated)
- Committer:
- filabutum
- Date:
- Wed Dec 23 11:14:09 2015 +0000
- Revision:
- 1:921e6706811e
- Parent:
- 0:cc685a553e75
Diplomski rad E504
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| filabutum | 1:921e6706811e | 1 | //************************Filip Butumović - Diplomski rad br. E504**************************** |
| filabutum | 1:921e6706811e | 2 | //*****Realizacija dvopoložajnog regulatora temperature upotrebom mbed mikroupravljača******** |
| filabutum | 1:921e6706811e | 3 | |
| filabutum | 0:cc685a553e75 | 4 | #include "mbed.h" |
| filabutum | 0:cc685a553e75 | 5 | #include "rtos.h" |
| filabutum | 0:cc685a553e75 | 6 | |
| filabutum | 0:cc685a553e75 | 7 | BusOut Seg1(p12, p11, p10, p9, p8, p7, p6, p5); //Izlazi segmenata |
| filabutum | 0:cc685a553e75 | 8 | BusOut Disp1(p30,p29,p28,p27); //Izlazi pojedinih zaslona |
| filabutum | 0:cc685a553e75 | 9 | InterruptIn TP1(p24); //Signal lijeve tipke |
| filabutum | 0:cc685a553e75 | 10 | DigitalIn TP2(p25); //Signal srednje tipke |
| filabutum | 0:cc685a553e75 | 11 | DigitalIn TP3(p26); //Signal desne tipke |
| filabutum | 0:cc685a553e75 | 12 | AnalogIn TempIN(p20); //Analogni ulaz vrijednosti senzora temperature |
| filabutum | 0:cc685a553e75 | 13 | Timer uzorkovanje; //Citanje analognog ulaza s vremenskom odgodom, uzorkovanje |
| filabutum | 0:cc685a553e75 | 14 | Serial pc(USBTX, USBRX); //Serijska komunikacija između mikroupravljača i PC-a putem USB sučelja |
| filabutum | 0:cc685a553e75 | 15 | PwmOut AKT(p21); //Aktuator (grijac) |
| filabutum | 0:cc685a553e75 | 16 | |
| filabutum | 0:cc685a553e75 | 17 | char SegConvert(char SegValue); |
| filabutum | 0:cc685a553e75 | 18 | const int disp[5]= {0x01,0x02,0x04,0x00,0x08}; |
| filabutum | 0:cc685a553e75 | 19 | int menu=0, T1_Temp=0, T2_Temp=0, T3_Temp=0,Temp_SP=0, Temp_DB=0, Temp1=0, Temp2=130, TempIN1=0, TempIN2=1, NumbAct=0,counter=0, i=0,Numb=0, AKT_marker=0,Temp_Act=0; |
| filabutum | 0:cc685a553e75 | 20 | //Temp_SP - Zadana vrijednost temperature, Temp_DB - Zadana vrijednost tolerancije (Dead-Band), Temp1=x1 (min u rasponu), Temp2=x2(max u rasponu), TempIN1=y1, TempIN2=y2, Temp_Act - Stvarna izmjerena temperatura (skalirana) |
| filabutum | 0:cc685a553e75 | 21 | float AN_IN_Temp=0; //Varijabla u koju se privremeno sprema vrijednost učitane analogne vrijednosti |
| filabutum | 0:cc685a553e75 | 22 | |
| filabutum | 0:cc685a553e75 | 23 | int Reference(int Ref); |
| filabutum | 0:cc685a553e75 | 24 | void MenuSwitch(void); |
| filabutum | 0:cc685a553e75 | 25 | |
| filabutum | 0:cc685a553e75 | 26 | void funkc_prikaz(void const *argument)//Funkcija za upravljanje prikazom 7 segmentnog zaslona |
| filabutum | 0:cc685a553e75 | 27 | { |
| filabutum | 0:cc685a553e75 | 28 | while(true) { |
| filabutum | 0:cc685a553e75 | 29 | TP1.rise(&MenuSwitch); //Pritiskom na lijevo tipku, mjenja se vrsta prikaza na zaslonu |
| filabutum | 0:cc685a553e75 | 30 | uzorkovanje.start(); |
| filabutum | 0:cc685a553e75 | 31 | if (uzorkovanje.read_ms()>=100) { |
| filabutum | 0:cc685a553e75 | 32 | AN_IN_Temp=TempIN; |
| filabutum | 0:cc685a553e75 | 33 | Temp_Act=Temp1+(((AN_IN_Temp-TempIN1)*(Temp2-Temp1))/(TempIN2-TempIN1));//Jednadzba pravca kroz dvije tocke - skaliranje ulazne vrijednosti temperature |
| filabutum | 0:cc685a553e75 | 34 | uzorkovanje.reset(); |
| filabutum | 0:cc685a553e75 | 35 | } |
| filabutum | 0:cc685a553e75 | 36 | //pc.printf("Stvarna vrijednost:%f Skalirana vrijednost:%d Stanje aktuatora:%d\n\r",AN_IN_Temp, Temp_Act, AKT_marker); //Ispis vrijednosti na terminalu |
| filabutum | 0:cc685a553e75 | 37 | if(menu==0) { //Prikazuje vrijednost stvarne temperature ("A" na zaslonu) |
| filabutum | 0:cc685a553e75 | 38 | NumbAct=Temp_Act; |
| filabutum | 0:cc685a553e75 | 39 | } |
| filabutum | 0:cc685a553e75 | 40 | if(menu==1) { //Prikazuje vrijednost referentne temperature ("S" na zaslonu) |
| filabutum | 0:cc685a553e75 | 41 | Temp_SP=Reference(Temp_SP); |
| filabutum | 0:cc685a553e75 | 42 | NumbAct=Temp_SP; |
| filabutum | 0:cc685a553e75 | 43 | } |
| filabutum | 0:cc685a553e75 | 44 | if(menu==2) { //Prikazuje vrijednost tolerancije na zaslonu ("d" na zaslonu) |
| filabutum | 0:cc685a553e75 | 45 | Temp_DB=Reference(Temp_DB); |
| filabutum | 0:cc685a553e75 | 46 | NumbAct=Temp_DB; |
| filabutum | 0:cc685a553e75 | 47 | } |
| filabutum | 0:cc685a553e75 | 48 | if(NumbAct<10) { //Ako je broj koji se treba prikazati jednoznamenkasti, upravljanje vrsi ova petlja |
| filabutum | 0:cc685a553e75 | 49 | for(i=0; i<2; i++) { |
| filabutum | 0:cc685a553e75 | 50 | if(i==0) { |
| filabutum | 0:cc685a553e75 | 51 | Disp1=disp[i]; |
| filabutum | 0:cc685a553e75 | 52 | Seg1=SegConvert(NumbAct); |
| filabutum | 0:cc685a553e75 | 53 | } |
| filabutum | 0:cc685a553e75 | 54 | if(i==1) { |
| filabutum | 0:cc685a553e75 | 55 | Disp1=disp[4]; |
| filabutum | 0:cc685a553e75 | 56 | Seg1=SegConvert(menu+11); |
| filabutum | 0:cc685a553e75 | 57 | } |
| filabutum | 0:cc685a553e75 | 58 | wait(0.001); |
| filabutum | 0:cc685a553e75 | 59 | } |
| filabutum | 0:cc685a553e75 | 60 | } |
| filabutum | 0:cc685a553e75 | 61 | if(NumbAct>=10&&NumbAct<100) { //Ako je broj koji se treba prikazati dvoznamenkasti, upravljanje vrsi ova petlja |
| filabutum | 0:cc685a553e75 | 62 | for(i=0; i<3; i++) { |
| filabutum | 0:cc685a553e75 | 63 | if(i<2) { |
| filabutum | 0:cc685a553e75 | 64 | if(i==0) { |
| filabutum | 0:cc685a553e75 | 65 | Numb=NumbAct%10; |
| filabutum | 0:cc685a553e75 | 66 | } |
| filabutum | 0:cc685a553e75 | 67 | if(i==1) { |
| filabutum | 0:cc685a553e75 | 68 | Numb=NumbAct/10; |
| filabutum | 0:cc685a553e75 | 69 | } |
| filabutum | 0:cc685a553e75 | 70 | Disp1=disp[i]; |
| filabutum | 0:cc685a553e75 | 71 | Seg1=SegConvert(Numb); |
| filabutum | 0:cc685a553e75 | 72 | } |
| filabutum | 0:cc685a553e75 | 73 | if(i==2) { |
| filabutum | 0:cc685a553e75 | 74 | Disp1=disp[4]; |
| filabutum | 0:cc685a553e75 | 75 | Seg1=SegConvert(menu+11); |
| filabutum | 0:cc685a553e75 | 76 | } |
| filabutum | 0:cc685a553e75 | 77 | wait(0.001); |
| filabutum | 0:cc685a553e75 | 78 | } |
| filabutum | 0:cc685a553e75 | 79 | |
| filabutum | 0:cc685a553e75 | 80 | } |
| filabutum | 0:cc685a553e75 | 81 | if(NumbAct>=100&&NumbAct<1000) { //Ako je broj koji se treba prikazati troznamenkasti, upravljanje vrsi ova petlja |
| filabutum | 0:cc685a553e75 | 82 | for(i=0; i<4; i++) { |
| filabutum | 0:cc685a553e75 | 83 | if(i<3) { |
| filabutum | 0:cc685a553e75 | 84 | if(i==0) { |
| filabutum | 0:cc685a553e75 | 85 | Numb=NumbAct%10; |
| filabutum | 0:cc685a553e75 | 86 | } |
| filabutum | 0:cc685a553e75 | 87 | if(i==1) { |
| filabutum | 0:cc685a553e75 | 88 | Numb=NumbAct/10; |
| filabutum | 0:cc685a553e75 | 89 | Numb=Numb%10; |
| filabutum | 0:cc685a553e75 | 90 | } |
| filabutum | 0:cc685a553e75 | 91 | if(i==2) { |
| filabutum | 0:cc685a553e75 | 92 | Numb=NumbAct/100; |
| filabutum | 0:cc685a553e75 | 93 | } |
| filabutum | 0:cc685a553e75 | 94 | Disp1=disp[i]; |
| filabutum | 0:cc685a553e75 | 95 | Seg1=SegConvert(Numb); |
| filabutum | 0:cc685a553e75 | 96 | } |
| filabutum | 0:cc685a553e75 | 97 | if(i==3) { |
| filabutum | 0:cc685a553e75 | 98 | Disp1=disp[4]; |
| filabutum | 0:cc685a553e75 | 99 | Seg1=SegConvert(menu+11); |
| filabutum | 0:cc685a553e75 | 100 | } |
| filabutum | 0:cc685a553e75 | 101 | wait(0.00075); |
| filabutum | 0:cc685a553e75 | 102 | } |
| filabutum | 0:cc685a553e75 | 103 | } |
| filabutum | 0:cc685a553e75 | 104 | } |
| filabutum | 0:cc685a553e75 | 105 | } |
| filabutum | 0:cc685a553e75 | 106 | void MenuSwitch() //Funkcija za promjenu prikaza na zaslonu, izbornik (0-stvarna temperatura, 1-zadavanje referentne vrijednosti, 2- zadavanje tolerancije |
| filabutum | 0:cc685a553e75 | 107 | { |
| filabutum | 0:cc685a553e75 | 108 | menu=menu+1; |
| filabutum | 0:cc685a553e75 | 109 | if(menu>2) { |
| filabutum | 0:cc685a553e75 | 110 | menu=0; |
| filabutum | 0:cc685a553e75 | 111 | } |
| filabutum | 0:cc685a553e75 | 112 | } |
| filabutum | 0:cc685a553e75 | 113 | |
| filabutum | 0:cc685a553e75 | 114 | char SegConvert(char SegValue) //Funkcija koja dekodira broj za ispravan prikaz na zaslonu 7 segmentnog zaslona |
| filabutum | 0:cc685a553e75 | 115 | { |
| filabutum | 0:cc685a553e75 | 116 | char SegByte=0x00; |
| filabutum | 0:cc685a553e75 | 117 | switch(SegValue) { |
| filabutum | 0:cc685a553e75 | 118 | case 0 : |
| filabutum | 0:cc685a553e75 | 119 | SegByte=0x03; // Broj 0 |
| filabutum | 0:cc685a553e75 | 120 | break; |
| filabutum | 0:cc685a553e75 | 121 | case 1 : |
| filabutum | 0:cc685a553e75 | 122 | SegByte=0x9F; // Broj 1 |
| filabutum | 0:cc685a553e75 | 123 | break; |
| filabutum | 0:cc685a553e75 | 124 | case 2 : |
| filabutum | 0:cc685a553e75 | 125 | SegByte=0x25; // Broj 2 |
| filabutum | 0:cc685a553e75 | 126 | break; |
| filabutum | 0:cc685a553e75 | 127 | case 3 : |
| filabutum | 0:cc685a553e75 | 128 | SegByte=0x0D; // Broj 3 |
| filabutum | 0:cc685a553e75 | 129 | break; |
| filabutum | 0:cc685a553e75 | 130 | case 4 : |
| filabutum | 0:cc685a553e75 | 131 | SegByte=0x99; // Broj 4 |
| filabutum | 0:cc685a553e75 | 132 | break; |
| filabutum | 0:cc685a553e75 | 133 | case 5 : |
| filabutum | 0:cc685a553e75 | 134 | SegByte=0x49; // Broj 5 |
| filabutum | 0:cc685a553e75 | 135 | break; |
| filabutum | 0:cc685a553e75 | 136 | case 6 : |
| filabutum | 0:cc685a553e75 | 137 | SegByte=0x41; // Broj 6 |
| filabutum | 0:cc685a553e75 | 138 | break; |
| filabutum | 0:cc685a553e75 | 139 | case 7 : |
| filabutum | 0:cc685a553e75 | 140 | SegByte=0x1B; // Broj 7 |
| filabutum | 0:cc685a553e75 | 141 | break; |
| filabutum | 0:cc685a553e75 | 142 | case 8 : |
| filabutum | 0:cc685a553e75 | 143 | SegByte=0x01; // Broj 8 |
| filabutum | 0:cc685a553e75 | 144 | break; |
| filabutum | 0:cc685a553e75 | 145 | case 9 : |
| filabutum | 0:cc685a553e75 | 146 | SegByte=0x09; // Broj 9 |
| filabutum | 0:cc685a553e75 | 147 | break; |
| filabutum | 0:cc685a553e75 | 148 | case 10 : |
| filabutum | 0:cc685a553e75 | 149 | SegByte=0xFE; // Decimalna tocka |
| filabutum | 0:cc685a553e75 | 150 | break; |
| filabutum | 0:cc685a553e75 | 151 | case 11 : |
| filabutum | 0:cc685a553e75 | 152 | SegByte=0x11; // "A" kao "Actual" |
| filabutum | 0:cc685a553e75 | 153 | break; |
| filabutum | 0:cc685a553e75 | 154 | case 12 : |
| filabutum | 0:cc685a553e75 | 155 | SegByte=0x49; // "S" kao "Setpoint" |
| filabutum | 0:cc685a553e75 | 156 | break; |
| filabutum | 0:cc685a553e75 | 157 | case 13 : |
| filabutum | 0:cc685a553e75 | 158 | SegByte=0x85; // "d" kao "Dead Band" |
| filabutum | 0:cc685a553e75 | 159 | break; |
| filabutum | 0:cc685a553e75 | 160 | } |
| filabutum | 0:cc685a553e75 | 161 | return SegByte; |
| filabutum | 0:cc685a553e75 | 162 | } |
| filabutum | 0:cc685a553e75 | 163 | int Reference(int Ref)//Funkcija koja generira broj koji se zapisuje u varijablu reference ili tolerancije, ovisno koja ju pozove |
| filabutum | 0:cc685a553e75 | 164 | { |
| filabutum | 0:cc685a553e75 | 165 | counter=Ref; |
| filabutum | 0:cc685a553e75 | 166 | if(TP2==0) { |
| filabutum | 0:cc685a553e75 | 167 | T2_Temp=0; //Tipka 2 ako je u "nuli", preslikava se stanje u privremenu memoriju |
| filabutum | 0:cc685a553e75 | 168 | } |
| filabutum | 0:cc685a553e75 | 169 | if(TP3==0) { |
| filabutum | 0:cc685a553e75 | 170 | T3_Temp=0; //Tipka 3 ako je u "nuli", preslikava se stanje u privremenu memoriju |
| filabutum | 0:cc685a553e75 | 171 | } |
| filabutum | 0:cc685a553e75 | 172 | if((T2_Temp==0&&TP2==1)||(T2_Temp==1&&TP2==0)) {//Prethodno zapamceno stanje T2 i trenutno stanje tipke T2 ako je razlicito brojac se uvecava za jedan |
| filabutum | 0:cc685a553e75 | 173 | counter++; |
| filabutum | 0:cc685a553e75 | 174 | } |
| filabutum | 0:cc685a553e75 | 175 | if((T3_Temp==0&&TP3==1)||(T3_Temp==1&&TP3==0)) {//Prethodno zapamceno stanje T3 i trenutno stanje tipke T3 ako je razlicito brojac se umanjuje za jedan |
| filabutum | 0:cc685a553e75 | 176 | counter--; |
| filabutum | 0:cc685a553e75 | 177 | } |
| filabutum | 0:cc685a553e75 | 178 | if(counter<=0) { //Limit minimalnog moguceg broja za odredivanje reference |
| filabutum | 0:cc685a553e75 | 179 | counter=0; |
| filabutum | 0:cc685a553e75 | 180 | } |
| filabutum | 0:cc685a553e75 | 181 | if(counter>=999) { //Limit maksimalnog moguceg broja za odredivanje reference |
| filabutum | 0:cc685a553e75 | 182 | counter=999; |
| filabutum | 0:cc685a553e75 | 183 | } |
| filabutum | 0:cc685a553e75 | 184 | if(TP2==1) { |
| filabutum | 0:cc685a553e75 | 185 | T2_Temp=1; //Tipka 2 ako je u "jedinici", preslikava se stanje u privremenu memoriju |
| filabutum | 0:cc685a553e75 | 186 | } |
| filabutum | 0:cc685a553e75 | 187 | if(TP3==1) { |
| filabutum | 0:cc685a553e75 | 188 | T3_Temp=1; //Tipka 3 ako je u "jedinici", preslikava se stanje u privremenu memoriju |
| filabutum | 0:cc685a553e75 | 189 | } |
| filabutum | 0:cc685a553e75 | 190 | return counter; |
| filabutum | 0:cc685a553e75 | 191 | } |
| filabutum | 0:cc685a553e75 | 192 | int main() |
| filabutum | 0:cc685a553e75 | 193 | { |
| filabutum | 0:cc685a553e75 | 194 | Thread petlja2(funkc_prikaz); //Pozivanje funkcije koja ce se paralelno izvrsavati sa glavnom funkcijom |
| filabutum | 0:cc685a553e75 | 195 | AKT.period(0.01); |
| filabutum | 0:cc685a553e75 | 196 | while(1) { |
| filabutum | 0:cc685a553e75 | 197 | while((Temp_SP+Temp_DB)>Temp_Act) { //Glavna petlja - dvopolozajna regulacija. Ako je zadana temperatura veca od stvarne, pali se grijac |
| filabutum | 0:cc685a553e75 | 198 | if(AKT_marker==1) {} |
| filabutum | 0:cc685a553e75 | 199 | else { |
| filabutum | 0:cc685a553e75 | 200 | AKT=0.5; |
| filabutum | 0:cc685a553e75 | 201 | AKT_marker=1; |
| filabutum | 0:cc685a553e75 | 202 | } |
| filabutum | 0:cc685a553e75 | 203 | } |
| filabutum | 0:cc685a553e75 | 204 | while((Temp_SP-Temp_DB)<Temp_Act) { //Glavna petlja - dvopolozajna regulacija. Ako je zadana temperatura manja od stvarne, gasi se grijac |
| filabutum | 0:cc685a553e75 | 205 | if(AKT_marker==1) { |
| filabutum | 0:cc685a553e75 | 206 | AKT=0; |
| filabutum | 0:cc685a553e75 | 207 | AKT_marker=0; |
| filabutum | 0:cc685a553e75 | 208 | } else { |
| filabutum | 0:cc685a553e75 | 209 | } |
| filabutum | 0:cc685a553e75 | 210 | } |
| filabutum | 0:cc685a553e75 | 211 | } |
| filabutum | 0:cc685a553e75 | 212 | } |