PAI 2015-projekat-Grupa2-Tim003 Tema: Analogni sat Maida Bakovic i Dzenana Kapetanovic

Dependencies:   N5110 mbed

Committer:
pai2015maidabakovic
Date:
Tue Jun 09 19:51:39 2015 +0000
Revision:
0:8020d486cd26
PAI 2015-projekat-Grupa2-Tim003; Tema: Analogni sat; Maida Bakovic i Dzenana Kapetanovic

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pai2015maidabakovic 0:8020d486cd26 1 #include "mbed.h"
pai2015maidabakovic 0:8020d486cd26 2 #include "N5110.h"
pai2015maidabakovic 0:8020d486cd26 3 #define dp23 P0_0
pai2015maidabakovic 0:8020d486cd26 4 #define PI 3.14
pai2015maidabakovic 0:8020d486cd26 5
pai2015maidabakovic 0:8020d486cd26 6 DigitalOut prviRed(dp16), drugiRed(dp15), treciRed(dp17), cetvrtiRed(dp27);
pai2015maidabakovic 0:8020d486cd26 7 DigitalIn prvaKolona(dp9), drugaKolona(dp10), trecaKolona(dp11), cetvrtaKolona(dp13);
pai2015maidabakovic 0:8020d486cd26 8 N5110 displej(dp4, dp25, dp23, dp26, dp2, dp6, dp18);
pai2015maidabakovic 0:8020d486cd26 9 DigitalOut enable(dp14);
pai2015maidabakovic 0:8020d486cd26 10 DigitalOut led(dp24);
pai2015maidabakovic 0:8020d486cd26 11 Timer timer,timerAlarm, timerDebounc;
pai2015maidabakovic 0:8020d486cd26 12 InterruptIn taster(dp1);
pai2015maidabakovic 0:8020d486cd26 13 Serial pc(USBTX,USBRX);
pai2015maidabakovic 0:8020d486cd26 14
pai2015maidabakovic 0:8020d486cd26 15 Ticker tikerSat;
pai2015maidabakovic 0:8020d486cd26 16 bool podesavanje = 0, podesenAlarm=0;
pai2015maidabakovic 0:8020d486cd26 17 int ukljuciAlarm=0;
pai2015maidabakovic 0:8020d486cd26 18
pai2015maidabakovic 0:8020d486cd26 19
pai2015maidabakovic 0:8020d486cd26 20 //GLOBALNE VARIJABLE
pai2015maidabakovic 0:8020d486cd26 21 int p=42,q=24; //koordinate centra
pai2015maidabakovic 0:8020d486cd26 22 int dh=15, dm=20, ds=19; //duzina kazaljke
pai2015maidabakovic 0:8020d486cd26 23 int sati=0, minute=0, sekunde=0;
pai2015maidabakovic 0:8020d486cd26 24 int dan=1, mjesec=1, godina=15;
pai2015maidabakovic 0:8020d486cd26 25 char izbor=' ', a=' ';
pai2015maidabakovic 0:8020d486cd26 26 int buff[6];
pai2015maidabakovic 0:8020d486cd26 27 int i=0, k=0;
pai2015maidabakovic 0:8020d486cd26 28
pai2015maidabakovic 0:8020d486cd26 29
pai2015maidabakovic 0:8020d486cd26 30 //DEFINICIJE FUNKCIJA
pai2015maidabakovic 0:8020d486cd26 31 void nacrtajKazaljkuSat(int h, int min);
pai2015maidabakovic 0:8020d486cd26 32 void nacrtajKazaljkuMin(int min, int sek);
pai2015maidabakovic 0:8020d486cd26 33 void nacrtajKazaljkuSek(int sek);
pai2015maidabakovic 0:8020d486cd26 34 char ocitajTastaturu();
pai2015maidabakovic 0:8020d486cd26 35 void analogniSat();
pai2015maidabakovic 0:8020d486cd26 36 void podesavanjeF();
pai2015maidabakovic 0:8020d486cd26 37
pai2015maidabakovic 0:8020d486cd26 38
pai2015maidabakovic 0:8020d486cd26 39
pai2015maidabakovic 0:8020d486cd26 40
pai2015maidabakovic 0:8020d486cd26 41
pai2015maidabakovic 0:8020d486cd26 42 void ukljuciAlarmF(){
pai2015maidabakovic 0:8020d486cd26 43 led = 1; wait(0.5);
pai2015maidabakovic 0:8020d486cd26 44
pai2015maidabakovic 0:8020d486cd26 45 pc.printf("alarm");
pai2015maidabakovic 0:8020d486cd26 46 podesenAlarm = 0;
pai2015maidabakovic 0:8020d486cd26 47 }
pai2015maidabakovic 0:8020d486cd26 48
pai2015maidabakovic 0:8020d486cd26 49 int main()
pai2015maidabakovic 0:8020d486cd26 50 {
pai2015maidabakovic 0:8020d486cd26 51 enable=1; led=0;
pai2015maidabakovic 0:8020d486cd26 52 displej.init();
pai2015maidabakovic 0:8020d486cd26 53 displej.refresh();
pai2015maidabakovic 0:8020d486cd26 54 taster.rise(&podesavanjeF); //kada je taster pritisnut poziva se funkcija za podesavanje
pai2015maidabakovic 0:8020d486cd26 55 tikerSat.attach(&analogniSat, 1.0); //tiker svake sekunde poziva funkciju analogni sat
pai2015maidabakovic 0:8020d486cd26 56
pai2015maidabakovic 0:8020d486cd26 57 while(1){
pai2015maidabakovic 0:8020d486cd26 58 if ( ukljuciAlarm==1 && podesenAlarm == 1) ukljuciAlarmF();
pai2015maidabakovic 0:8020d486cd26 59 }
pai2015maidabakovic 0:8020d486cd26 60
pai2015maidabakovic 0:8020d486cd26 61
pai2015maidabakovic 0:8020d486cd26 62
pai2015maidabakovic 0:8020d486cd26 63
pai2015maidabakovic 0:8020d486cd26 64 }
pai2015maidabakovic 0:8020d486cd26 65
pai2015maidabakovic 0:8020d486cd26 66
pai2015maidabakovic 0:8020d486cd26 67 void analogniSat()
pai2015maidabakovic 0:8020d486cd26 68 {
pai2015maidabakovic 0:8020d486cd26 69 sekunde++;
pai2015maidabakovic 0:8020d486cd26 70 if (ukljuciAlarm>0) ukljuciAlarm--;
pai2015maidabakovic 0:8020d486cd26 71 if ( sekunde == 60 ) { sekunde = 0; minute++;}
pai2015maidabakovic 0:8020d486cd26 72 if ( minute == 60 ) { minute = 0; sati++;}
pai2015maidabakovic 0:8020d486cd26 73 if ( sati == 24 ) { sati = 0; }
pai2015maidabakovic 0:8020d486cd26 74 if (podesavanje == 1) { return; } //ukoliko traje podesavanje iscrtavanje sata ne treba da se desi
pai2015maidabakovic 0:8020d486cd26 75 displej.clear();
pai2015maidabakovic 0:8020d486cd26 76 displej.refresh();
pai2015maidabakovic 0:8020d486cd26 77 displej.drawCircle(42,24,22,0);
pai2015maidabakovic 0:8020d486cd26 78 nacrtajKazaljkuSat(sati,minute);
pai2015maidabakovic 0:8020d486cd26 79 nacrtajKazaljkuMin(minute,sekunde);
pai2015maidabakovic 0:8020d486cd26 80 nacrtajKazaljkuSek(sekunde);
pai2015maidabakovic 0:8020d486cd26 81
pai2015maidabakovic 0:8020d486cd26 82 displej.printChar(char('0'+dan/10),0,5);
pai2015maidabakovic 0:8020d486cd26 83 displej.printChar(char('0'+dan%10),6,5);
pai2015maidabakovic 0:8020d486cd26 84 displej.printChar('.',12,5);
pai2015maidabakovic 0:8020d486cd26 85 displej.printChar(char('0'+mjesec/10),18,5);
pai2015maidabakovic 0:8020d486cd26 86 displej.printChar(char('0'+mjesec%10),24,5);
pai2015maidabakovic 0:8020d486cd26 87 displej.printChar('/',64,5);
pai2015maidabakovic 0:8020d486cd26 88 displej.printChar(char('0'+godina/10),70,5);
pai2015maidabakovic 0:8020d486cd26 89 displej.printChar(char('0'+godina%10),76,5);
pai2015maidabakovic 0:8020d486cd26 90
pai2015maidabakovic 0:8020d486cd26 91
pai2015maidabakovic 0:8020d486cd26 92 displej.refresh();
pai2015maidabakovic 0:8020d486cd26 93 }
pai2015maidabakovic 0:8020d486cd26 94
pai2015maidabakovic 0:8020d486cd26 95 void podesavanjeF()
pai2015maidabakovic 0:8020d486cd26 96 {
pai2015maidabakovic 0:8020d486cd26 97 podesavanje = 1; //podesavanje pocinje, koristi se u funkciji AnalogniSat
pai2015maidabakovic 0:8020d486cd26 98 displej.clear(); //obrisi sat
pai2015maidabakovic 0:8020d486cd26 99 displej.refresh();
pai2015maidabakovic 0:8020d486cd26 100 //ispisi meni:
pai2015maidabakovic 0:8020d486cd26 101 displej.printString("Menu 1, 2, 3",0,0); //displej.refresh();
pai2015maidabakovic 0:8020d486cd26 102 displej.printString("1 - set time",0,1); //displej.refresh();
pai2015maidabakovic 0:8020d486cd26 103 displej.printString("2 - set alarm",0,2);// displej.refresh();
pai2015maidabakovic 0:8020d486cd26 104 displej.printString("3 - set date",0,3); //displej.refresh();
pai2015maidabakovic 0:8020d486cd26 105 //displej.printString("Form 00/00/00",0,4);
pai2015maidabakovic 0:8020d486cd26 106 displej.refresh();
pai2015maidabakovic 0:8020d486cd26 107
pai2015maidabakovic 0:8020d486cd26 108 izbor=' ';
pai2015maidabakovic 0:8020d486cd26 109 timerDebounc.start();
pai2015maidabakovic 0:8020d486cd26 110 while( izbor == ' ' || izbor=='n' ){
pai2015maidabakovic 0:8020d486cd26 111 if(timerDebounc.read_ms() > 220) //za debouncing
pai2015maidabakovic 0:8020d486cd26 112 {
pai2015maidabakovic 0:8020d486cd26 113 izbor = ocitajTastaturu();
pai2015maidabakovic 0:8020d486cd26 114 timerDebounc.reset();
pai2015maidabakovic 0:8020d486cd26 115 }
pai2015maidabakovic 0:8020d486cd26 116 }
pai2015maidabakovic 0:8020d486cd26 117 timerDebounc.stop();
pai2015maidabakovic 0:8020d486cd26 118
pai2015maidabakovic 0:8020d486cd26 119 displej.clear(); //obrisi sat
pai2015maidabakovic 0:8020d486cd26 120 displej.printString("Form 00/00/00",0,0);
pai2015maidabakovic 0:8020d486cd26 121 displej.printString("* za brisanje",0,1);
pai2015maidabakovic 0:8020d486cd26 122 displej.refresh();
pai2015maidabakovic 0:8020d486cd26 123
pai2015maidabakovic 0:8020d486cd26 124 k=0; //za ispisivanje formata tj pomjeranje za 6 piksela
pai2015maidabakovic 0:8020d486cd26 125 if (izbor=='1' || izbor=='2' || izbor=='3' )
pai2015maidabakovic 0:8020d486cd26 126 {
pai2015maidabakovic 0:8020d486cd26 127 i=0;
pai2015maidabakovic 0:8020d486cd26 128 //ocitavanje sati, minuta i sekundi, odnosno dana, mjeseci i godina
pai2015maidabakovic 0:8020d486cd26 129 while ( i<6 ) //ZAHTIJEVAMO UNOS 6 CIFARA
pai2015maidabakovic 0:8020d486cd26 130 {
pai2015maidabakovic 0:8020d486cd26 131 a=' ';
pai2015maidabakovic 0:8020d486cd26 132 timerDebounc.start();
pai2015maidabakovic 0:8020d486cd26 133 while( a==' ' || a=='n' ){
pai2015maidabakovic 0:8020d486cd26 134 if(timerDebounc.read_ms() > 150) //za debouncing
pai2015maidabakovic 0:8020d486cd26 135 {
pai2015maidabakovic 0:8020d486cd26 136 a = ocitajTastaturu();
pai2015maidabakovic 0:8020d486cd26 137 timerDebounc.reset();
pai2015maidabakovic 0:8020d486cd26 138 }
pai2015maidabakovic 0:8020d486cd26 139 }
pai2015maidabakovic 0:8020d486cd26 140 timerDebounc.stop();
pai2015maidabakovic 0:8020d486cd26 141
pai2015maidabakovic 0:8020d486cd26 142 displej.printChar(a,k,3); //ispisi unijetu cifru
pai2015maidabakovic 0:8020d486cd26 143 displej.refresh();
pai2015maidabakovic 0:8020d486cd26 144
pai2015maidabakovic 0:8020d486cd26 145 buff[i]=int(a)-48; //unijetu cifru smijestamo u niz
pai2015maidabakovic 0:8020d486cd26 146 i++; k+=6; //k+6 jer char zauzima 6 piksela
pai2015maidabakovic 0:8020d486cd26 147 if ( i==2 || i==4 ) { displej.printChar(':',k,3); k+=6;}
pai2015maidabakovic 0:8020d486cd26 148
pai2015maidabakovic 0:8020d486cd26 149 if(a=='#'){ displej.clear(); displej.refresh(); // displej.printString("Form 00/00/00",0,0);
pai2015maidabakovic 0:8020d486cd26 150 displej.refresh(); i=0; k=0;} //ako korisnik ponisti unos vracamo se na pocetak
pai2015maidabakovic 0:8020d486cd26 151 }
pai2015maidabakovic 0:8020d486cd26 152 //NAKON UNESENIH 6 CIFARA:
pai2015maidabakovic 0:8020d486cd26 153 if (izbor == '1') //podesi globalne varijable
pai2015maidabakovic 0:8020d486cd26 154 {
pai2015maidabakovic 0:8020d486cd26 155 sati = 10*buff[0] + buff[1];
pai2015maidabakovic 0:8020d486cd26 156 minute = 10*buff[2] + buff[3];
pai2015maidabakovic 0:8020d486cd26 157 sekunde = 10*buff[4] + buff[5];
pai2015maidabakovic 0:8020d486cd26 158 }
pai2015maidabakovic 0:8020d486cd26 159 else if (izbor == '2') //racunamo za koliko sekundi ce se alarm ukljuciti:
pai2015maidabakovic 0:8020d486cd26 160 {
pai2015maidabakovic 0:8020d486cd26 161 ukljuciAlarm = 3600*(10*buff[0] + buff[1]) + 60*(10*buff[2] + buff[3]) + 10*buff[4] + buff[5];
pai2015maidabakovic 0:8020d486cd26 162 podesenAlarm = 1;
pai2015maidabakovic 0:8020d486cd26 163 }
pai2015maidabakovic 0:8020d486cd26 164 else //Datum
pai2015maidabakovic 0:8020d486cd26 165 {
pai2015maidabakovic 0:8020d486cd26 166 dan = 10*buff[0] + buff[1];
pai2015maidabakovic 0:8020d486cd26 167 mjesec = 10*buff[2] + buff[3];
pai2015maidabakovic 0:8020d486cd26 168 godina = 10*buff[4] + buff[5];
pai2015maidabakovic 0:8020d486cd26 169 }
pai2015maidabakovic 0:8020d486cd26 170 }
pai2015maidabakovic 0:8020d486cd26 171 else //AKO NISU UNIJETI 1 2 ILI 3
pai2015maidabakovic 0:8020d486cd26 172 {
pai2015maidabakovic 0:8020d486cd26 173 displej.clear();
pai2015maidabakovic 0:8020d486cd26 174 displej.printString("Pogresan unos",0,0);
pai2015maidabakovic 0:8020d486cd26 175 displej.refresh();
pai2015maidabakovic 0:8020d486cd26 176 }
pai2015maidabakovic 0:8020d486cd26 177 podesavanje=0;
pai2015maidabakovic 0:8020d486cd26 178 }
pai2015maidabakovic 0:8020d486cd26 179
pai2015maidabakovic 0:8020d486cd26 180
pai2015maidabakovic 0:8020d486cd26 181
pai2015maidabakovic 0:8020d486cd26 182
pai2015maidabakovic 0:8020d486cd26 183 void nacrtajKazaljkuSat(int h, int min){
pai2015maidabakovic 0:8020d486cd26 184 float ugao;
pai2015maidabakovic 0:8020d486cd26 185 //1 sat odgovara 360/12 stepeni, a jednoj minuti 30/60 stepeni
pai2015maidabakovic 0:8020d486cd26 186 ugao = (h % 12) * (360/12) - 90; //3 sata predstavlja 0 stepeni pa oduzimamo 90
pai2015maidabakovic 0:8020d486cd26 187 ugao = ugao + min * (30/60);
pai2015maidabakovic 0:8020d486cd26 188 ugao=(ugao*PI)/180; //pretvaramo u radijane
pai2015maidabakovic 0:8020d486cd26 189 float x=p+dh*cos(ugao);
pai2015maidabakovic 0:8020d486cd26 190 float y=q+dh*sin(ugao);
pai2015maidabakovic 0:8020d486cd26 191 displej.drawLine(p,q,x,y,1);
pai2015maidabakovic 0:8020d486cd26 192 displej.refresh();
pai2015maidabakovic 0:8020d486cd26 193 }
pai2015maidabakovic 0:8020d486cd26 194
pai2015maidabakovic 0:8020d486cd26 195 void nacrtajKazaljkuMin(int min, int sek){
pai2015maidabakovic 0:8020d486cd26 196 float ugao;
pai2015maidabakovic 0:8020d486cd26 197 //1 min odgovara 360/60 stepeni, a jednoj sekundi 6/60 stepeni
pai2015maidabakovic 0:8020d486cd26 198 ugao=min*(360/60) - 90; //3 sata predstavlja 0 stepeni pa oduzimamo 90
pai2015maidabakovic 0:8020d486cd26 199 ugao=ugao + sek * (6/60);
pai2015maidabakovic 0:8020d486cd26 200 ugao=(ugao*PI)/180; //pretvaramo u radijane
pai2015maidabakovic 0:8020d486cd26 201 float x=p+dm*cos(ugao);
pai2015maidabakovic 0:8020d486cd26 202 float y=q+dm*sin(ugao);
pai2015maidabakovic 0:8020d486cd26 203 displej.drawLine(p,q,x,y,1);
pai2015maidabakovic 0:8020d486cd26 204 displej.refresh();
pai2015maidabakovic 0:8020d486cd26 205 }
pai2015maidabakovic 0:8020d486cd26 206
pai2015maidabakovic 0:8020d486cd26 207 void nacrtajKazaljkuSek(int sek){
pai2015maidabakovic 0:8020d486cd26 208 float ugao;
pai2015maidabakovic 0:8020d486cd26 209 //1 sek odgovara 360/60 stepeni
pai2015maidabakovic 0:8020d486cd26 210 ugao = sek * (360/60) - 90; //3 sata predstavlja 0 stepeni pa oduzimamo 90
pai2015maidabakovic 0:8020d486cd26 211 ugao=(ugao*PI)/180; //pretvaramo u radijane
pai2015maidabakovic 0:8020d486cd26 212 float x=p+ds*cos(ugao);
pai2015maidabakovic 0:8020d486cd26 213 float y=q+ds*sin(ugao);
pai2015maidabakovic 0:8020d486cd26 214 displej.drawLine(p,q,x,y,1);
pai2015maidabakovic 0:8020d486cd26 215 displej.refresh();
pai2015maidabakovic 0:8020d486cd26 216 }
pai2015maidabakovic 0:8020d486cd26 217
pai2015maidabakovic 0:8020d486cd26 218 char ocitajTastaturu(){
pai2015maidabakovic 0:8020d486cd26 219 prviRed = 0; drugiRed = 0; treciRed = 0; cetvrtiRed = 0;
pai2015maidabakovic 0:8020d486cd26 220
pai2015maidabakovic 0:8020d486cd26 221 prviRed = 1;
pai2015maidabakovic 0:8020d486cd26 222 if(prvaKolona == 1) return '1';
pai2015maidabakovic 0:8020d486cd26 223 else if(drugaKolona == 1) return '2';
pai2015maidabakovic 0:8020d486cd26 224 else if(trecaKolona == 1) return '3';
pai2015maidabakovic 0:8020d486cd26 225 else if(cetvrtaKolona == 1) return '0';
pai2015maidabakovic 0:8020d486cd26 226 prviRed = 0;
pai2015maidabakovic 0:8020d486cd26 227
pai2015maidabakovic 0:8020d486cd26 228 drugiRed = 1;
pai2015maidabakovic 0:8020d486cd26 229 if(prvaKolona == 1) return '4';
pai2015maidabakovic 0:8020d486cd26 230 else if(drugaKolona == 1) return '5';
pai2015maidabakovic 0:8020d486cd26 231 else if(trecaKolona == 1) return '6';
pai2015maidabakovic 0:8020d486cd26 232 else if(cetvrtaKolona == 1) return '*';
pai2015maidabakovic 0:8020d486cd26 233 drugiRed = 0;
pai2015maidabakovic 0:8020d486cd26 234
pai2015maidabakovic 0:8020d486cd26 235 treciRed = 1;
pai2015maidabakovic 0:8020d486cd26 236 if(prvaKolona == 1) return '7';
pai2015maidabakovic 0:8020d486cd26 237 else if(drugaKolona == 1) return '8';
pai2015maidabakovic 0:8020d486cd26 238 else if(trecaKolona == 1) return '9';
pai2015maidabakovic 0:8020d486cd26 239 else if(cetvrtaKolona == 1) return 'n';
pai2015maidabakovic 0:8020d486cd26 240 treciRed = 0;
pai2015maidabakovic 0:8020d486cd26 241
pai2015maidabakovic 0:8020d486cd26 242 cetvrtiRed = 1;
pai2015maidabakovic 0:8020d486cd26 243 if(prvaKolona == 1) return 'n';
pai2015maidabakovic 0:8020d486cd26 244 else if(drugaKolona == 1) return 'n';
pai2015maidabakovic 0:8020d486cd26 245 else if(trecaKolona == 1) return 'n';
pai2015maidabakovic 0:8020d486cd26 246 else if(cetvrtaKolona == 1) return 'n';
pai2015maidabakovic 0:8020d486cd26 247 cetvrtiRed = 0;
pai2015maidabakovic 0:8020d486cd26 248
pai2015maidabakovic 0:8020d486cd26 249 return 'n';
pai2015maidabakovic 0:8020d486cd26 250 }
pai2015maidabakovic 0:8020d486cd26 251
pai2015maidabakovic 0:8020d486cd26 252
pai2015maidabakovic 0:8020d486cd26 253