Test

Dependencies:   mbed TextLCD

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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, &reg_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 }