Schakelklok met DS1307

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

Re: Schakelklok met DS1307

Berichtdoor Dries » 25 Nov 2016, 09:56

Dit heb ik getest Nico, de Arduino gereset of de voeding eraf gehaald, beide hetzelfde negatief resultaat, de led is uit terwijl deze aan zou moeten zijn.

Advertisement

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

Re: Schakelklok met DS1307

Berichtdoor nicoverduin » 25 Nov 2016, 12:14

Ik heb die lib nog ff beter bekeken, maar hij zet de trigger gelijk voor de volgende keer als hij al verlopen is. Maar dat maakt niet uit. Dit lost het niet op. Dan zou je in de setup() handmatig moeten testen of hij al had moeten lopen. Dus stel hij loopt al (dit moet je nog wel ff vertalen):
cpp code
if (rtctijd > alarmstarttijd  && rtctijd <= alarmstoptijd) {
digitalWrite(LED, HIGH);
}

Uitzetten hoeft niet want dat was ie al.
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 » 25 Nov 2016, 22:05

hoe vertaal je rtc tijd? RTC.get accepteert de compiler niet

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

Re: Schakelklok met DS1307

Berichtdoor nicoverduin » 25 Nov 2016, 22:18

Ff googelen op de rtc libray
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, 00:33

Ondertussen het programma kunnen aanpassen met jou regel maar heelaas hetzelfde fenomeen. lijkt precies toch niet zo simpel te zijn?

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

Re: Schakelklok met DS1307

Berichtdoor Koepel » 26 Nov 2016, 02:11

Heb je het na de setSyncProvider() gedaan ?

Ik heb zelf de TimeAlarms (https://www.pjrc.com/teensy/td_libs_TimeAlarms.html) nog niet gebruikt, maar ik heb begrepen dat hij op bepaalde tijden de callback-functie aanroept. Al het andere is aan de gebruiker. De TimeAlarms heeft geen idee wat de gebruiker er mee doet, als de callback-functie aangeroepen moet worden, dan doet hij dat. Dat is alles.

De beginsituatie zul je dus zelf goed moeten zetten.
Kun je de code laten zien hoe je kijkt of de led aan moet ? Je gebruikt "hour()" neem ik aan ?

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

Re: Schakelklok met DS1307

Berichtdoor nicoverduin » 26 Nov 2016, 10:39

Dries schreef:Ondertussen het programma kunnen aanpassen met jou regel maar heelaas hetzelfde fenomeen. lijkt precies toch niet zo simpel te zijn?
Laat die sketch maar zien wat je gedaan hebt.
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, 10:53

ik heb een tweede blauwe "debug" led toegevoegd:
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

if (RTC.get > LightsOn && RTC.get <= LightsOff) {
digitalWrite(blauwled, HIGH);
}





}

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);
}

Deze sketch werkt nu en mijn led op pin 42 is nu aan, na een reset of voedingsonderbreking is deze led dus uit.

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

Re: Schakelklok met DS1307

Berichtdoor nicoverduin » 26 Nov 2016, 10:58

Nee dat gaat zeker niet werken.....
Wat ik bedoelde met vertalen was dat je ff de uren en minuten uit de klok moet halen en dan kijken of deze groter zijn dan je starttijd en kleiner dan je eindtijd.

Meest gemakkelijk is om de uren met 100 te vermenigvuldigen in een uint16_t variabele en daarbij de minuten op te tellen. Vervolgens test je dat getal af tegen je start en stop tijd.

@edit:
dus zo:

Deze functie aan het einde van je sketch toevoegen

cpp code
/**
* 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
DateTime huidigeTijd = rtc.now();
nu = huidigeTijd.hour() * 100 + huidigeTijd.minute();
//
// kijk of de tijd in het interval ligt
//
if (nu <= eind && nu >= begin) {
//
// ja
//
return true;
} else {
//
// nee
//
return false;
}
}


En dan in de setup() aan het einde (voor de sluit accolade)

cpp code
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, 12:09

bedankt Nico, ik ga ermee aan de slag en hou je op de hoogte :-)

VorigeVolgende

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten