Advertisement
Guest User

Untitled

a guest
Sep 17th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Thank for Ucglib library
  2. //By SimaKyr
  3. #include <SPI.h>
  4. #include <EEPROM.h>
  5. #include "Ucglib.h"
  6.  
  7. // Color definitions
  8. Ucglib_ST7735_18x128x160_SWSPI ucg(/*sclk=*/ 12, /*data=*/ 11, /*cd=*/ 10 , /*cs=*/ 8, /*reset=*/ 9);
  9. String temp = "0", screen, tempt;
  10. int portled = 13, hset;
  11. uint16_t ccenterx, ccentery; //center x,y of the clock
  12. const uint16_t cradius = 50;//radius of the clock
  13. const float scosConst = 0.0174532925;
  14. float sx = 0, sy = 1, mx = 1, my = 0, hx = -1, hy = 0;
  15. float sdeg = 0, mdeg = 0, hdeg = 0, voltage = 0;
  16. uint16_t osx, osy, omx, omy, ohx, ohy;
  17. uint16_t x0 = 0, x1 = 0, yy0 = 0, yy1 = 0;
  18. uint32_t targetTime = 0;// for next 1 second timeout
  19. uint8_t hh, mm, ss; //containers for current time
  20.  
  21. void drawLogo() {
  22.   ucg.setColor(20, 255, 20);
  23.   ucg.drawTetragon(34, 30, 7, 82, 33, 105, 62, 79);
  24.   ucg.drawTetragon(29, 98, 14, 133, 20, 134, 32, 101);
  25.   ucg.setColor(100, 100, 100);
  26.   ucg.drawTetragon(34, 48, 32, 65, 30, 101, 31, 102);
  27. }
  28. void drawClockFace() {
  29.   ucg.setColor(255, 255, 255);
  30.   ucg.drawDisc(ccenterx, ccentery, cradius, UCG_DRAW_ALL);
  31.   ucg.setColor(0, 0, 0);
  32.   ucg.drawDisc(ccenterx, ccentery, cradius - 4, UCG_DRAW_ALL);
  33.   // Draw 12 lines
  34.   for (int i = 0; i < 360; i += 30) {
  35.     sx = cos((i - 90) * scosConst);
  36.     sy = sin((i - 90) * scosConst);
  37.     x0 = sx * (cradius - 4) + ccenterx;
  38.     yy0 = sy * (cradius - 4) + ccentery;
  39.     x1 = sx * (cradius - 11) + ccenterx;
  40.     yy1 = sy * (cradius - 11) + ccentery;
  41.     ucg.setColor(255, 255, 255);
  42.     ucg.drawLine(x0, yy0, x1, yy1);
  43.   }
  44. }
  45. void mathtime() {
  46.   targetTime = millis() + 1000;
  47.   ss++;
  48.   if (ss == 60) {
  49.     ss = 0;
  50.     if(screen == "clock"){
  51.         ucg.setColor(0, 200, 0);
  52.       ucg.drawBox(0, 0, 128, 20);
  53.       ucg.setColor(255, 255, 255);
  54.       ucg.setPrintPos(5, 15);
  55.       ucg.setPrintPos(85, 15);
  56.       ucg.print(hh);
  57.       ucg.print(":");
  58.       tempt = mm;
  59.       if(tempt.length() == 1){ucg.print(mm);ucg.print("0");}
  60.       else{ucg.print(mm);}
  61.      
  62.    }
  63.     mm++;
  64.     EEPROM.write(2, hh);
  65.     EEPROM.write(3, mm);
  66.     if (mm > 59) {
  67.       mm = 0;
  68.       hh++;
  69.       if (hh > 23) hh = 0;
  70.     }
  71.   }
  72. }
  73. static uint8_t conv2d(const char* p) {
  74.   uint8_t v = 0;
  75.   if ('0' <= *p && *p <= '9') v = *p - '0';
  76.   return 10 * v + *++p - '0';
  77. }
  78.  
  79. void setup(void) {
  80.   ucg.begin(UCG_FONT_MODE_TRANSPARENT);
  81.   ucg.clearScreen();
  82.   Serial.begin(9600);
  83.   ucg.setPrintPos(50, 64);
  84.   ucg.setColor(255, 255, 255);
  85.   ucg.setFont(ucg_font_ncenR10_tr);
  86.   digitalWrite(portled, 1);
  87.   drawLogo();
  88.   ucg.setColor(255, 255, 255);
  89.   ucg.print("Booting...");
  90.   ccenterx = 128 / 2;
  91.   ccentery = 75;
  92.   osx = ccenterx;
  93.   osy = ccentery;
  94.   omx = ccenterx;
  95.   omy = ccentery;
  96.   ohx = ccenterx;
  97.   ohy = ccentery;
  98.   if (EEPROM.read(1) == 0) {
  99.     hh = conv2d(__TIME__);
  100.     mm = conv2d(__TIME__ + 3);
  101.     ss = conv2d(__TIME__ + 6);
  102.   }
  103.   if(EEPROM.read(1) == 1){
  104.     hh = EEPROM.read(2);
  105.     mm = EEPROM.read(3) + 1;
  106.     hset = 20;
  107.     //if(EEPROM.read(2) < hset){
  108.     hh = hset; mm = 20;
  109.     //} //Use this for set time
  110.     }
  111.   void drawBar(){
  112.   ucg.setColor(0, 200, 0);
  113.   ucg.drawBox(0, 0, 128, 20);
  114.   }
  115.   void drawTime(){
  116.       ucg.setColor(255, 255, 255);
  117.       //ucg.setPrintPos(5, 15);
  118.       ucg.setPrintPos(85, 15);
  119.       ucg.print(hh);
  120.       ucg.print(":");
  121.       tempt = mm;
  122.       if(tempt.length() == 1){ucg.print(mm);ucg.print("0");}
  123.       else{ucg.print(mm);}
  124.  
  125.                 ucg.setColor(0, 200, 0);
  126.       ucg.drawBox(0, 0, 128, 20);
  127.      
  128.   }
  129.  
  130.   /*
  131.   ucg.setColor(255, 255, 255);
  132.   if (analogRead(A0) * (5.0 / 1023.0) == 5.0 & digitalRead(2) == LOW) {
  133.     ucg.setPrintPos(50, 64);
  134.     ucg.print("Charging...");
  135.     while (5 == analogRead(A0) * (5.0 / 1023.0)) {
  136.       if (targetTime < millis()) {
  137.         mathtime();
  138.         delay(100);
  139.       }
  140.     }
  141.   }
  142.   //It need if using li-battery
  143.   if (1.5 > analogRead(A0) * (5.0 / 1023.0)) {
  144.     ucg.setPrintPos(50, 64);
  145.     ucg.print("Charge");
  146.     ucg.setPrintPos(50, 80);
  147.     ucg.print("please!");
  148.     delay(10000);
  149.     while (1.5 > analogRead(A0) * (5.0 / 1023.0)) {
  150.       if (targetTime < millis()) {
  151.         mathtime();
  152.         delay(100);
  153.       }
  154.     }
  155.   }
  156.   */
  157.     ucg.clearScreen();
  158.     /*
  159.   if (digitalRead(2) == HIGH) {
  160.     ucg.setColor(20, 20, 255);
  161.     ucg.drawTetragon(34, 30, 7, 82, 33, 105, 62, 79);
  162.     ucg.drawTetragon(29, 98, 14, 133, 20, 134, 32, 101);
  163.     ucg.setColor(100, 100, 100);
  164.     ucg.drawTetragon(34, 48, 32, 65, 30, 101, 31, 102); ucg.setColor(255, 255, 255); ucg.setPrintPos(50, 64); ucg.print("Firework"); ucg.setPrintPos(50, 80); ucg.print("mode");
  165.     while (0 == 0) {
  166.       if (targetTime < millis()) {
  167.         mathtime();
  168.         delay(100);
  169.         digitalWrite(2, HIGH);
  170.       }
  171.     }
  172.   }
  173.   */
  174.  
  175.   ucg.setColor(255, 255, 255);
  176.   drawClockFace();// Draw clock face
  177.   //get current time from compiler
  178.   targetTime = millis() + 1000;
  179.   EEPROM.write(1, 1);
  180.       screen = "boot";
  181.       drawBar();
  182.       drawTime();
  183.       screen = "screen";
  184. }
  185. void drawClockHands(uint8_t h, uint8_t m, uint8_t s) {
  186.   // Pre-compute hand degrees, x & y coords for a fast screen update
  187.   sdeg = s * 6;                  // 0-59 -> 0-354
  188.   mdeg = m * 6 + sdeg * 0.01666667;  // 0-59 -> 0-360 - includes seconds
  189.   hdeg = h * 30 + mdeg * 0.0833333;  // 0-11 -> 0-360 - includes minutes and seconds
  190.   hx = cos((hdeg - 90) * scosConst);
  191.   hy = sin((hdeg - 90) * scosConst);
  192.   mx = cos((mdeg - 90) * scosConst);
  193.   my = sin((mdeg - 90) * scosConst);
  194.   sx = cos((sdeg - 90) * scosConst);
  195.   sy = sin((sdeg - 90) * scosConst);
  196.  
  197.   // Erase just old hand positions
  198.   ucg.setColor(0, 0, 0);
  199.   ucg.drawLine(ohx, ohy, ccenterx + 1, ccentery + 1);
  200.   ucg.drawLine(omx, omy, ccenterx + 1, ccentery + 1);
  201.   ucg.drawLine(osx, osy, ccenterx + 1, ccentery + 1);
  202.   // Draw new hand positions
  203.   ucg.setColor(255, 255, 255);
  204.   ucg.drawLine(hx * (cradius - 28) + ccenterx + 1, hy * (cradius - 28) + ccentery + 1, ccenterx + 1, ccentery + 1);
  205.   ucg.drawLine(mx * (cradius - 17) + ccenterx + 1, my * (cradius - 17) + ccentery + 1, ccenterx + 1, ccentery + 1);
  206.   ucg.setColor(80, 80, 255);
  207.   ucg.drawLine(sx * (cradius - 14) + ccenterx + 1, sy * (cradius - 14) + ccentery + 1, ccenterx + 1, ccentery + 1);
  208.  
  209.   // Update old x&y coords
  210.   osx = sx * (cradius - 14) + ccenterx + 1;
  211.   osy = sy * (cradius - 14) + ccentery + 1;
  212.   omx = mx * (cradius - 17) + ccenterx + 1;
  213.   omy = my * (cradius - 17) + ccentery + 1;
  214.   ohx = hx * (cradius - 28) + ccenterx + 1;
  215.   ohy = hy * (cradius - 28) + ccentery + 1;
  216. }
  217.  
  218.  
  219. void loop() {
  220.   if (targetTime < millis()) {
  221.     mathtime();
  222.     drawClockHands(hh, mm, ss);
  223.    
  224.     /*
  225.     int voltage = analogRead(A0) * (5.0 / 1023.0) / 3.5 * 100;
  226.     if (4.98 > analogRead(A0) * (5.0 / 1023.0)) {
  227.       if (20 < voltage) {
  228.         if (99 > voltage) {
  229.           ucg.print("%");
  230.           ucg.setPrintPos(20, 15);
  231.           ucg.print(voltage);
  232.         }
  233.       }
  234.     }//Draw voltage
  235.    
  236.      // It need if using li-battery
  237.     int oldvoltage
  238.     if (5 == analogRead(A0) * (5.0 / 1023.0)) {
  239.       ucg.print("USB");
  240.     }
  241.     if (2 > analogRead(A0) * (5.0 / 1023.0)) {
  242.       ucg.print("Charge!");
  243.     }
  244.    
  245.     if (5 > voltage) {
  246.       digitalWrite(portled, 0);
  247.     } if (5 < voltage) {
  248.       digitalWrite(portled, 1);
  249.     }
  250.     */
  251.   }
  252. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement