Pajić Enil, Jakić Irma

Dependencies:   N5110 mbed

main.cpp

Committer:
tim010
Date:
2014-04-28
Revision:
0:7fd4fdb57d7e

File content as of revision 0:7fd4fdb57d7e:

#include "mbed.h"
#include "N5110.h"
//By Enil Pajić, 27.04.2014, ETF PAI
DigitalOut ENBL (dp14);
N5110 DISP (dp4, dp24, dp23, dp25, dp2, dp6, dp18);
InterruptIn BTN (dp9);
AnalogIn X (dp11), Y (dp10); //InterruptIn?
Ticker Refresh, Wait;
Timer Dbnc;
int eX = 2, eY = 2, pX = 0, pY = 0;
int Xs[12] = {1, 0, -1, -2, -2, -2, -1, 0, 1, 2, 2, 2};
int Ys[12] = {2, 2, 2, 1, 0, -1, -2, -2, -2, -1, 0, 1};
bool DrawIt = true;
void Draw (int x, int y)
    {
        if (x < 2 || x > 81) return; // [0, 84) 
        if (y < 2 || y > 45) return; // [0, 48) // y > 38 Or y > 30 /(-1) 
       // if (x == pX && y == pY) return; //Da ne cistimo, refreshujemo i crtamo krug ako je na istim koordinatama
        pX = x, pY = y;
        DISP.clear();
        DISP.refresh();
        DISP.setXYAddress (0, 0);
        for (int a = 0; a < 12; ++a)
            DISP.setPixel (x + Xs[a], y + Ys[a]);
        DISP.refresh();        
    }
double Zaokruzi (double broj) //Na 2 dec
    {return double(int(broj * 100.0 + .5) / 100.0); }
void DajCifre (double N, int &Cio, int &PrvaDec, int &DrugaDec) //broj u #.## formatu
    {
        double dec = (N - (int)N);
        dec = Zaokruzi(dec * 100.);
        DrugaDec = (int)dec % 10;
        PrvaDec = ((int)dec / 10) % 10;
        Cio = (int)N;
    }
void DoIt ()
    {
        double vx = X, vy = Y;
        if (vx <= .2) eX = (eX <= 2 ? 2 : eX - 2);
        else if (vx <= .4) eX = (eX <= 2 ? 2 : eX - 1);
        else if (vx <= .6);
        else if (vx <= .8) eX = (eX >= 81  ? 81 : eX + 1);
        else eX = (eX >= 81  ? 81 : eX + 2);                //Malo muzikanja :P ako jako povucemo, brze se pomjera
        if (vy <= .2) eY = (eY <= 2 ? 2 : eY - 2);          //Ako slabije povucemo, sporije se pomjera
        else if (vy <= .4) eY = (eY <= 2 ? 2 : eY - 1);
        else if (vy <= .6);
        else if (vy <= .8) eY = (eY >= 45  ? 45 : eY + 1);
        else eY = (eY >= 45  ? 45 : eY + 2);
        Draw (eX, eY);
        if (!DrawIt) return;   
        int xCio = 0, xPD = 0, xDD = 0, yCio = 0, yPD = 0, yDD = 0;
        DajCifre (vx, xCio, xPD, xDD);
        DajCifre (vy, yCio, yPD, yDD);
        char ch[13] = "(0.00, 0.00)";
        ch[1] = 48 + xCio; ch[3] = 48 + xPD; ch[4] = 48 + xDD;
        ch[7] = 48 + yCio; ch[9] = 48 + yPD; ch[10] = 48 + yDD;
        char ph [9] = "(00, 00)";
        ph[1] = 48 + eX / 10; ph[2] = 48 + eX % 10;
        ph[5] = 48 + eY / 10; ph[6] = 48 + eY % 10;
        DISP.printString (ch, 0, 5);
        DISP.printString (ph, 0, 4); // DISP.printString (ph, 0, 4);
    }
void Enable() {DrawIt = true; Wait.detach();} //Provjeriti !?
void Pressed()
    {
        if (Dbnc.read() > .2)
            {
                if (!DrawIt) return;
                DrawIt = false;
                Wait.attach (&Enable, 5.0);
            }
        Dbnc.reset();
    }
int main()
    {
        ENBL = 1;
        BTN.mode (PullUp);
        Dbnc.start();
        BTN.rise (&Pressed);
        DISP.init();
        Refresh.attach (&DoIt, 0.05); //Regulirati: 0.2, 0.1, 0.05, 0.01
        while(1); //While kakvog profesor želi :P
    }