US, Vjezba 3 Stol 8, Amer Surkovic, Mirza Music Zadatak 2
Dependencies: SPI_TFT_ILI9341 TFT_fonts mbed
main.cpp
00001 #include "mbed.h" 00002 #define dp23 P0_0 00003 00004 #include "stdio.h" 00005 #include "SPI_TFT_ILI9341.h" 00006 #include "string" 00007 #include "Arial12x12.h" 00008 #include "Arial24x23.h" 00009 #include "Arial28x28.h" 00010 #include "font_big.h" 00011 00012 SPI_TFT_ILI9341 TFT(dp2,dp1,dp6,dp24,dp23,dp25,"TFT"); // mosi, miso, sclk, cs, reset, dc 00013 00014 // LM35 temperaturni senzor daje na izlazu napon u funkciji od temperature 00015 // 0V->0C; 1V->100C 00016 AnalogIn napon(dp9); 00017 00018 int vratiNapon_mV(float napon){ 00019 // Mnozimo sa 1000 da dobijemo napon u mili voltima 00020 // jer se trazi tacnost od 1mV 00021 napon *= 1000; 00022 int cijeliDio = (int)napon; 00023 float ostatak = napon - cijeliDio; 00024 00025 // Zaokruzivanje 00026 if(ostatak > 0.5) cijeliDio++; 00027 return cijeliDio; 00028 } 00029 00030 float vratiTemperaturu(float napon){ 00031 // Vracamo temperaturu u stepenima Celzijusa 00032 return napon * 100; 00033 } 00034 00035 void ispisiString(char *ispis, int duzina, int x, int y){ 00036 // Ispisuje poslani string na lokaciju (x,y) 00037 TFT.locate(x,y); 00038 for(int i=0; i<duzina; i++) 00039 TFT._putc(*(ispis+i)); 00040 } 00041 00042 void ispisiINT(int broj, int x, int y){ 00043 // Ispisuje INT na lokaciju (x,y) 00044 int vel = 0; 00045 int cifre[10]; 00046 while(broj > 0){ 00047 cifre[vel++] = broj%10; 00048 broj /= 10; 00049 } 00050 TFT.locate(x,y); 00051 for(int i=vel-1; i>=0; i--) 00052 TFT._putc(cifre[i]); 00053 } 00054 00055 void ispisiTemperaturu(float t, int x, int y){ 00056 // Ispisuje temperaturu na lokaciju (x,y) u formatu CIJELI.OSTATAK 00057 int cijeli = int(t); 00058 float ostatak = t - (int)t; 00059 int ostatak_CD = int(ostatak); 00060 float ostatak2 = ostatak_CD - (int)ostatak_CD; 00061 if(ostatak2 > 0.5) 00062 ostatak_CD++; 00063 ispisiINT(cijeli, x, y); 00064 TFT._putc('.'); 00065 ispisiINT(ostatak_CD, x, y); 00066 } 00067 00068 int vrati_Y_osu(float temperatura){ 00069 // Proracun Y-ose na osnovu temperature 00070 int cijeli = int(temperatura); 00071 temperatura = (temperatura - (int)temperatura)*100; 00072 /* if(temperatura>12.&&temperatura<=37.) 00073 cijeli++; 00074 else if(temperatura>37.&&temperatura<=62.) 00075 cijeli+=2; 00076 else if(temperatura>62.&&temperatura<=87.) 00077 cijeli+=3; 00078 else if(temperatura>87) 00079 cijeli+=4;*/ 00080 00081 return cijeli; 00082 } 00083 00084 int main() { 00085 00086 //Inicijalizacija; 00087 TFT.claim(stdout); 00088 TFT.set_orientation(1); 00089 TFT.background(Blue); // set background to black 00090 TFT.foreground(White); // set chars to white 00091 TFT.cls(); // clear the screen 00092 00093 // Trenutni trenutak u vremenu 00094 int aktivnoVrijeme = 0; 00095 float aktivnaTemp = vratiTemperaturu(napon); 00096 float bivsaTemp = 0; 00097 00098 while(1) { 00099 // Iscrtavamo X i Y osu te njihove labele 00100 // BROJ PIXELA TFTa: 240x320 00101 TFT.set_font((unsigned char*) Arial12x12); 00102 // funkcija line(int x0, int y0, int x1, int y1, int colour) 00103 TFT.line(20,20,20,220,Black); // Osa Y 00104 TFT.line(20,220,300,220,Black); // Osa X 00105 00106 // Po Y osi crtamo vrijednosti temperature 00107 int osa_temperatura=0; 00108 for(int y=200; y>20; y-=20) 00109 { 00110 osa_temperatura+=5; 00111 // Postavljamo kursor na poziciju (x,y) 00112 TFT.locate(26,y); 00113 if(osa_temperatura/10>0) 00114 TFT._putc(osa_temperatura/10+48); 00115 TFT._putc(osa_temperatura%10+48); 00116 } 00117 00118 for(int i=20; i<300; i+=20){ 00119 int Y_aktivna = vrati_Y_osu(aktivnaTemp); 00120 int Y_bivsa = vrati_Y_osu(bivsaTemp); 00121 int x = aktivnoVrijeme%14; 00122 // TFT.fillcircle(x, Y_aktivna, 5, Red); 00123 // if(aktivnoVrijeme%14 > 0) 00124 TFT.line(aktivnoVrijeme-1, Y_bivsa, aktivnoVrijeme, Y_aktivna, Black); 00125 } 00126 00127 char* U = "Napon: "; 00128 char* T = "Temp: "; 00129 char* t = "Vrijeme: "; 00130 00131 // Racunamo potrebni red piksela za red i znak radi ispisivanja 00132 int PXL_red=240./TFT.rows(); 00133 int PXL_znak=320./TFT.columns(); 00134 00135 ispisiString(U, 10, 200, 20); 00136 ispisiINT(vratiNapon_mV(napon), 200+9*PXL_znak, 20); 00137 TFT._putc('m'); 00138 TFT._putc('V'); 00139 00140 ispisiString(T, 10, 200, 2*PXL_red+20); 00141 ispisiTemperaturu(aktivnaTemp, 200+9*PXL_znak, PXL_red+20); 00142 TFT._putc('C'); 00143 00144 ispisiString(t, 10, 200+9*PXL_znak, 2*PXL_red+20); 00145 TFT._putc('s'); 00146 00147 wait(0.9); 00148 bivsaTemp = aktivnaTemp; 00149 aktivnaTemp = vratiTemperaturu(napon); 00150 aktivnoVrijeme++; 00151 } 00152 }
Generated on Thu Jul 14 2022 22:16:50 by 1.7.2