Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
00001 #include "mbed.h" 00002 #include "TextLCD.h" 00003 00004 I2C rtc(PTC9, PTC8); 00005 BusOut status_led(D8,D9,D10); 00006 Serial pc(USBTX, USBRX); 00007 TextLCD lcd(PTE20, PTE21, PTE22, PTE23, PTE29, PTE30, TextLCD::LCD16x2); 00008 InterruptIn tipkalo(D2); 00009 Serial HC06(PTE0,PTE1); 00010 Timeout povratak; 00011 Timer vrijeme; 00012 00013 char data_in[7]={'\0'}; 00014 char generated_code[13]={'\0'}; 00015 00016 int promjena=3,br; 00017 char temp; 00018 char simbol; 00019 bool poslano; 00020 bool pocetno_stanje=0; 00021 00022 void getData(){ 00023 int adr = 0x51; 00024 char reg_address[1] = {0x04}; 00025 rtc.write(adr << 1, ®_address[0],1,true); 00026 rtc.read((adr << 1)| 0x01 ,data_in,7,false); 00027 } 00028 00029 bool generateCode(){ 00030 int sample; 00031 int j = 0; 00032 memset( data_in, '.', 7 ); 00033 getData(); 00034 00035 memset( generated_code, '.', 12 ); 00036 00037 for(int i = 0; i<7; i++){ 00038 if(i == 4) i++; 00039 sample = data_in[i] >> 4 & 0x0F; // 01011100 >> 4 -> 00000101 & 0x0F -> 00040 generated_code[j]= sample + 48; 00041 j++; 00042 sample = data_in[i] & 0x0F; 00043 generated_code[j]= sample + 48; 00044 j++; 00045 } 00046 00047 for(int i=0; i<12; i++){ 00048 if(generated_code[i] < '0' || generated_code[i] > '9') 00049 return 1; 00050 } 00051 return 0; 00052 } 00053 00054 00055 void setTime(char sati,char min,char sec,char dan,char mjesec,char godina){ 00056 00057 int adr = 0x51; 00058 bool ponovljeni_start = true; 00059 00060 char data[6] ={sec,min,sati,dan,mjesec,godina}; 00061 char registri[6] ={0x04,0x05,0x06,0x07,0x09,0x0A}; 00062 char data_out[3]={'\0'}; 00063 00064 for(int i = 0; i<6; i++){ 00065 if(i == 5) ponovljeni_start = false; 00066 data_out[0] = registri[i]; 00067 data_out[1] = data[i]; 00068 rtc.write(adr << 1, data_out,2,ponovljeni_start); 00069 } 00070 } 00071 00072 void ispisNaLCD(){ 00073 promjena = 1; 00074 } 00075 00076 void nazad(){ 00077 promjena = 0; 00078 } 00079 00080 void slanje(){ 00081 lcd.cls(); 00082 lcd.printf("Slanje"); 00083 status_led = (status_led | 1); 00084 00085 while(vrijeme.read()<5 && poslano == 0){ 00086 for(br = 6; br < 9; br++){ 00087 lcd.locate(br,0); 00088 lcd.printf("."); 00089 HC06.putc('1'); 00090 wait(0.5); 00091 if(poslano){break;} 00092 } 00093 lcd.locate(6,0); 00094 lcd.printf(" "); 00095 wait(0.5); 00096 } 00097 if(poslano){ 00098 vrijeme.stop(); 00099 vrijeme.reset(); 00100 lcd.cls(); 00101 lcd.printf("Generirani kod:"); 00102 lcd.locate(0,1); 00103 lcd.printf("%s",generated_code); 00104 poslano = 0; 00105 povratak.attach(&nazad,30); 00106 promjena = 2; 00107 return; 00108 }else{ 00109 vrijeme.stop(); 00110 vrijeme.reset(); 00111 lcd.cls(); 00112 lcd.printf("Nije se moguce"); 00113 lcd.locate(0,1); 00114 lcd.printf("spojiti!"); 00115 status_led = (status_led & ~1); 00116 wait(5); 00117 poslano = 0; 00118 promjena =0; 00119 } 00120 00121 } 00122 00123 void fun(){ 00124 simbol = HC06.getc(); 00125 pc.printf("%c", simbol); 00126 switch (simbol){ 00127 00128 case '?': 00129 status_led = 0b011; 00130 for(int i=0; i<12; i++) 00131 HC06.putc(generated_code[i]); 00132 poslano = 1; 00133 status_led= 0b010; 00134 00135 break; 00136 00137 case 'N': 00138 status_led = 0b100; 00139 promjena = 3; 00140 break; 00141 00142 case 'R': 00143 status_led= 0b010; 00144 pocetno_stanje =1; 00145 promjena = 0; 00146 break; 00147 00148 00149 } 00150 } 00151 00152 00153 int main() { 00154 HC06.baud(9600); 00155 HC06.format(8,SerialBase::None,1); 00156 rtc.frequency(100000); //100kHZ 00157 HC06.attach(&fun, Serial::RxIrq); 00158 //setTime(0x16,0x03,0x30,0x12,0x02,0x21); 00159 HC06.putc('?'); 00160 status_led = 0b100; 00161 lcd.cls(); 00162 lcd.printf("Povezivanje"); 00163 while(1) { 00164 while(pocetno_stanje == 0){ 00165 for(br = 11; br < 14; br++){ 00166 lcd.locate(br,0); 00167 lcd.printf("."); 00168 HC06.putc('?'); 00169 wait(0.5); 00170 } 00171 lcd.locate(11,0); 00172 lcd.printf(" "); 00173 wait(0.5); 00174 } 00175 switch(promjena){ 00176 00177 default: 00178 tipkalo.fall(&ispisNaLCD); 00179 wait(1); 00180 lcd.cls(); 00181 lcd.printf(" Generator"); 00182 lcd.locate(0,1); 00183 lcd.printf(" koda"); 00184 promjena = 2; 00185 break; 00186 00187 case 1: 00188 tipkalo.fall(NULL); 00189 bool check = generateCode(); 00190 if(check){ 00191 check = 0; 00192 lcd.cls(); 00193 lcd.printf("ERROR"); 00194 wait(1); 00195 promjena = 0; 00196 break; 00197 } 00198 vrijeme.start(); 00199 slanje(); 00200 00201 break; 00202 00203 case 2: 00204 break; 00205 00206 case 3: 00207 povratak.detach(); 00208 lcd.cls(); 00209 lcd.printf("Standby/Locked"); 00210 promjena = 2; 00211 break; 00212 00213 } 00214 00215 } 00216 }
Generated on Sun Nov 26 2023 20:59:42 by
1.7.2