Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Thank for Ucglib library
- //By SimaKyr
- #include <SPI.h>
- #include <EEPROM.h>
- #include "Ucglib.h"
- // Color definitions
- Ucglib_ST7735_18x128x160_SWSPI ucg(/*sclk=*/ 12, /*data=*/ 11, /*cd=*/ 10 , /*cs=*/ 8, /*reset=*/ 9);
- String temp = "0", screen, tempt;
- int portled = 13, hset;
- uint16_t ccenterx, ccentery; //center x,y of the clock
- const uint16_t cradius = 50;//radius of the clock
- const float scosConst = 0.0174532925;
- float sx = 0, sy = 1, mx = 1, my = 0, hx = -1, hy = 0;
- float sdeg = 0, mdeg = 0, hdeg = 0, voltage = 0;
- uint16_t osx, osy, omx, omy, ohx, ohy;
- uint16_t x0 = 0, x1 = 0, yy0 = 0, yy1 = 0;
- uint32_t targetTime = 0;// for next 1 second timeout
- uint8_t hh, mm, ss; //containers for current time
- void drawLogo() {
- ucg.setColor(20, 255, 20);
- ucg.drawTetragon(34, 30, 7, 82, 33, 105, 62, 79);
- ucg.drawTetragon(29, 98, 14, 133, 20, 134, 32, 101);
- ucg.setColor(100, 100, 100);
- ucg.drawTetragon(34, 48, 32, 65, 30, 101, 31, 102);
- }
- void drawClockFace() {
- ucg.setColor(255, 255, 255);
- ucg.drawDisc(ccenterx, ccentery, cradius, UCG_DRAW_ALL);
- ucg.setColor(0, 0, 0);
- ucg.drawDisc(ccenterx, ccentery, cradius - 4, UCG_DRAW_ALL);
- // Draw 12 lines
- for (int i = 0; i < 360; i += 30) {
- sx = cos((i - 90) * scosConst);
- sy = sin((i - 90) * scosConst);
- x0 = sx * (cradius - 4) + ccenterx;
- yy0 = sy * (cradius - 4) + ccentery;
- x1 = sx * (cradius - 11) + ccenterx;
- yy1 = sy * (cradius - 11) + ccentery;
- ucg.setColor(255, 255, 255);
- ucg.drawLine(x0, yy0, x1, yy1);
- }
- }
- void mathtime() {
- targetTime = millis() + 1000;
- ss++;
- if (ss == 60) {
- ss = 0;
- if(screen == "clock"){
- ucg.setColor(0, 200, 0);
- ucg.drawBox(0, 0, 128, 20);
- ucg.setColor(255, 255, 255);
- ucg.setPrintPos(5, 15);
- ucg.setPrintPos(85, 15);
- ucg.print(hh);
- ucg.print(":");
- tempt = mm;
- if(tempt.length() == 1){ucg.print(mm);ucg.print("0");}
- else{ucg.print(mm);}
- }
- mm++;
- EEPROM.write(2, hh);
- EEPROM.write(3, mm);
- if (mm > 59) {
- mm = 0;
- hh++;
- if (hh > 23) hh = 0;
- }
- }
- }
- static uint8_t conv2d(const char* p) {
- uint8_t v = 0;
- if ('0' <= *p && *p <= '9') v = *p - '0';
- return 10 * v + *++p - '0';
- }
- void setup(void) {
- ucg.begin(UCG_FONT_MODE_TRANSPARENT);
- ucg.clearScreen();
- Serial.begin(9600);
- ucg.setPrintPos(50, 64);
- ucg.setColor(255, 255, 255);
- ucg.setFont(ucg_font_ncenR10_tr);
- digitalWrite(portled, 1);
- drawLogo();
- ucg.setColor(255, 255, 255);
- ucg.print("Booting...");
- ccenterx = 128 / 2;
- ccentery = 75;
- osx = ccenterx;
- osy = ccentery;
- omx = ccenterx;
- omy = ccentery;
- ohx = ccenterx;
- ohy = ccentery;
- if (EEPROM.read(1) == 0) {
- hh = conv2d(__TIME__);
- mm = conv2d(__TIME__ + 3);
- ss = conv2d(__TIME__ + 6);
- }
- if(EEPROM.read(1) == 1){
- hh = EEPROM.read(2);
- mm = EEPROM.read(3) + 1;
- hset = 20;
- //if(EEPROM.read(2) < hset){
- hh = hset; mm = 20;
- //} //Use this for set time
- }
- void drawBar(){
- ucg.setColor(0, 200, 0);
- ucg.drawBox(0, 0, 128, 20);
- }
- void drawTime(){
- ucg.setColor(255, 255, 255);
- //ucg.setPrintPos(5, 15);
- ucg.setPrintPos(85, 15);
- ucg.print(hh);
- ucg.print(":");
- tempt = mm;
- if(tempt.length() == 1){ucg.print(mm);ucg.print("0");}
- else{ucg.print(mm);}
- ucg.setColor(0, 200, 0);
- ucg.drawBox(0, 0, 128, 20);
- }
- /*
- ucg.setColor(255, 255, 255);
- if (analogRead(A0) * (5.0 / 1023.0) == 5.0 & digitalRead(2) == LOW) {
- ucg.setPrintPos(50, 64);
- ucg.print("Charging...");
- while (5 == analogRead(A0) * (5.0 / 1023.0)) {
- if (targetTime < millis()) {
- mathtime();
- delay(100);
- }
- }
- }
- //It need if using li-battery
- if (1.5 > analogRead(A0) * (5.0 / 1023.0)) {
- ucg.setPrintPos(50, 64);
- ucg.print("Charge");
- ucg.setPrintPos(50, 80);
- ucg.print("please!");
- delay(10000);
- while (1.5 > analogRead(A0) * (5.0 / 1023.0)) {
- if (targetTime < millis()) {
- mathtime();
- delay(100);
- }
- }
- }
- */
- ucg.clearScreen();
- /*
- if (digitalRead(2) == HIGH) {
- ucg.setColor(20, 20, 255);
- ucg.drawTetragon(34, 30, 7, 82, 33, 105, 62, 79);
- ucg.drawTetragon(29, 98, 14, 133, 20, 134, 32, 101);
- ucg.setColor(100, 100, 100);
- 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");
- while (0 == 0) {
- if (targetTime < millis()) {
- mathtime();
- delay(100);
- digitalWrite(2, HIGH);
- }
- }
- }
- */
- ucg.setColor(255, 255, 255);
- drawClockFace();// Draw clock face
- //get current time from compiler
- targetTime = millis() + 1000;
- EEPROM.write(1, 1);
- screen = "boot";
- drawBar();
- drawTime();
- screen = "screen";
- }
- void drawClockHands(uint8_t h, uint8_t m, uint8_t s) {
- // Pre-compute hand degrees, x & y coords for a fast screen update
- sdeg = s * 6; // 0-59 -> 0-354
- mdeg = m * 6 + sdeg * 0.01666667; // 0-59 -> 0-360 - includes seconds
- hdeg = h * 30 + mdeg * 0.0833333; // 0-11 -> 0-360 - includes minutes and seconds
- hx = cos((hdeg - 90) * scosConst);
- hy = sin((hdeg - 90) * scosConst);
- mx = cos((mdeg - 90) * scosConst);
- my = sin((mdeg - 90) * scosConst);
- sx = cos((sdeg - 90) * scosConst);
- sy = sin((sdeg - 90) * scosConst);
- // Erase just old hand positions
- ucg.setColor(0, 0, 0);
- ucg.drawLine(ohx, ohy, ccenterx + 1, ccentery + 1);
- ucg.drawLine(omx, omy, ccenterx + 1, ccentery + 1);
- ucg.drawLine(osx, osy, ccenterx + 1, ccentery + 1);
- // Draw new hand positions
- ucg.setColor(255, 255, 255);
- ucg.drawLine(hx * (cradius - 28) + ccenterx + 1, hy * (cradius - 28) + ccentery + 1, ccenterx + 1, ccentery + 1);
- ucg.drawLine(mx * (cradius - 17) + ccenterx + 1, my * (cradius - 17) + ccentery + 1, ccenterx + 1, ccentery + 1);
- ucg.setColor(80, 80, 255);
- ucg.drawLine(sx * (cradius - 14) + ccenterx + 1, sy * (cradius - 14) + ccentery + 1, ccenterx + 1, ccentery + 1);
- // Update old x&y coords
- osx = sx * (cradius - 14) + ccenterx + 1;
- osy = sy * (cradius - 14) + ccentery + 1;
- omx = mx * (cradius - 17) + ccenterx + 1;
- omy = my * (cradius - 17) + ccentery + 1;
- ohx = hx * (cradius - 28) + ccenterx + 1;
- ohy = hy * (cradius - 28) + ccentery + 1;
- }
- void loop() {
- if (targetTime < millis()) {
- mathtime();
- drawClockHands(hh, mm, ss);
- /*
- int voltage = analogRead(A0) * (5.0 / 1023.0) / 3.5 * 100;
- if (4.98 > analogRead(A0) * (5.0 / 1023.0)) {
- if (20 < voltage) {
- if (99 > voltage) {
- ucg.print("%");
- ucg.setPrintPos(20, 15);
- ucg.print(voltage);
- }
- }
- }//Draw voltage
- // It need if using li-battery
- int oldvoltage
- if (5 == analogRead(A0) * (5.0 / 1023.0)) {
- ucg.print("USB");
- }
- if (2 > analogRead(A0) * (5.0 / 1023.0)) {
- ucg.print("Charge!");
- }
- if (5 > voltage) {
- digitalWrite(portled, 0);
- } if (5 < voltage) {
- digitalWrite(portled, 1);
- }
- */
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement