US, Vjezba 3 Stol 8, Amer Surkovic, Mirza Music Zadatak 2
Dependencies: SPI_TFT_ILI9341 TFT_fonts mbed
main.cpp@0:3f1c59a2b655, 2016-03-18 (annotated)
- Committer:
- 2016US_AmerSurkovic
- Date:
- Fri Mar 18 14:50:13 2016 +0000
- Revision:
- 0:3f1c59a2b655
US, Vjezba 3 Stol 8, Amer Surkovic, Mirza Music Zadatak 2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
2016US_AmerSurkovic | 0:3f1c59a2b655 | 1 | #include "mbed.h" |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 2 | #define dp23 P0_0 |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 3 | |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 4 | #include "stdio.h" |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 5 | #include "SPI_TFT_ILI9341.h" |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 6 | #include "string" |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 7 | #include "Arial12x12.h" |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 8 | #include "Arial24x23.h" |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 9 | #include "Arial28x28.h" |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 10 | #include "font_big.h" |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 11 | |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 12 | SPI_TFT_ILI9341 TFT(dp2,dp1,dp6,dp24,dp23,dp25,"TFT"); // mosi, miso, sclk, cs, reset, dc |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 13 | |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 14 | // LM35 temperaturni senzor daje na izlazu napon u funkciji od temperature |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 15 | // 0V->0C; 1V->100C |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 16 | AnalogIn napon(dp9); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 17 | |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 18 | int vratiNapon_mV(float napon){ |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 19 | // Mnozimo sa 1000 da dobijemo napon u mili voltima |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 20 | // jer se trazi tacnost od 1mV |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 21 | napon *= 1000; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 22 | int cijeliDio = (int)napon; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 23 | float ostatak = napon - cijeliDio; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 24 | |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 25 | // Zaokruzivanje |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 26 | if(ostatak > 0.5) cijeliDio++; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 27 | return cijeliDio; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 28 | } |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 29 | |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 30 | float vratiTemperaturu(float napon){ |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 31 | // Vracamo temperaturu u stepenima Celzijusa |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 32 | return napon * 100; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 33 | } |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 34 | |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 35 | void ispisiString(char *ispis, int duzina, int x, int y){ |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 36 | // Ispisuje poslani string na lokaciju (x,y) |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 37 | TFT.locate(x,y); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 38 | for(int i=0; i<duzina; i++) |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 39 | TFT._putc(*(ispis+i)); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 40 | } |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 41 | |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 42 | void ispisiINT(int broj, int x, int y){ |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 43 | // Ispisuje INT na lokaciju (x,y) |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 44 | int vel = 0; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 45 | int cifre[10]; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 46 | while(broj > 0){ |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 47 | cifre[vel++] = broj%10; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 48 | broj /= 10; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 49 | } |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 50 | TFT.locate(x,y); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 51 | for(int i=vel-1; i>=0; i--) |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 52 | TFT._putc(cifre[i]); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 53 | } |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 54 | |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 55 | void ispisiTemperaturu(float t, int x, int y){ |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 56 | // Ispisuje temperaturu na lokaciju (x,y) u formatu CIJELI.OSTATAK |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 57 | int cijeli = int(t); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 58 | float ostatak = t - (int)t; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 59 | int ostatak_CD = int(ostatak); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 60 | float ostatak2 = ostatak_CD - (int)ostatak_CD; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 61 | if(ostatak2 > 0.5) |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 62 | ostatak_CD++; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 63 | ispisiINT(cijeli, x, y); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 64 | TFT._putc('.'); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 65 | ispisiINT(ostatak_CD, x, y); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 66 | } |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 67 | |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 68 | int vrati_Y_osu(float temperatura){ |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 69 | // Proracun Y-ose na osnovu temperature |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 70 | int cijeli = int(temperatura); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 71 | temperatura = (temperatura - (int)temperatura)*100; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 72 | /* if(temperatura>12.&&temperatura<=37.) |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 73 | cijeli++; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 74 | else if(temperatura>37.&&temperatura<=62.) |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 75 | cijeli+=2; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 76 | else if(temperatura>62.&&temperatura<=87.) |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 77 | cijeli+=3; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 78 | else if(temperatura>87) |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 79 | cijeli+=4;*/ |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 80 | |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 81 | return cijeli; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 82 | } |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 83 | |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 84 | int main() { |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 85 | |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 86 | //Inicijalizacija; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 87 | TFT.claim(stdout); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 88 | TFT.set_orientation(1); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 89 | TFT.background(Blue); // set background to black |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 90 | TFT.foreground(White); // set chars to white |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 91 | TFT.cls(); // clear the screen |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 92 | |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 93 | // Trenutni trenutak u vremenu |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 94 | int aktivnoVrijeme = 0; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 95 | float aktivnaTemp = vratiTemperaturu(napon); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 96 | float bivsaTemp = 0; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 97 | |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 98 | while(1) { |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 99 | // Iscrtavamo X i Y osu te njihove labele |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 100 | // BROJ PIXELA TFTa: 240x320 |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 101 | TFT.set_font((unsigned char*) Arial12x12); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 102 | // funkcija line(int x0, int y0, int x1, int y1, int colour) |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 103 | TFT.line(20,20,20,220,Black); // Osa Y |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 104 | TFT.line(20,220,300,220,Black); // Osa X |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 105 | |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 106 | // Po Y osi crtamo vrijednosti temperature |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 107 | int osa_temperatura=0; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 108 | for(int y=200; y>20; y-=20) |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 109 | { |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 110 | osa_temperatura+=5; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 111 | // Postavljamo kursor na poziciju (x,y) |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 112 | TFT.locate(26,y); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 113 | if(osa_temperatura/10>0) |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 114 | TFT._putc(osa_temperatura/10+48); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 115 | TFT._putc(osa_temperatura%10+48); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 116 | } |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 117 | |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 118 | for(int i=20; i<300; i+=20){ |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 119 | int Y_aktivna = vrati_Y_osu(aktivnaTemp); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 120 | int Y_bivsa = vrati_Y_osu(bivsaTemp); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 121 | int x = aktivnoVrijeme%14; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 122 | // TFT.fillcircle(x, Y_aktivna, 5, Red); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 123 | // if(aktivnoVrijeme%14 > 0) |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 124 | TFT.line(aktivnoVrijeme-1, Y_bivsa, aktivnoVrijeme, Y_aktivna, Black); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 125 | } |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 126 | |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 127 | char* U = "Napon: "; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 128 | char* T = "Temp: "; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 129 | char* t = "Vrijeme: "; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 130 | |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 131 | // Racunamo potrebni red piksela za red i znak radi ispisivanja |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 132 | int PXL_red=240./TFT.rows(); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 133 | int PXL_znak=320./TFT.columns(); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 134 | |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 135 | ispisiString(U, 10, 200, 20); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 136 | ispisiINT(vratiNapon_mV(napon), 200+9*PXL_znak, 20); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 137 | TFT._putc('m'); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 138 | TFT._putc('V'); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 139 | |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 140 | ispisiString(T, 10, 200, 2*PXL_red+20); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 141 | ispisiTemperaturu(aktivnaTemp, 200+9*PXL_znak, PXL_red+20); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 142 | TFT._putc('C'); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 143 | |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 144 | ispisiString(t, 10, 200+9*PXL_znak, 2*PXL_red+20); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 145 | TFT._putc('s'); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 146 | |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 147 | wait(0.9); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 148 | bivsaTemp = aktivnaTemp; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 149 | aktivnaTemp = vratiTemperaturu(napon); |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 150 | aktivnoVrijeme++; |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 151 | } |
2016US_AmerSurkovic | 0:3f1c59a2b655 | 152 | } |