Schakelklok met DS1307
24 berichten
• Pagina 2 van 3 • 1, 2, 3
Re: Schakelklok met DS1307
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
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Schakelklok met DS1307
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
Uitzetten hoeft niet want dat was ie al.
cpp code
if (rtctijd > alarmstarttijd && rtctijd <= alarmstoptijd) {
digitalWrite(LED, HIGH);
}
Uitzetten hoeft niet want dat was ie al.
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Schakelklok met DS1307
Ff googelen op de rtc libray
Re: Schakelklok met DS1307
Ondertussen het programma kunnen aanpassen met jou regel maar heelaas hetzelfde fenomeen. lijkt precies toch niet zo simpel te zijn?
Re: Schakelklok met DS1307
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 ?
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 ?
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Schakelklok met DS1307
Laat die sketch maar zien wat je gedaan hebt.Dries schreef:Ondertussen het programma kunnen aanpassen met jou regel maar heelaas hetzelfde fenomeen. lijkt precies toch niet zo simpel te zijn?
Re: Schakelklok met DS1307
ik heb een tweede blauwe "debug" led toegevoegd:
cpp code
Deze sketch werkt nu en mijn led op pin 42 is nu aan, na een reset of voedingsonderbreking is deze led dus uit.
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.
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Schakelklok met DS1307
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
En dan in de setup() aan het einde (voor de sluit accolade)
cpp code
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
24 berichten
• Pagina 2 van 3 • 1, 2, 3
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 9 gasten