DS1307 I2c Oled 0,96 I2c - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica) +--- Wątek: DS1307 I2c Oled 0,96 I2c (/watek-ds1307-i2c-oled-0-96-i2c) |
DS1307 I2c Oled 0,96 I2c - SpalonaATmega - 15-03-2024 Mam pewien kod ze strony do DS1307 z Oledem ale nie dziala, wgrywac sie wgrywa ale nie dziala nie pokazuje daty kod podaje #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include "RTClib.h" #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); RTC_DS1307 RTC; char days[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; void setup() { Serial.begin(115200); if ((DS1307_ON)) { Serial.println("Couldn't find RTC"); Serial.flush(); abort(); } RTC.adjust(DateTime(F(__DATE__), F(__TIME__))); if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x64 Serial.println(F("SSD1306 allocation failed")); for (;; } delay(1000); display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(30, 20); // Display static text display.println("RTC"); display.display(); delay(3000); display.clearDisplay(); } void loop() { DateTime now = RTC.now(); display.clearDisplay(); display.setTextSize(2); display.setCursor(0, 0); display.print(now.day()); display.print('/'); display.print(now.month()); display.print('/'); display.print(now.year()); display.println(days[now.dayOfTheWeek()]); display.println(' '); display.setCursor(0, 40); if (now.hour() < 10) display.print('0'); display.print(now.hour()); display.print(':'); if (now.minute() < 10) display.print('0'); display.print(now.minute()); display.print(':'); if (now.second() < 10) display.print('0'); display.println(now.second()); display.display(); } RE: DS1307 I2c Oled 0,96 I2c - SpalonaATmega - 15-03-2024 tej buzki tam nie ma to poprostu jakis skrót ze strony Fora RE: DS1307 I2c Oled 0,96 I2c - oscarX - 15-03-2024 A coś w ogóle wypisuje serialu, pokazuje na displayu? Trochę nie podoba mi się ta konstrukcja: Kod: if ((DS1307_ON)) { Skąd w setup() może być ustawione na sensowną wartość DS1307_ON? Jakoś tak nic nie robisz z I2C? Biblioteka od RTC raczej tego nie inicjalizuje - na I2C może być wiele urządzeń, które ma być odpowiedzialne za zainicjowanie? RE: DS1307 I2c Oled 0,96 I2c - kaczakat - 16-03-2024 Sprawdź też adres, te oledy nie zawsze są z 0x3E. RE: DS1307 I2c Oled 0,96 I2c - SpalonaATmega - 16-03-2024 (15-03-2024, 20:20)oscarX napisał(a): A coś w ogóle wypisuje serialu, pokazuje na displayu?pokazuje jedynie 00:00Saturday i date 1/1/2007 a czasami pokazuje jakies kreski RE: DS1307 I2c Oled 0,96 I2c - SpalonaATmega - 16-03-2024 (15-03-2024, 20:20)oscarX napisał(a): A coś w ogóle wypisuje serialu, pokazuje na displayu?to pokazuje 11:00:49.026 -> Couldn't find RTC po przetlumaczeniu 11:00:49.026 -> Nie udało się znaleźć RTC RE: DS1307 I2c Oled 0,96 I2c - SpalonaATmega - 16-03-2024 (16-03-2024, 02:39)kaczakat napisał(a): Sprawdź też adres, te oledy nie zawsze są z 0x3E.#include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include "RTClib.h" #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); RTC_DS1307 DS1307_RTC; char days[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; void setup() { Serial.begin(115200); if (! DS1307_RTC.begin()) { Serial.println("Couldn't find RTC"); Serial.flush(); abort(); } DS1307_RTC.adjust(DateTime(F(__DATE__), F(__TIME__))); if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x64 Serial.println(F("SSD1306 allocation failed")); for (;; } delay(1000); display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(30, 20); // Display static text display.println("RTC"); display.display(); delay(3000); display.clearDisplay(); } void loop() { DateTime now = DS1307_RTC.now(); display.clearDisplay(); display.setTextSize(2); display.setCursor(0, 0); display.print(now.day()); display.print('/'); display.print(now.month()); display.print('/'); display.print(now.year()); display.println(days[now.dayOfTheWeek()]); display.println(' '); display.setCursor(0, 40); if (now.hour() < 10) display.print('0'); display.print(now.hour()); display.print(':'); if (now.minute() < 10) display.print('0'); display.print(now.minute()); display.print(':'); if (now.second() < 10) display.print('0'); display.println(now.second()); display.display(); } ten kod dziala poprawiony przezemnie tylko literka 1 od dnia literami sie przesunela tam gdziedata cyferkami RE: DS1307 I2c Oled 0,96 I2c - MadMrQ - 16-03-2024 Ciekaw jestem, czy w pierwszym kodzie nie wystarczyło po prostu zmienić: if ((DS1307_ON)) na if ((!DS1307_ON)). Grunt, że podołałeś. Brawo! |