dc3132

algemene C code
Berichten: 19
Geregistreerd: 06 Sep 2017, 23:51

dc3132

Berichtdoor robmulder » 17 Mrt 2020, 00:39

beste allemaal

ik heb weer hulp nodig .

wat doe ik hier fout wil met een rtc tijd schakelen, maar relais schakelt niet


Code: Alles selecteren
#include <DS3231.h>

int Relay = 38;

DS3231  rtc(SDA, SCL);
Time t;

const int OnHour = 23;
const int OnMin = 23;
const int OffHour = 23;
const int OffMin = 24;

void setup() {
  Serial.begin(115200);
  rtc.begin();
  pinMode(Relay, OUTPUT);
  digitalWrite(Relay, LOW);
}

void loop() {
  t = rtc.getTime();
  Serial.print(t.hour);
  Serial.print(" hour(s), ");
  Serial.print(t.min);
  Serial.print(" minute(s)");
  Serial.println(" ");
  delay (1000);
 
  if(t.hour == OnHour && t.min == OnMin){
    digitalWrite(Relay,HIGH);
    Serial.println("LIGHT ON");
    }
   
    else if(t.hour == OffHour && t.min == OffMin){
      digitalWrite(Relay,LOW);
      Serial.println("LIGHT OFF");
    }
}

Advertisement

Berichten: 3065
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: dc3132

Berichtdoor shooter » 17 Mrt 2020, 11:07

je zegt dat het relais niet schakelt, krijg je wel een melding dat het zou moeten schakelen op de USB
en haal die else eruit die heeft geen zin.
paul deelen
shooter@home.nl

Berichten: 19
Geregistreerd: 06 Sep 2017, 23:51

Re: dc3132

Berichtdoor robmulder » 17 Mrt 2020, 17:46

hoi shooter ik heb het even anders gedaan .
het werk, maar moet nog wel die delays van het lcd scherm aanpassen in mills wanrt de boel wordt aardig vertraagt






cpp code
#include <DS3231.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
int Relay = 36;

DS3231 rtc(SDA, SCL);
Time t;

const int OnHour = 9;//SET RELAY ON TIMER
const int OnMin = 22;
const int OffHour = 10;//SET RELAY OFF TIMER
const int OffMin = 52;

void setup() {

rtc.begin();
pinMode(Relay, OUTPUT);
digitalWrite(Relay, LOW);
lcd.clear();
lcd.begin(16,2);
lcd.init();
lcd.backlight();

rtc.setDOW(TUESDAY); // Set Day-of-Week to SUNDAY
rtc.setTime(16, 42, 0); // Set the time to 12:00:00 (24hr format)
rtc.setDate(17, 3, 2020); // Set the date to January 1st, 2014


}

void loop() {
t = rtc.getTime();
{
lcd.print(rtc.getDOWStr());
lcd.setCursor(1,0);
lcd.print("");
delay (1000);
}

// Send date

{
lcd.print(rtc.getDateStr());
lcd.setCursor(1,1);
lcd.print(" ");
delay (1000);
}
// Send time

{
lcd.println(rtc.getTimeStr());
lcd.setCursor(1,0);
lcd.print(" ");
delay (1000);
}


if(t.hour == OnHour && t.min == OnMin){
digitalWrite(Relay,HIGH);
lcd.setCursor(1,0);
lcd.println(" MOTOR ON ");
delay (1000);
}

else if(t.hour == OffHour && t.min == OffMin){
digitalWrite(Relay,LOW);
lcd.setCursor(1,0);
lcd.println("MOTOR OFF");
delay (1000);
}
}

Berichten: 19
Geregistreerd: 06 Sep 2017, 23:51

Re: dc3132

Berichtdoor robmulder » 17 Mrt 2020, 20:44

nu heb ik de delay weg gehaald en mills toegevoegd , maar het loopt niet helemaal goed tijd in display gaat goed maar datum doet gek , wat doe ik in deze fout




Code: Alles selecteren
#include <DS3231.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

unsigned long previousMillis = 0;        // will store last time LED was updated
// constants won't change:
unsigned long interval = 1000;           // interval at which to blink (milliseconds)



LiquidCrystal_I2C lcd(0x3F,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
int Relay = 36;

DS3231  rtc(SDA, SCL);
Time t;

const int OnHour = 9;//SET RELAY ON TIMER
const int OnMin = 22;
const int OffHour = 10;//SET RELAY OFF TIMER
const int OffMin = 52;

void setup() {
 
  rtc.begin();
  pinMode(Relay, OUTPUT);
  digitalWrite(Relay, LOW);
  lcd.clear();
  lcd.begin(16,2);
  lcd.init();                     
  lcd.backlight();

  // rtc.setDOW(FRIDAY);     
 // rtc.setTime(9, 17, 0);    //SET TIME
 // rtc.setDate(17,03,2020);
 
 
}

void loop() {
  t = rtc.getTime();
  {
    lcd.print(rtc.getDOWStr());
   lcd.setCursor(1,0);
  lcd.print("");
   unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;
 
  }
 
  // Send date
 
  {
    lcd.print(rtc.getDateStr());
   lcd.setCursor(1,1);
  lcd.print(" ");
   unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;
 
}
// Send time

{
lcd.println(rtc.getTimeStr());
   lcd.setCursor(1,0);
  lcd.print(" ");
   unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;
 
}

 
  if(t.hour == OnHour && t.min == OnMin){
    digitalWrite(Relay,HIGH);
    lcd.setCursor(1,0);
    lcd.println(" MOTOR ON   ");
     unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;
   
    }
   
    else if(t.hour == OffHour && t.min == OffMin){
      digitalWrite(Relay,LOW);
      lcd.setCursor(1,0);
      lcd.println("MOTOR OFF");
       unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;
     
    }
}}}}}}

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

Re: dc3132

Berichtdoor Koepel » 17 Mrt 2020, 21:58

robmulder schreef:wat doe ik in deze fout

Vergeten op Ctrl+T te drukken.

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

Re: dc3132

Berichtdoor Koepel » 25 Mrt 2020, 12:23

Was ik te bot ? Ik heb je hopelijk toch niet afgeschrikt ?

Berichten: 3065
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: dc3132

Berichtdoor shooter » 26 Mrt 2020, 14:16

tja nu moet je dus wel in de gaten houden hoe dat werkt met millis()
als je dus 1 keer currentmillis er een keer inzet is prima, maar als je dan previous overal hetzelfde hebt dan gaat het fout, even zelf uitzoeken hoe je dat kunt oplossen met functies. dus als de tijd omis dan ga je even naar een subfunctie om de actie te doen.
dan krijg je een mooi korte loop.
paul deelen
shooter@home.nl

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast