Demo program for the Oled display

Dependencies:   mbed-src

Revision:
2:1eac3ea8c6e8
Parent:
1:793dbd6d6498
Child:
3:1fb597da3fdf
diff -r 793dbd6d6498 -r 1eac3ea8c6e8 main.cpp
--- a/main.cpp	Fri Jan 09 00:11:48 2015 +0000
+++ b/main.cpp	Fri Jan 09 18:21:01 2015 +0000
@@ -3,7 +3,7 @@
 
 
 OLED32028P1T oled(PTE0,PTE1,PTA12); // Oled Display tx, rx, rs
-InterruptIn SignalIn(PTC1);         // conection of output NON-inverting DCF module
+InterruptIn dcfSignalIn(PTC0);         // conection of output NON-inverting DCF module
 DigitalOut SignalLED(LED3);         // indicates DCF  signal on Mbed
 
 Timer T1,T2,T3;
@@ -119,7 +119,9 @@
                 oled.locate (4,6);
                 oled.printf("drawText time  %3.2f mS",T1.read()*1000);T1.reset();       
                 oled.locate (4,11);
-                oled.printf("printf   time %3.2f mS",T2.read()*1000);T2.reset();                    
+                oled.printf("printf   time %3.2f mS",T2.read()*1000);T2.reset();
+                oled.locate (4,12); 
+                oled.printf("%d",seconds);                   
     }
     T3.reset();
     while(1){
@@ -139,23 +141,27 @@
         oled.drawTextButton(1, 200, 210,(oled.toRGB(0,100,100)),(FONT12X16),(oled.toRGB(255,255,255)), 1, 1, "DCF Clock");
         oled.drawTextButton(1, 252, 185,(oled.toRGB(0,100,100)),(FONT8X12),(oled.toRGB(255,255,255)), 1, 1, "Set RTC");
         oled.setTextBackgroundType (TEXT_OPAQUE);
-        oled.drawText(0,0,(FONT12X16),"RTC Clock",oled.toRGB(255,0,0));
-        oled.enableTouch();oled.resetTouchArea();      
+        oled.drawText(0,0,(FONT12X16),"RTC Clock",oled.toRGB(0,255,0));
+        oled.drawText(38,7,(FONT5X7),"Touch position",oled.toRGB(255,0,0));
+        oled.enableTouch();oled.resetTouchArea(); 
+        T1.start();     
     
             while(IRQ==0){   
                 oled.setFontSize(FONT12X16);oled.locate(0,1);
                 oled.setFontColor(oled.toRGB(255,255,255));
                 time_t seconds = time(NULL);
-                strftime(timebuf, 32, "%I:%M:%S %p", localtime(&seconds));           
+                strftime(timebuf, 32, "%I:%M:%S.", localtime(&seconds));           
                 strftime(datebuf, 32, "%a %d %b %Y ", localtime(&seconds));
-                oled.drawText(11,0,(FONT12X16),timebuf,oled.toRGB(255,255,0));
-                oled.drawText(11,1,(FONT12X16),datebuf,oled.toRGB(255,255,0));
-          
-                if (seconds != nextsec) {RTCclockupdate();nextsec=seconds;}          
-                oled.getTouch(&xbuffer,&ybuffer);
+                oled.drawText(11,0,(FONT12X16),timebuf,oled.toRGB(255,255,255));
+                oled.drawText(11,1,(FONT12X16),datebuf,oled.toRGB(255,255,255));
+                
+                if (seconds != nextsec){T1.reset();RTCclockupdate();nextsec=seconds;}
+                oled.locate(20,0);
+                oled.printf("%02.f  ",T1.read()*100);          
+                oled.getTouch(&xbuffer,&ybuffer);            
     
-                oled.setFontSize(FONT5X7);oled.locate(40,6);    // this shows touch position
-                oled.printf("X %03d Y %03d  ",xbuffer,ybuffer); // and can be removed
+                oled.setFontSize(FONT5X7);oled.locate(40,9);    // this indicates touch position
+                oled.printf("X %03d Y %03d  ",xbuffer,ybuffer); // can be removed
     
                 if((xbuffer>195 && xbuffer<300) && (ybuffer>205 && ybuffer<220)){DCFclock();}
                 if((xbuffer>240 && xbuffer<300) && (ybuffer>182 && ybuffer<200)){RTCsetclock();}          
@@ -212,8 +218,7 @@
     oled.drawTextButton(1, 52, 115,(oled.toRGB(0,100,100)),(FONT8X12),(oled.toRGB(255,255,255)), 1, 1, "+");
     oled.drawTextButton(1, 52, 140,(oled.toRGB(0,100,100)),(FONT8X12),(oled.toRGB(255,255,255)), 1, 1, "-");
     oled.drawTextButton(1, 88, 115,(oled.toRGB(0,100,100)),(FONT8X12),(oled.toRGB(255,255,255)), 1, 1, "+");
-    oled.drawTextButton(1, 88, 140,(oled.toRGB(0,100,100)),(FONT8X12),(oled.toRGB(255,255,255)), 1, 1, "-");
-    
+    oled.drawTextButton(1, 88, 140,(oled.toRGB(0,100,100)),(FONT8X12),(oled.toRGB(255,255,255)), 1, 1, "-");    
     oled.drawTextButton(1, 174, 115,(oled.toRGB(0,100,100)),(FONT8X12),(oled.toRGB(255,255,255)), 1, 1, "+");
     oled.drawTextButton(1, 174, 140,(oled.toRGB(0,100,100)),(FONT8X12),(oled.toRGB(255,255,255)), 1, 1, "-");
     oled.drawTextButton(1, 208, 115,(oled.toRGB(0,100,100)),(FONT8X12),(oled.toRGB(255,255,255)), 1, 1, " + ");
@@ -221,23 +226,38 @@
     oled.drawTextButton(1, 270, 115,(oled.toRGB(0,100,100)),(FONT8X12),(oled.toRGB(255,255,255)), 1, 1, " + ");
     oled.drawTextButton(1, 270, 140,(oled.toRGB(0,100,100)),(FONT8X12),(oled.toRGB(255,255,255)), 1, 1, " - ");
     oled.setTextBackgroundType (TEXT_OPAQUE);
+    oled.setFontSize(FONT8X12);oled.locate (6,14);
+    oled.setFontColor(oled.toRGB(255,255,255));
+    time_t seconds = time(NULL); 
+    oled.printf("time_t = %d seconds",seconds); 
     RTCread();
     second=RTCsecond;minute=RTCminute;hour=RTChour;dayofweek=RTCdayofweek;dayofmonth=RTCdayofmonth;month=RTCmonth;year=RTCyear;    
     
-    while(IRQ==0){ 
-    
+    while(IRQ==0){    
         oled.enableTouch();
         time_t seconds = time(NULL);
-        strftime(timebuf, 32, "%H:%M:%S", localtime(&seconds));           
-        strftime(datebuf, 32, "%a %d %b' %Y", localtime(&seconds));
-        oled.drawText(0,2,(FONT12X16),timebuf,oled.toRGB(255,255,255));
-        oled.drawText(10,2,(FONT12X16),datebuf,oled.toRGB(255,255,255));
+        strftime(timebuf, 26, "%H:%M:%S", localtime(&seconds));        
+        strftime(datebuf, 26, "%a %d %b' %Y", localtime(&seconds));
+        oled.drawText(1,2,(FONT12X16),timebuf,oled.toRGB(255,255,0));
+        oled.drawText(10,2,(FONT12X16),datebuf,oled.toRGB(255,255,0));
+        oled.setFontSize(FONT8X12);oled.locate (6,5);
+        oled.setFontColor(oled.toRGB(255,255,255)); 
+        oled.printf("time_t = %d seconds",seconds); 
     
         oled.getTouch(&xbuffer,&ybuffer);        
-        if((xbuffer>240 && xbuffer<290) && (ybuffer>190 && ybuffer<210)){RTCclock();}
-        if((xbuffer>20 && xbuffer<109) && (ybuffer>190 && ybuffer<210)){set_time(1396310400);}
-        if((xbuffer>120 && xbuffer<195) && (ybuffer>195 && ybuffer<210)){RTCset();RTCread();
+        if((xbuffer>240 && xbuffer<290) && (ybuffer>190 && ybuffer<210)){IRQ=1;}
+        if((xbuffer>20 && xbuffer<109) && (ybuffer>190 && ybuffer<210)){
+            set_time(1420070400);time_t seconds = time(NULL);RTCread();
             second=RTCsecond;minute=RTCminute;hour=RTChour;dayofweek=RTCdayofweek;dayofmonth=RTCdayofmonth;month=RTCmonth;year=RTCyear;
+            oled.setFontSize(FONT8X12);oled.locate (6,14);
+            oled.setFontColor(oled.toRGB(255,255,255)); 
+            oled.printf("time_t = %d seconds",seconds);             
+        }
+        if((xbuffer>120 && xbuffer<195) && (ybuffer>195 && ybuffer<210)){RTCset();time_t seconds = time(NULL);RTCread();
+            second=RTCsecond;minute=RTCminute;hour=RTChour;dayofweek=RTCdayofweek;dayofmonth=RTCdayofmonth;month=RTCmonth;year=RTCyear;
+            oled.setFontSize(FONT8X12);oled.locate (6,14);
+            oled.setFontColor(oled.toRGB(255,255,255)); 
+            oled.printf("time_t = %d seconds",seconds); 
         }
         
         if((xbuffer>25 && xbuffer<40) && (ybuffer>124 && ybuffer<140)){hour++;}
@@ -271,9 +291,9 @@
         
         
         oled.setFontSize(FONT12X16);oled.locate(1,6);
-        oled.setFontColor(oled.toRGB(60,255,255));
+        oled.setFontColor(oled.toRGB(128,255,255));
         oled.printf("%2d:%02d:%02d ",hour,minute,second);
-        oled.printf("%s %02d %s' 20%02d",weekDayName[dayofweek],dayofmonth,monthName[month-1],year);
+        oled.printf("%s %02d %s' 20%02d",weekDayName[dayofweek],dayofmonth,monthName[month-1],year); 
     }
     
 }    
@@ -343,6 +363,22 @@
 
 void DCFclock()
 {   
+    oled.clear();
+    oled.drawText(0,1,(FONT12X16),("--- DCF77 Atomic Clock ---"),oled.toRGB(255,255,255));
+    oled.drawText(3,3,(FONT12X16),("Checking Signal..."),oled.toRGB(255,255,255));
+    T1.reset();T1.start();
+    while(dcfSignalIn == 1 && T1.read()<.5){}
+    while(dcfSignalIn == 0 && T1.read()<.5){}
+    T1.stop();
+    if (T1.read()>.5){
+        T1.stop();
+        oled.drawText(0,5,(FONT12X16),(" !! No signal detected !! "),oled.toRGB(255,0,0));
+        oled.drawText(2,9,(FONT8X12),("Connect Non inverting signal of DCF"),oled.toRGB(255,255,255)); 
+        oled.drawText(2,10,(FONT8X12),("receiver module to specified Pin."),oled.toRGB(255,255,255));
+        oled.drawText(5,12,(FONT8X12),("Running Demo mode."),oled.toRGB(255,255,255));
+        wait(5);
+        }       
+    wait(1);
     oled.clear();DCFbitmapdraw();RTCread();
     second=RTCsecond;minute=RTCminute;hour=RTChour;dayofweek=RTCdayofweek;dayofmonth=RTCdayofmonth;month=RTCmonth;year=RTCyear;
     if(tz==0) {oled.drawText(0,0,(FONT8X12)," RTC Clock Time (GMT)",oled.toRGB(255,0,0));}
@@ -361,8 +397,20 @@
     oled.drawLine(288,190,305,190, oled.toRGB(225, 255, 255));
     oled.drawText(0,26,(FONT5X7)," 0               start   min  hour Dt dy mon  year 60",oled.toRGB(255,0,0));
     oled.setTouchArea(240,140,290,160);
-    start=0;sync=0;x=0;y=5;r=0;SignalStatus=0;laststart=2;loop=0;interrupt_counter = 0;dcf_sec=0;error_count=0;       
+    start=0;sync=1;x=0;y=5;r=0;SignalStatus=0;
+    laststart=2;
+    loop=0;
+    //RTCset=0;
+    interrupt_counter = 0;dcf_sec=0;error_count=0,display=0;signal_error=0;rtcset_times=0;       
+    hour = 0;minute = 0,second = 0,dayofweek = 6;dayofmonth = 1;month = 1;year = 0;
 
+        T1.start();
+        while(dcfSignalIn == 1 && T1.read()<.5){}
+        while(dcfSignalIn == 0 && T1.read()<.5){}
+        T1.stop();
+        dcfSignalIn.rise(dcfIRQ); //Trigger dcfISR Ticker on rising edge of DCF pulse
+        interrupt_counter = 0;sync=0;
+        
     Ticker50ms.attach(& dcfISR, .05);
     
   while (IRQ==0) {
@@ -437,7 +485,7 @@
    if (interrupt_counter == 11 & second == 1) {  
         oled.setFontSize(FONT5X7);oled.locate(34,5);
         oled.setFontColor(oled.toRGB(255,255,255));
-        oled.printf("RTC set x %d", rtcset_times);                   
+        oled.printf("RTC set x %d", rtcset_times);             
    }
      
     if (interrupt_counter == 12){
@@ -454,8 +502,8 @@
     }
    
     if (interrupt_counter==13){   
-        if (start==0 && laststart != start) {oled.drawText(26,18,(FONT5X7),("No Sync"),oled.toRGB(255,0,0));laststart=start;}
-        if (start==1 && laststart != start) {oled.drawText(26,18,(FONT5X7),("In Sync"),oled.toRGB(0,255,0));laststart=start;}            
+        if (start==0 && laststart != start) {oled.drawText(26,18,(FONT5X7),("No Sync          "),oled.toRGB(255,0,0));laststart=start;}
+        if (start==1 && laststart != start) {oled.drawText(26,18,(FONT5X7),("In Sync - running"),oled.toRGB(0,255,0));laststart=start;}            
     }        
             
     if (interrupt_counter>13){
@@ -465,7 +513,7 @@
             oled.displayControl(0x01,0x01);display=1;
             oled.resetTouchArea();}}
             if((xbuffer>240 && xbuffer<290) && (ybuffer>140 && ybuffer<160)){
-            SignalIn.rise(NULL);Ticker50ms.detach();IRQ=1;}
+            dcfSignalIn.rise(NULL);Ticker50ms.detach();IRQ=1;}
     }
         
     if (interrupt_counter == 19){DCFbitstatus();}   
@@ -495,6 +543,7 @@
             month=p_month;
             year=p_year;
             oled.drawText(36,7,(FONT8X12),"*",oled.toRGB(0,255,0));
+            rtcset_times++;
 }
 void DCFbitprint()
 {
@@ -616,7 +665,7 @@
 {  
     interrupt_counter++;loop=0;
      
-    SignalLED = SignalIn;  // Show dcfSignal state on LED     
+    SignalLED = !dcfSignalIn;  // Show dcfSignal state on LED     
      
     if (interrupt_counter == 20) { // 50mS x 20 = 1000mS = 1 Second
         interrupt_counter = 0;second++;dcf_sec++;
@@ -637,28 +686,28 @@
            
         switch (interrupt_counter) {          
             case 1: { //  50mS after start of second pulse
-                dcf_status.DCFsample50 = (SignalIn);
+                dcf_status.DCFsample50 = (dcfSignalIn);
                break;}
             case 3: { // 150mS after start of second pulse (bit "1" dcf Data)
-                dcf_status.DCFsample150 = (SignalIn);                          
+                dcf_status.DCFsample150 = (dcfSignalIn);                          
                break;}
             case 6: { // 300mS after start of second (signal error if true)
-                dcf_status.DCFsample300 = (SignalIn);
-                if (SignalIn) {dcf_error = 1;}                 
+                dcf_status.DCFsample300 = (dcfSignalIn);
+                if (dcfSignalIn) {dcf_error = 1;}                 
                break;}                
             case 10: { // 500mS after start of second (signal error if true)
-                dcf_status.DCFsample500 = (SignalIn);
-                if (SignalIn) {dcf_error = 1;}                
+                dcf_status.DCFsample500 = (dcfSignalIn);
+                if (dcfSignalIn) {dcf_error = 1;}                
                break;}
             case 12: { // 600mS after start of second (signal error if true)
-                dcf_status.DCFsample600 = (SignalIn);
-                if (SignalIn) {dcf_error = 1;}                
+                dcf_status.DCFsample600 = (dcfSignalIn);
+                if (dcfSignalIn) {dcf_error = 1;}                
                break;}                                                                       
           }          
             if (dcf_status.DCFsample50==0 && dcf_sec<58){sync=0;}
                        
             if (interrupt_counter==1){
-                if (SignalIn){nosignal=1;}
+                if (dcfSignalIn){nosignal=1;}
                     else nosignal++;              
                 if (nosignal>5){nosignal=2; SignalStatus = 5;signal_error=1;}                                  
             }