US, Vjezba 3 Stol 8, Amer Surkovic, Mirza Music Zadatak 2

Dependencies:   SPI_TFT_ILI9341 TFT_fonts mbed

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?

UserRevisionLine numberNew 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 }