Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * The MIT License (MIT)
- *
- * Copyright (c) 2018 by ThingPulse, Daniel Eichhorn
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * ThingPulse invests considerable time and money to develop these open source libraries.
- * Please support us by buying our products (and not the clones) from
- * https://thingpulse.com
- *
- */
- #include <WiFi.h>
- #include "time.h"
- #include <TimeLib.h>
- // Include the correct display library
- // For a connection via I2C using Wire include
- #include <Wire.h> // Only needed for Arduino 1.6.5 and earlier
- #include "SSD1306Wire.h" // legacy include: `#include "SSD1306.h"`
- #include <WiFiUdp.h>
- // Include the UI lib
- #include "OLEDDisplayUi.h"
- // Include custom images
- #include "images.h"
- // Initialize the OLED display using Wire library
- SSD1306Wire display(0x3c, 5, 4);
- // SH1106 display(0x3c, D3, D5);
- OLEDDisplayUi ui ( &display );
- //// Aggiungo conessione internet
- const char* ssid = "foresto-salone";
- const char* password = "sweettrail508";
- const char* ntpServer = "pool.ntp.org";
- const long gmtOffset_sec = 3600;
- const int daylightOffset_sec = 3600;
- ////fine aggiunta
- int screenW = 128;
- int screenH = 64;
- int clockCenterX = screenW/2;
- int clockCenterY = ((screenH-16)/2)+16; // top yellow part is 16 px height
- int clockRadius = 23;
- // utility function for digital clock display: prints leading 0
- String twoDigits(int digits){
- if(digits < 10) {
- String i = '0'+String(digits);
- return i;
- }
- else {
- return String(digits);
- }
- }
- void clockOverlay(OLEDDisplay *display, OLEDDisplayUiState* state) {
- }
- void analogClockFrame(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
- // ui.disableIndicator();
- // Draw the clock face
- // display->drawCircle(clockCenterX + x, clockCenterY + y, clockRadius);
- display->drawCircle(clockCenterX + x, clockCenterY + y, 2);
- //
- //hour ticks
- for( int z=0; z < 360;z= z + 30 ){
- //Begin at 0° and stop at 360°
- float angle = z ;
- angle = ( angle / 57.29577951 ) ; //Convert degrees to radians
- int x2 = ( clockCenterX + ( sin(angle) * clockRadius ) );
- int y2 = ( clockCenterY - ( cos(angle) * clockRadius ) );
- int x3 = ( clockCenterX + ( sin(angle) * ( clockRadius - ( clockRadius / 8 ) ) ) );
- int y3 = ( clockCenterY - ( cos(angle) * ( clockRadius - ( clockRadius / 8 ) ) ) );
- display->drawLine( x2 + x , y2 + y , x3 + x , y3 + y);
- }
- // display second hand
- float angle = second() * 6 ;
- angle = ( angle / 57.29577951 ) ; //Convert degrees to radians
- int x3 = ( clockCenterX + ( sin(angle) * ( clockRadius - ( clockRadius / 5 ) ) ) );
- int y3 = ( clockCenterY - ( cos(angle) * ( clockRadius - ( clockRadius / 5 ) ) ) );
- display->drawLine( clockCenterX + x , clockCenterY + y , x3 + x , y3 + y);
- //
- // display minute hand
- angle = minute() * 6 ;
- angle = ( angle / 57.29577951 ) ; //Convert degrees to radians
- x3 = ( clockCenterX + ( sin(angle) * ( clockRadius - ( clockRadius / 4 ) ) ) );
- y3 = ( clockCenterY - ( cos(angle) * ( clockRadius - ( clockRadius / 4 ) ) ) );
- display->drawLine( clockCenterX + x , clockCenterY + y , x3 + x , y3 + y);
- //
- // display hour hand
- angle = hour() * 30 + int( ( minute() / 12 ) * 6 ) ;
- angle = ( angle / 57.29577951 ) ; //Convert degrees to radians
- x3 = ( clockCenterX + ( sin(angle) * ( clockRadius - ( clockRadius / 2 ) ) ) );
- y3 = ( clockCenterY - ( cos(angle) * ( clockRadius - ( clockRadius / 2 ) ) ) );
- display->drawLine( clockCenterX + x , clockCenterY + y , x3 + x , y3 + y);
- }
- void digitalClockFrame(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
- String timenow = String(hour())+":"+twoDigits(minute());
- display->setTextAlignment(TEXT_ALIGN_CENTER);
- display->setFont(Rock_Salt_Regular_28);
- display->drawString(68, 2, timenow);
- }
- // This array keeps function pointers to all frames
- // frames are the single views that slide in
- FrameCallback frames[] = { analogClockFrame, digitalClockFrame };
- // how many frames are there?
- int frameCount = 2;
- // Overlays are statically drawn on top of a frame eg. a clock
- OverlayCallback overlays[] = { clockOverlay };
- int overlaysCount = 1;
- void printLocalTime()
- {
- struct tm timeinfo;
- if(!getLocalTime(&timeinfo)){
- Serial.println("Failed to obtain time");
- return;
- }
- Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
- }
- void setup() {
- Serial.begin(9600);
- Serial.println();
- // The ESP is capable of rendering 60fps in 80Mhz mode
- // but that won't give you much time for anything else
- // run it in 160Mhz mode or just set it to 30 fps
- ui.setTargetFPS(60);
- // Customize the active and inactive symbol
- ui.setActiveSymbol(activeSymbol);
- ui.setInactiveSymbol(inactiveSymbol);
- // You can change this to
- // TOP, LEFT, BOTTOM, RIGHT
- ui.setIndicatorPosition(TOP);
- // Defines where the first frame is located in the bar.
- ui.setIndicatorDirection(LEFT_RIGHT);
- // You can change the transition that is used
- // SLIDE_LEFT, SLIDE_RIGHT, SLIDE_UP, SLIDE_DOWN
- ui.setFrameAnimation(SLIDE_LEFT);
- // Add frames
- ui.setFrames(frames, frameCount);
- // Add overlays
- ui.setOverlays(overlays, overlaysCount);
- // Initialising the UI will init the display too.
- ui.init();
- display.flipScreenVertically();
- //connect to WiFi
- Serial.printf("Connecting to %s ", ssid);
- WiFi.begin(ssid, password);
- while (WiFi.status() != WL_CONNECTED) {
- delay(500);
- Serial.print(".");
- }
- Serial.println(" CONNECTED");
- //init and get the time
- configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
- printLocalTime();
- //disconnect WiFi as it's no longer needed
- WiFi.disconnect(true);
- WiFi.mode(WIFI_OFF);
- time_t now;
- time(&now);
- Serial.println(now);
- setTime(now+7200);
- }
- void loop() {
- int remainingTimeBudget = ui.update();
- if (remainingTimeBudget > 0) {
- // You can do some work here
- // Don't do stuff if you are below your
- // time budget.
- delay(remainingTimeBudget);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement