ik ben bezig met een projectje maar het wil maar niet lukken. ben zelf ook niet echt thuis in c+ al is code mij niet geheel onbekend c+ ook niet meer dankzij solo learn.
ik ben bezig met een arduino mega daaraan is een rtc 3231 gekoppeld en een i2c 2X16 display
de ingestelde tijd word weergegeven op de lcd display tot zover werkt het.
ik wil er in totaal 4 relais mee kunnen schakelen aan de hand van een x aantal uur.
de bijeen geschraapte code tot zover ( relays stuk werkt maar deels) als ik in de void setup de relais aanzet "RELAY_ON" gaat het ledje van dat aan
als ik time.h include en dit in de loop zet gaan de relais aan/uit maar stopt de tijd me lopen tot de loop reset als dit er niet inzit blijft de tijd gewoon lopen
//---( Turn all 4 relays ON in sequence)---
digitalWrite(Relay_1, RELAY_ON);// set the Relay ON
delay(1000); // wait for a second
digitalWrite(Relay_2, RELAY_ON);// set the Relay ON
delay(1000); // wait for a second
digitalWrite(Relay_3, RELAY_ON);// set the Relay ON
delay(1000); // wait for a second
digitalWrite(Relay_4, RELAY_ON);// set the Relay ON
delay(4000); // wait see all relays ON
//---( Turn all 4 relays OFF in sequence)---
digitalWrite(Relay_1, RELAY_OFF);// set the Relay OFF
delay(1000); // wait for a second
digitalWrite(Relay_2, RELAY_OFF);// set the Relay OFF
delay(1000); // wait for a second
digitalWrite(Relay_3, RELAY_OFF);// set the Relay OFF
delay(1000); // wait for a second
digitalWrite(Relay_4, RELAY_OFF);// set the Relay OFF
delay(4000); // wait see all relays OFF
// ds3231 met LCD-I2C
// ds3231 library:
// https://learn.adafruit.com/adafruit-ds3231-precision-rtc-breakout/wiring-and-test
// Date and time functions using a DS3231 RTC connected via I2C and Wire lib
// liquid cristal library:
// https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
//
#include <Wire.h>
#include "RTClib.h"
#include "DS3232RTC.h"
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // LCD adres is 0x27, 16 karakters, 2 regels
RTC_DS3231 rtc;
//relay functions
#define RELAY_ON 0
#define RELAY_OFF 1
//relay nr poort
#define Relay_1 30
#define Relay_2 31
#define Relay_3 32
#define Relay_4 33
int val;
char daysOfTheWeek[7][12] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
void setup () {
//relay
pinMode(Relay_1, OUTPUT); //relay1 30
pinMode(Relay_2, OUTPUT); //relay2 31
pinMode(Relay_3, OUTPUT); //relay3 32
pinMode(Relay_4, OUTPUT); //relay4 33
digitalWrite(Relay_1, RELAY_OFF);
digitalWrite(Relay_2, RELAY_OFF);
digitalWrite(Relay_3, RELAY_OFF);
digitalWrite(Relay_4, RELAY_OFF);
//rtc [
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");
/// lcd code [
lcd.init();
lcd.backlight();
lcd.setCursor(1, 0);
lcd.print("Donkere wolken");
lcd.setCursor(1, 1);
lcd.print("D3mons alpha");
delay(2000);
lcd.clear();
/// lcd code ]
pinMode (13, OUTPUT);
#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__))); rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop () {
DateTime now = rtc.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
/// lcd code[
lcd.setCursor(3, 0);
lcd.print(now.year(), DEC);
lcd.print('/');
lcd.print(now.month(), DEC);
lcd.print('/');
lcd.print(now.day(), DEC);
lcd.setCursor(0, 1);
lcd.print(" (");
lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
lcd.print(" ");
lcd.print(now.hour(), DEC);
lcd.print(':');
lcd.print(now.minute(), DEC);
lcd.print(':');
lcd.print(now.second(), DEC);
lcd.print(")");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
/// lcd code]
if (now.second() > 1 && now.second() < 30) { // led aan tussen 0 en 30 sec.
digitalWrite (13, HIGH);
}
else {
digitalWrite (13, LOW);
}
Serial.println();
delay(1000);
lcd.clear();
}
void AutomaticProgram()
{ //we are using hour as a value the rest is ignored.
DateTime now = rtc.now();
val = (now.hour(), DEC); //aan tussen 3 en 23
if ((3 == val))
{
digitalWrite(Relay_1, RELAY_ON);
}
else if ((23 == val))
{
digitalWrite(Relay_1, RELAY_OFF);
}
}