Test
Embed:
(wiki syntax)
Show/hide line numbers
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