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

Dependencies:   SPI_TFT_ILI9341 TFT_fonts mbed

main.cpp

Committer:
2016US_AmerSurkovic
Date:
2016-03-18
Revision:
0:3f1c59a2b655

File content as of revision 0:3f1c59a2b655:

#include "mbed.h"
#define dp23 P0_0
 
#include "stdio.h"
#include "SPI_TFT_ILI9341.h"
#include "string"
#include "Arial12x12.h"
#include "Arial24x23.h"
#include "Arial28x28.h"
#include "font_big.h"

SPI_TFT_ILI9341 TFT(dp2,dp1,dp6,dp24,dp23,dp25,"TFT"); // mosi, miso, sclk, cs, reset, dc

// LM35 temperaturni senzor daje na izlazu napon u funkciji od temperature
// 0V->0C; 1V->100C
AnalogIn napon(dp9);

int vratiNapon_mV(float napon){
    // Mnozimo sa 1000 da dobijemo napon u mili voltima
    // jer se trazi tacnost od 1mV
    napon *= 1000;
    int cijeliDio = (int)napon;
    float ostatak = napon - cijeliDio;
    
    // Zaokruzivanje
    if(ostatak > 0.5) cijeliDio++;
    return cijeliDio;
}

float vratiTemperaturu(float napon){
    // Vracamo temperaturu u stepenima Celzijusa
    return napon * 100;
}

void ispisiString(char *ispis, int duzina, int x, int y){
    // Ispisuje poslani string na lokaciju (x,y)
    TFT.locate(x,y);
    for(int i=0; i<duzina; i++)
        TFT._putc(*(ispis+i));
}

void ispisiINT(int broj, int x, int y){
    // Ispisuje INT na lokaciju (x,y)
    int vel = 0;
    int cifre[10];
    while(broj > 0){
        cifre[vel++] = broj%10;
        broj /= 10;
    }
    TFT.locate(x,y);
    for(int i=vel-1; i>=0; i--)
        TFT._putc(cifre[i]);
}

void ispisiTemperaturu(float t, int x, int y){
    // Ispisuje temperaturu na lokaciju (x,y) u formatu CIJELI.OSTATAK
    int cijeli = int(t);
    float ostatak = t - (int)t;
    int ostatak_CD = int(ostatak);
    float ostatak2 = ostatak_CD - (int)ostatak_CD;
    if(ostatak2 > 0.5)
        ostatak_CD++;
    ispisiINT(cijeli, x, y);
    TFT._putc('.');
    ispisiINT(ostatak_CD, x, y);   
}

int vrati_Y_osu(float temperatura){
    // Proracun Y-ose na osnovu temperature
    int cijeli = int(temperatura);
    temperatura = (temperatura - (int)temperatura)*100;   
  /*  if(temperatura>12.&&temperatura<=37.)
        cijeli++;
    else if(temperatura>37.&&temperatura<=62.)
        cijeli+=2;
    else if(temperatura>62.&&temperatura<=87.)
        cijeli+=3;
    else if(temperatura>87)
        cijeli+=4;*/
    
    return cijeli;
}

int main() {

    //Inicijalizacija;
    TFT.claim(stdout);
    TFT.set_orientation(1);
    TFT.background(Blue);     // set background to black
    TFT.foreground(White);    // set chars to white
    TFT.cls();                // clear the screen
    
    // Trenutni trenutak u vremenu
    int aktivnoVrijeme = 0;
    float aktivnaTemp = vratiTemperaturu(napon);
    float bivsaTemp = 0;
    
    while(1) {
        // Iscrtavamo X i Y osu te njihove labele
        // BROJ PIXELA TFTa: 240x320
        TFT.set_font((unsigned char*) Arial12x12);
        // funkcija line(int x0, int y0, int x1, int y1, int colour)
        TFT.line(20,20,20,220,Black); // Osa Y
        TFT.line(20,220,300,220,Black); // Osa X
        
        // Po Y osi crtamo vrijednosti temperature
        int osa_temperatura=0;
        for(int y=200; y>20; y-=20)
        {
            osa_temperatura+=5;
            // Postavljamo kursor na poziciju (x,y)
            TFT.locate(26,y);
            if(osa_temperatura/10>0)
                TFT._putc(osa_temperatura/10+48);
            TFT._putc(osa_temperatura%10+48);
        }
        
        for(int i=20; i<300; i+=20){
            int Y_aktivna = vrati_Y_osu(aktivnaTemp);
            int Y_bivsa = vrati_Y_osu(bivsaTemp);
            int x = aktivnoVrijeme%14;
          //  TFT.fillcircle(x, Y_aktivna, 5, Red);
          //  if(aktivnoVrijeme%14 > 0)
                TFT.line(aktivnoVrijeme-1, Y_bivsa, aktivnoVrijeme, Y_aktivna, Black);
        }
        
        char* U = "Napon:   ";
        char* T = "Temp:    ";
        char* t = "Vrijeme: ";
        
        // Racunamo potrebni red piksela za red i znak radi ispisivanja
        int PXL_red=240./TFT.rows();
        int PXL_znak=320./TFT.columns();
        
        ispisiString(U, 10, 200, 20);
        ispisiINT(vratiNapon_mV(napon), 200+9*PXL_znak, 20);
        TFT._putc('m');
        TFT._putc('V');
        
        ispisiString(T, 10, 200, 2*PXL_red+20);
        ispisiTemperaturu(aktivnaTemp, 200+9*PXL_znak, PXL_red+20);
        TFT._putc('C');
        
        ispisiString(t, 10, 200+9*PXL_znak, 2*PXL_red+20);
        TFT._putc('s');
        
        wait(0.9);
        bivsaTemp = aktivnaTemp;
        aktivnaTemp = vratiTemperaturu(napon);
        aktivnoVrijeme++;
    }
}