Schakelklok met DS1307

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

Re: Schakelklok met DS1307

Berichtdoor nicoverduin » 26 Nov 2016, 12:44

Wacht maar ff jij gebruikt een andere lib zag k
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Advertisement

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

Re: Schakelklok met DS1307

Berichtdoor nicoverduin » 26 Nov 2016, 13:22

Probeer dit maar ff:
cpp code
#include <Wire.h>
#include <Time.h>
#include <TimeAlarms.h>
#include <DS1307RTC.h> // a basic DS1307 library that returns time as a time_t
int blauwled = 44;
int LED = 42; // which pin the LED is on
int LIGHTS = 0; // LED status (0 off, 1 on)

void setup()
{
// provide power to the RTC

// configure output light
pinMode(LED,OUTPUT);
pinMode(blauwled,OUTPUT);
digitalWrite(LED,LOW);
// start services
Serial.begin(9600);
Wire.begin();
// sync
setSyncProvider(RTC.get); // the function to get the time from the RTC
if(timeStatus()!= timeSet)
Serial.println("Unable to sync with the RTC");
else
Serial.println("RTC has set the system time");
// set alarm times
Alarm.alarmRepeat(6,00,00,LightsOn ); // turn light on
Alarm.alarmRepeat(22,30,00,LightsOff); // turn light off
//
// eventueel licht aanzetten na een verstoring
//
if (inInterval(0600, 2230)) {
//
// yep dus licht aan
//
LightsOn();
}

}

void loop()
{
digitalClockDisplay();
Alarm.delay(1000);
}

void LightsOn()
{
digitalWrite(LED,HIGH); // turn LED of
Serial.println("...turning lights on...");
}
void LightsOff()
{
digitalWrite(LED,LOW); // turn LED off
Serial.println("...turning lights off...");
}

void digitalClockDisplay()
{
// digital clock display of the time
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.print(" ");
Serial.print(day());
Serial.print(" ");
Serial.print(month());
Serial.print(" ");
Serial.print(year());
Serial.println();
}
void printDigits(int digits)
{
// utility function for digital clock display: prints preceding colon and leading 0
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}

/**
* bepaal of rtc tijd binnen interval valt. Ditverhaal gaat overigens op zolang de begin en eindtijd
* binnen de 24 uur vallen.
* @param begin uint16_t begin tijdstip (uren * 100) + minuten
* @param eind uint16_t eind tijdstip (uren * 100) + minuten
* @return true dan is het zo. false dus niet
*/
boolean inInterval(const uint16_t begin, const uint16_t eind) {
uint16_t nu; // huidige tijd als getal
nu = hour() * 100 + minute();
//
// kijk of de tijd in het interval ligt
//
if (nu >= begin && nu <= eind) {
//
// ja
//
return true;
} else {
//
// nee
//
return false;
}
}
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 118
Geregistreerd: 28 Dec 2014, 23:20
Woonplaats: Bilzen BE

Re: Schakelklok met DS1307

Berichtdoor Dries » 26 Nov 2016, 14:40

Dit werkt Nico :-)
nu ga ik proberen te begrijpen wat je mij hebt laten zien, in ieder geval een dikke merci!
Mag misschien ook eens gezegd worden dat door jullie deze hobby toch wel toegangelijker maakt zeker als je niemand kent in je omgeving om op terug te vallen. Ik heb electronica gestudeerd en ben er ook professioneel mee bezig. Nu wil ik me gaan verdiepen in de microcontrollers om er eventueel later ook professioneel mee bezig te kunnen zijn. Ben nog niet zo heel lang met Arduino bezig maar op deze manier wordt het natuurlijk veel toegangelijker voor iedereen.

Bedankt voor je tijd Nico
grts
Dries

Berichten: 118
Geregistreerd: 28 Dec 2014, 23:20
Woonplaats: Bilzen BE

Re: Schakelklok met DS1307

Berichtdoor Dries » 28 Nov 2016, 21:35

Mijn hoofd eventjes gepijnigd op je code en ik heb deze code eventjes in elkaar gestoken, dit ziet er echt belachelijk uit maar dit werkt ook. Weer iets bijgeleerd.

#include <Wire.h>
#include <DS1307RTC.h> // a basic DS1307 library that returns time as a time_t

int LED = 13; // which pin the LED is on
int LIGHTS = 0; // LED status (0 off, 1 on)
uint16_t nu;
uint16_t aan = 2015;
uint16_t uit = 2030;

void setup()
{
// provide power to the RTC

// configure output light
pinMode(LED,OUTPUT);

digitalWrite(LED,LOW);
// start services
Serial.begin(9600);
Wire.begin();
// sync
setSyncProvider(RTC.get); // the function to get the time from the RTC
if(timeStatus()!= timeSet)
Serial.println("Unable to sync with the RTC");
else
Serial.println("RTC has set the system time");


}

void loop()
{
digitalClockDisplay();
Interval();
}



void digitalClockDisplay()
{
// digital clock display of the time
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.print(" ");
Serial.print(day());
Serial.print(" ");
Serial.print(month());
Serial.print(" ");
Serial.print(year());
Serial.println();
Serial.println(nu);
delay(1000);
}
void printDigits(int digits)
{
// utility function for digital clock display: prints preceding colon and leading 0
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}


void Interval() {

nu = hour() * 100 + minute();
if (nu >= aan && nu <= uit) {
digitalWrite(LED,HIGH);
Serial.print("LICHTEN AAN ");
}
else {
digitalWrite(LED,LOW);
Serial.print("LICHTEN UIT ");
}
}

:lol:

Vorige

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 10 gasten