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

Dependencies:   SPI_TFT_ILI9341 TFT_fonts mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }