Arduino UNO met een DS3231 RTC

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 2
Geregistreerd: 11 Jan 2017, 20:27

Arduino UNO met een DS3231 RTC

Berichtdoor wbleijenberg » 11 Jan 2017, 20:43

Beste mensen,

Ik ben helemaal nieuw op het gebied van Arduino en het programmeren daarvan.

Graag zou ik willen dat mijn DS3231 met een Arduino UNO op een LCD 16X2 (4kabels) de tijd aangeeft.
Ik heb al van alles zitten te puzzelen maar ik kom er niet uit.
Heeft iemand voor mij een sketch die lekker werkt of waarbij ik om de tijd goed te zetten gebruik kan maken van push buttons?

Met vriendelijke groet,
Willem

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Arduino UNO met een DS3231 RTC

Berichtdoor Koepel » 11 Jan 2017, 23:03

Kun je de tijd opvragen en op de seriële monitor laten zien ?
Kun je iets op het display zetten, bijvoorbeeld "Hallo" ?
Tot zover is het standaard.

Om met knoppen de tijd goed te zetten vergt nogal wat programmeerwerk. Ik weet helaas geen voorbeeld. Meestal wordt de compiler tijd gebruikt om een eerste start te maken.
Code: Alles selecteren
if(!rtc.initialized())
  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

Gebruikers-avatar
Berichten: 210
Geregistreerd: 03 Sep 2013, 10:03
Woonplaats: Katwijk ZH

Re: Arduino UNO met een DS3231 RTC

Berichtdoor baco1978 » 12 Jan 2017, 11:57

Met vriendelijke groet Arjan

Berichten: 2
Geregistreerd: 11 Jan 2017, 20:27

Re: Arduino UNO met een DS3231 RTC

Berichtdoor wbleijenberg » 14 Jan 2017, 15:06

Hallo;

Ben inmiddels al weer een stuk verder.
Van de DS3231 heb ik SDA op A5 aangesloten en de SCL op A4
Ik gebruik ook een 20X4 LCD op basis van I2C, deze zijn gewoon op de Arduino UNO aangesloten
Hieronder staat mijn code.

Code: Alles selecteren
// Date and time functions using a DS3231 RTC connected via I2C and Wire lib
#include <Wire.h>
#include "RTClib.h"
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Addr, En, Rw, Rs, d4, d5, d6, d7, backlighpin, polarity
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Zondag:", "Maandag:", "Dinsadg:", "Woensdag:", "Donderdag:", "Vrijdag:", "Zaterdag:"};

//=====================
void setup () {
lcd.begin(16, 2);
//=====================
#ifndef ESP8266
  while (!Serial); // for Leonardo/Micro/Zero
#endif

  Serial.begin(9600);

  delay(3000); // wait for console opening

  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
   
  }

  if (rtc.lostPower()) {
    Serial.println("RTC lost power, lets set the time!");
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
  }
}

void loop () {
    DateTime now = rtc.now();
    //==========
    lcd.setCursor(0, 0);
    lcd.print("Datum:");
    //==========
    lcd.setCursor(13, 0);
    lcd.print(now.year(), DEC);
    Serial.print(now.year(), DEC);
    Serial.print('/');
    lcd.setCursor(11, 0);
    lcd.print(now.month(), DEC);
    Serial.print(now.month(), DEC);
    Serial.print('/');
    lcd.setCursor(7, 0);
    lcd.print(now.day(), DEC);
    Serial.print(now.day(), DEC);
    //==========
    lcd.setCursor(0, 1);
    lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
    Serial.print(" (");
    Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
    lcd.setCursor(10, 1);
    lcd.print(now.hour(), DEC);
    Serial.print(") ");
    Serial.print(now.hour(), DEC);
    lcd.setCursor(13, 1);
    lcd.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    lcd.setCursor(16, 1);
    lcd.print(now.second(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
   
    Serial.print(" since midnight 1/1/1970 = ");
    Serial.print(now.unixtime());
    Serial.print("s = ");
    Serial.print(now.unixtime() / 86400L);
    Serial.println("d");
   
    // calculate a date which is 7 days and 30 seconds into the future
    DateTime future (now + TimeSpan(7,12,30,6));
   
    Serial.print(" now + 7d + 30s: ");
    Serial.print(future.year(), DEC);
    Serial.print('/');
    Serial.print(future.month(), DEC);
    Serial.print('/');
    Serial.print(future.day(), DEC);
    Serial.print(' ');
    Serial.print(future.hour(), DEC);
    Serial.print(':');
    Serial.print(future.minute(), DEC);
    Serial.print(':');
    Serial.print(future.second(), DEC);
    Serial.println();
   
    Serial.println();
    delay(1000);
   
}

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Arduino UNO met een DS3231 RTC

Berichtdoor nicoverduin » 14 Jan 2017, 19:33

de functie sprintf() zou wel eens de moeite kunnen zijn om het aantal regels code met meer dan 50% te reduceren
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 10 gasten