logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Arduino Nano, DHT11, LCD 16x02: RTC dodaje 2 minuty - jak ustabilizować czas?

pret55286 25 Gru 2023 17:54 327 10
REKLAMA
  • #1 20875939
    pret55286
    Poziom 4  
    Posty: 116
    Ocena: 1
    Witam.
    Mam problem z moim układem arduino.
    Mianowicie ostatnie zrobiłem układ wyświetlający dane z czujnika DHT 11 na ekranie LCD (16x02). Wszystko na arduino nano. I postanowiłem dodać zegar RTC i tu leży problem bo:
    Układ samodzielnie bez przyczyny dodaje 2 minuty do czasu. Bo nie mam pojęcie czemu tak możę się dziać.
    Jak ktoś ma pomysł jak to rozwiązać byłbym wdzięczny.
  • REKLAMA
  • #2 20876055
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1463
    pret55286 napisał:
    Układ samodzielnie bez przyczyny dodaje 2 minuty do czasu.


    Zawsze i wszędzie 2m ?
    Czy to tylko tak mniej więcej określiłeś, że się śpieszy OKOŁO 2m ?

    Wyrazisty błąd - gdyby tak było - by sugerował oprogramowanie
  • REKLAMA
  • #3 20876061
    pret55286
    Poziom 4  
    Posty: 116
    Ocena: 1
    Dobrze mój błąd. Na chwilę obecną 3 minuty się różni i ważne nie robi się to każdej godziny. Nie wiem czy to może być losowę ale po każdy wgraniu kodu(Czyli ustawienie dobrej daty) dzieję się to ale nigdy odrazy. A jak nie oprogramowanie to co może być?
  • #4 20876153
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1463
    pret55286 napisał:
    Nie wiem czy to może być losowę ale po każdy wgraniu kodu(Czyli ustawienie dobrej daty) dzieję się to ale nigdy odrazy.


    Coś mi pachnie, że kopiujesz masowo tu kopiowane błędnie ustawienie daty i czasu.

    pret55286 napisał:
    A jak nie oprogramowanie to co może być?


    Rozumiem kodu jesteś tak, pewien, że wykluczasz, i dlatego nie pokazujesz
  • #5 20876185
    pret55286
    Poziom 4  
    Posty: 116
    Ocena: 1
    1.Nie ponieważ za każdym razem wgrywam dobrom datę(pobierana z kompa).
    2. Robiłem kod na podstawienie tutoriali więc myślę że jest dobry ale w skrycie jest to połączenie sterowania ekranu LCD z obsługą czujnika DHT 11 i zegary RTC.
    To są tylko moje podejrzenia ale jak będzie potrzeba to pokaże kod(nie mówie że jestem modrala wszystko wiedziący tylko jak tylko pokazanie kodu pomoże)
  • #6 20876217
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1463
    Zapomniałem, że to świat Arduino
  • REKLAMA
  • #7 20876226
    pret55286
    Poziom 4  
    Posty: 116
    Ocena: 1
    To znaczy?
  • REKLAMA
  • #8 20876511
    Konto nie istnieje
    Poziom 1  
  • #9 20876605
    pret55286
    Poziom 4  
    Posty: 116
    Ocena: 1
    Dobrze ale mówię z góry że ten kod jest pisany "prostymi" sposobami , łączony z tutoriali itp.
    Więc kod będzie wyglądać paskudnie . I tak powiem tylko jak nie da się rozczytać to ja mogę wysłać skriny kodu. Ale dobrze to ten kod(cały):



    #include "DHT.h"
    #include <LiquidCrystal.h>
    #include <ThreeWire.h>
    #include <RtcDS1302.h>

    #define DHTPIN 7 // Digital pin connected to the DHT sensor
    // Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 --
    // Pin 15 can work but DHT must be disconnected during program upload.

    // Uncomment whatever type you're using!
    //#define DHTTYPE DHT11 // DHT 11
    #define DHTTYPE DHT11 // DHT 22 (AM2302), AM2321
    //#define DHTTYPE DHT21 // DHT 21 (AM2301)

    // Connect pin 1 (on the left) of the sensor to +5V
    // NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
    // to 3.3V instead of 5V!
    // Connect pin 2 of the sensor to whatever your DHTPIN is
    // Connect pin 3 (on the right) of the sensor to GROUND (if your sensor has 3 pins)
    // Connect pin 4 (on the right) of the sensor to GROUND and leave the pin 3 EMPTY (if your sensor has 4 pins)
    // Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
    ThreeWire myWire(8,6,13); // Dat ,clk,rst
    RtcDS1302<ThreeWire> Rtc(myWire);
    // Initialize DHT sensor.
    // Note that older versions of this library took an optional third parameter to
    // tweak the timings for faster processors. This parameter is no longer needed
    // as the current DHT reading algorithm adjusts itself to work on faster procs.
    DHT dht(DHTPIN, DHTTYPE);
    LiquidCrystal lcd(12,9,11,5,4,3,2);

    void setup() {
    Serial.begin(9600);
    Serial.println(F("DHTxx test!"));
    pinMode(6,OUTPUT);
    pinMode(8,OUTPUT);
    dht.begin();
    lcd.begin(16, 2);
    Rtc.Begin();
    ///RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__);
    //Rtc.SetDateTime(compiled);

    }

    void loop() {
    RtcDateTime now = Rtc.GetDateTime();

    digitalWrite(8,HIGH);
    digitalWrite(6,LOW);
    // Reading temperature or humidity takes about 250 milliseconds!
    // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
    float h = dht.readHumidity();
    // Read temperature as Celsius (the default)
    float t = dht.readTemperature();
    // Read temperature as Fahrenheit (isFahrenheit = true)
    float f = dht.readTemperature(true);
    t = t - 2.5;
    // Check if any reads failed and exit early (to try again).
    if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
    }

    // Compute heat index in Fahrenheit (the default)
    float hif = dht.computeHeatIndex(f, h);
    // Compute heat index in Celsius (isFahreheit = false)
    float hic = dht.computeHeatIndex(t, h, false);
    int Day = now.DayOfWeek();
    //Serial.print(Day);
    lcd.setCursor(0,0);
    lcd.print(t);
    lcd.print("C ");
    if (Day == 1)
    {
    lcd.print("PON ");

    }
    if (Day == 2)
    {
    lcd.print("WT ");

    }
    if (Day == 3)
    {
    lcd.print("SRO ");

    }
    if (Day == 4)
    {
    lcd.print("CZW ");

    }
    if (Day == 5)
    {
    lcd.print("PT ");

    }
    if (Day == 6)
    {
    lcd.print("SOB ");

    }
    if (Day == 0)
    {
    lcd.print("ND ");

    }
    lcd.print(now.Day());
    lcd.print("/");
    lcd.print(now.Month());



    lcd.setCursor(0,1 );
    lcd.print(h);
    lcd.print("% ");
    lcd.print(now.Hour());
    lcd.print(":");
    lcd.print(now.Minute());
    lcd.print(":");
    lcd.print(now.Second());
    delay(500);
    lcd.clear();
    }
  • #11 20876650
    pret55286
    Poziom 4  
    Posty: 116
    Ocena: 1

    Manipulować ręcznie? To znaczy? Jestem dość zielony i niezbyt wiem, co to znaczy.
    Gdybym był bardziej zaawansowany, może samodzielnie bym rozwiązał ten problem, ale nie jestem, dlatego piszę tutaj, ale mniejsza.
    Nie, stworzyłem to na podstawie jakiegoś tutorialu i działało dobrze, ale do czasu zmiany czasu (nie przez moją ingerencję). Jedna rzecz, którą zauważyłem, to że dzieje się (na chwilę obecną) tylko raz, a zegar chodzi "git" o 2 minuty do przodu.

Podsumowanie tematu

✨ Użytkownik ma problem z układem Arduino Nano, który wyświetla dane z czujnika DHT11 na ekranie LCD 16x02 oraz z zegarem RTC, który dodaje 2 minuty do czasu. Po każdorazowym wgraniu kodu zegar działa poprawnie, ale z czasem zaczyna się spieszyć. Użytkownik podejrzewa, że problem może leżeć w błędnym ustawieniu daty i czasu lub w kodzie, który łączy obsługę LCD, DHT11 i RTC. Inni uczestnicy dyskusji sugerują, że konieczne jest pokazanie fragmentu kodu odpowiedzialnego za współpracę z RTC, aby zdiagnozować problem.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA