www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

RTC in event

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
Bizgec65
Član
Član



Pridružen-a: Sre 10 Mar 2010 11:46
Prispevkov: 2057
Aktiv.: 12.02
Kraj: Trebnje

PrispevekObjavljeno: Pet Jan 21, 2022 1:35 pm    Naslov sporočila:  RTC in event Odgovori s citatom

Želim, da mi arduino ob določeni uri, postavi izhod na HIGH, ki jo dobi z ukazom...

Koda:

DateTime now =rtc.now ();

      now.hour()   == URA_START_HH &&
      now.minute() == MINUTA_START_MM;
           
{
   digitalWrite (LED1, HIGH); 

}....


OK, deluje, kaj pa če hočem stanje postaviti na LOW po poteku določenega časa (2,3,4,5,6,7, minut), pa da ne pišem:
Koda:


}....else{

      now.hour()   >= URA_STOP_HH &&
      now.minute() >=  MINUTA_STOP_MM;
     
      digitalWrite (LED1, LOW);

_________________
Če bi nekateri padli z višine svojega ega na višino svoje inteligence, bi se ubili. (Je pa res, da se meni ne smilijo!) Smile
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Peter123
Član
Član



Pridružen-a: Tor 13 Jan 2009 15:34
Prispevkov: 1364
Aktiv.: 7.37
Kraj: Lj.

PrispevekObjavljeno: Pet Jan 21, 2022 6:52 pm    Naslov sporočila:   Odgovori s citatom

Sam sem zadevo reševal z računanjem.
Npr.:
if (set.ura >= ura && set.min >= min) set high
else set low.
Nekaj v tem smislu.

Oziroma nekaj se spomnim da sem odšteval in če je bil rezultat pozitiven je bilo eno stanje drugače drugo.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Bizgec65
Član
Član



Pridružen-a: Sre 10 Mar 2010 11:46
Prispevkov: 2057
Aktiv.: 12.02
Kraj: Trebnje

PrispevekObjavljeno: Pet Jan 21, 2022 8:38 pm    Naslov sporočila:   Odgovori s citatom

Ja to bi šlo, saj bi tudi v mojem primeru delalo, pač nekaj vrstic več.
Zatakne se ko je podatek drugačen:

Koda:
 if (RTC.get() >=sRise  "ali pa"  if (RTC.get() >=sSet


Podatke dobi s knjižnico sunMoon, kjer računa za vsak dan posebej, glede na latitudo in longitudo lokacije.

Very Happy

_________________
Če bi nekateri padli z višine svojega ega na višino svoje inteligence, bi se ubili. (Je pa res, da se meni ne smilijo!) Smile


Nazadnje urejal/a Bizgec65 Sob Jan 22, 2022 4:46 pm; skupaj popravljeno 1 krat
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
eddie
Član
Član



Pridružen-a: Sre 10 Dec 2003 21:02
Prispevkov: 706
Aktiv.: 3.18
Kraj: Severna primorska

PrispevekObjavljeno: Sob Jan 22, 2022 8:58 am    Naslov sporočila:   Odgovori s citatom

Samo kot ideja - čas v dnevu je enostavno primerjati, če se ga preračuna v minute oziroma sekunde dneva(odvisno od potrebne resolucije).

minute_dneva=ura*60+minute

Potem je logika lahko enostavna kot:
vklop=(minute_dneva==480)

spremenlljivka vklop bo tako imela vrednost True od 08:00 do 08:01

LP
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Bizgec65
Član
Član



Pridružen-a: Sre 10 Mar 2010 11:46
Prispevkov: 2057
Aktiv.: 12.02
Kraj: Trebnje

PrispevekObjavljeno: Sob Jan 22, 2022 9:18 pm    Naslov sporočila:   Odgovori s citatom

Tole mi recimo dela brez težav:
Koda:

int LED = 11;

unsigned long DELAY_TIME = 20000;
unsigned long delayStart = 0;
bool delayRunning = false;

void setup() {
  pinMode(LED, OUTPUT);   
  digitalWrite(LED LOW);

 
  delayStart = millis();
  delayRunning = true;
}

 void loop() {
 
 
  if (delayRunning && ((millis() - delayStart) <= DELAY_TIME)) {
    delayRunning = true;
   
    NEKI();
     
    digitalWrite(LED, LOW);
  }
  }

void NEKI(){
  digitalWrite(LED, HIGH);
  delay(500);
  digitalWrite(led, LOW);
  delay(250);
}


Ko pa hočem to implementirati s temle se pa zaštrika:
Koda:

...

void loop() {
if (delayRunning && ((millis() - delayStart) >= DELAY_TIME)&&
         
          now.hour()   == URA_START_HH &&
          now.minute() == MINUTA_START_MM ){
          delayRunning = true;           
         
          NEKI();
           
          digitalWrite(LED1,LOW);
      }

void NEKI(){
     
    digitalWrite(LED1, HIGH);
    delay(500);
    digitalWrite(LED1, LOW);
    delay(250);
}

_________________
Če bi nekateri padli z višine svojega ega na višino svoje inteligence, bi se ubili. (Je pa res, da se meni ne smilijo!) Smile
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
eddie
Član
Član



Pridružen-a: Sre 10 Dec 2003 21:02
Prispevkov: 706
Aktiv.: 3.18
Kraj: Severna primorska

PrispevekObjavljeno: Ned Jan 23, 2022 4:45 pm    Naslov sporočila:   Odgovori s citatom

Ne vem, če je vprašanje še vedno isto kot na začetku teme? Iz kode je težko razvidno kaj naj bi se zgodilo.
Ampak na tisto mojo vižo bi šlo nekako takole:

Koda:

int LED = 11;

unsigned long sekunde_dneva=0;
bool led_vklop;
unsigned long cas_vklopa = 8*3600;//npr 8:00 v sekundah od polnoči
unsigned long dolz_vklopa= 20;//cas vklopa v sekundah


void setup() {
  pinMode(LED, OUTPUT);   
  digitalWrite(LED LOW);

 
}

 void loop() {
     sekunde_dneva= now.hour() + now.minute()+ now.second();
 
     led_vklop=((sekunde_dneva>= cas_vklopa )&&
                  ((sekunde_dneva<=(cas_vklopa+dolz_vklopa));

     digitalWrite (LED1, led_vklop);
  }
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Jaka57
Moderator
Moderator



Pridružen-a: Ned 12 Dec 2004 21:47
Prispevkov: 5766
Aktiv.: 25.97
Kraj: Grosuplje

PrispevekObjavljeno: Ned Jan 23, 2022 6:41 pm    Naslov sporočila:   Odgovori s citatom

Bizgec65 je napisal/a:
....Ko pa hočem to implementirati s temle se pa zaštrika:
Koda:

...

void loop() {
if (delayRunning && ((millis() - delayStart) >= DELAY_TIME)&&
         
          now.hour()   == URA_START_HH &&
          now.minute() == MINUTA_START_MM ){
          delayRunning = true;           
         
          NEKI();
           
          digitalWrite(LED1,LOW);
      }
}                                                       //dodaj še tale zaviti oklepaj in bo mogoče
                                                         //speljalo!

void NEKI(){
     
    digitalWrite(LED1, HIGH);
    delay(500);
    digitalWrite(LED1, LOW);
    delay(250);
}


Seveda, saj manjka en zaviti oklepaj!

_________________
Lp, Jaka
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Bizgec65
Član
Član



Pridružen-a: Sre 10 Mar 2010 11:46
Prispevkov: 2057
Aktiv.: 12.02
Kraj: Trebnje

PrispevekObjavljeno: Ned Jan 23, 2022 8:20 pm    Naslov sporočila:   Odgovori s citatom

eddie je napisal/a:
Ne vem, če je vprašanje še vedno isto kot na začetku teme? Iz kode je težko razvidno kaj naj bi se zgodilo.
Ampak na tisto mojo vižo bi šlo nekako takole:

Koda:

...krajšam prispevek...


Ekola, sedaj je "kompletna" koda, naj vas ne motijo lcdSetCursor-ji, ker imam pač trenutno 40x2 LCD in mi je važen samo prikaz datuma, časa, sSet ter sRise. Za boljšo preglednost (vsaj upam), so med //////////// moji dodatki in v "void loop" želje.
Koda:

#include <Time.h>
#include <TimeLib.h>
#include <DS3232RTC.h>
#include <sunMoon.h>

#define OUR_latitude    46.0569465               
#define OUR_longtitude  14.50575149
#define OUR_timezone    60                     

sunMoon  [slovenščina je zame španska vas];
//////////////////////////////////////////////////
int LED1 = 11
int LED2=12
//////////////////////////////////////////////////
unsigned long DELAY_TIME = 20000;
unsigned long delayStart = 0;
bool delayRunning = false;

uint8_t URA_START_HH      = 18;
uint8_t MINUTA_START_MM   = 54;
//////////////////////////////////////////////////

void printDate(time_t date) {
  char buff[20];
  sprintf(buff, "%2d-%02d-%4d %02d:%02d:%02d",
  day(date), month(date), year(date), hour(date), minute(date), second(date));
  Serial.print(buff);
}

void setup() {

//////////////////////////////////////////////////
    pinMode(LED1, OUTPUT);   
    digitalWrite(LED1, LOW);
    pinMode(LED2, OUTPUT);   
    digitalWrite(LED2, LOW);


    delayStart = millis();
    delayRunning = true;
//////////////////////////////////////////////////
  lcd.begin(40, 2);
  tmElements_t  tm;                             // specific time

  tm.Second = 0;
  tm.Minute = 12;
  tm.Hour   = 12;
  tm.Day    = 3;
  tm.Month  = 8;
  tm.Year   = 2016 - 1970;
  time_t s_date = makeTime(tm);
 
 
  Serial.begin(9600);
  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");
  [slovenščina je zame španska vas].init(OUR_timezone, OUR_latitude, OUR_longtitude);

  Serial.print("Today is ");
  printDate(RTC.get()); Serial.println("");
 
  uint32_t jDay = [slovenščina je zame španska vas].julianDay();               // Optional call
  byte mDay = [slovenščina je zame španska vas].moonDay();
  time_t sRise = [slovenščina je zame španska vas].sunRise();
  time_t sSet  = [slovenščina je zame španska vas].sunSet();
  Serial.print("Today is "); Serial.print(jDay); Serial.println(" Julian day");
  Serial.print("Moon age is "); Serial.print(mDay); Serial.println("day(s)");
  Serial.print("Today sunrise and sunset: ");
  printDate(sRise); Serial.print("; ");
  printDate(sSet);  Serial.println("");


  Serial.print("Specific date was ");
  printDate(s_date); Serial.println("");
  jDay = [slovenščina je zame španska vas].julianDay(s_date);
  mDay = [slovenščina je zame španska vas].moonDay(s_date);
  sRise = [slovenščina je zame španska vas].sunRise(s_date);
  sSet  = [slovenščina je zame španska vas].sunSet(s_date);
  Serial.print("Specific date sunrise and sunset was: ");
  Serial.print("Julian day of specific date was "); Serial.println(jDay);
  Serial.print("Moon age was "); Serial.print(mDay); Serial.println("day(s)");
  printDate(sRise); Serial.print("; ");
  printDate(sSet);  Serial.println("");

}

void loop() {

time_t sRise = [slovenščina je zame španska vas].sunRise();
  time_t sSet  = [slovenščina je zame španska vas].sunSet();
  time_t sunRise(time_t date = 0);
  time_t sunSet(time_t date = 0);
 
 
  printDate(RTC.get()); Serial.print("\t");
  Time(sRise); Serial.print("\t ");
  Time(sSet);  Serial.println("");

  if (RTC.get() >= sRise && RTC.get() <= sSet )
  {
    Serial.println("Day");
    lcd.setCursor(25, 1);
    lcd.print("Day");
  }
  else if (RTC.get() >= sSet && RTC.get() <= sRise )
  {
    Serial.print("Night ");
    lcd.setCursor(25, 1);
    lcd.print("Night");
  }
  else

    lcd.setCursor(0, 0);
  printLcdDate1(RTC.get());
  lcd.setCursor(12, 0);
  printLcdDate(RTC.get());
  lcd.setCursor(0, 3);
  printLcdDate(sRise);
  lcd.setCursor(12, 3);
  printLcdDate(sSet);

//////////////////////////////////////////////////

Vsak dan ob 05:33  mi za natanko 2 minuti izvedi spodnji "void - NEKI"
Takisto mi vsak dan ob sončnem vzhodu IN zahodu izvedi  spodnji "void - NEKI"

//////////////////////////////////////////////////
}
void NEKI() {
  digitalWrite (LED1,HIGH);   ///tudi tule bi verjetno namesto "dilejev" lahko uporabil kaj pametnejšega :)
  delay(500);                 
  digitalWrite (LED1,LOW);    ///tudi tule bi verjetno namesto "dilejev" lahko uporabil kaj pametnejšega :)
  delay(250);                 
}



HAHA, še dobro da sem dal predogled prispevka. Namesto "španskih vasi" V KODI!?!??
pride s in m pisano skupaj, brez narekovajev!

_________________
Če bi nekateri padli z višine svojega ega na višino svoje inteligence, bi se ubili. (Je pa res, da se meni ne smilijo!) Smile
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Bizgec65
Član
Član



Pridružen-a: Sre 10 Mar 2010 11:46
Prispevkov: 2057
Aktiv.: 12.02
Kraj: Trebnje

PrispevekObjavljeno: Ned Jan 23, 2022 8:27 pm    Naslov sporočila:   Odgovori s citatom

Jaka57, ja sej dela ta del, sem prehitro kopiral del po del kode. Ampak sem delal napake v 3. in 5. vrstici

Koda:


void loop (){
DateTime now = rtc.now();
          if (delayRunning && ((millis() - delayStart) <= DELAY_TIME)&&
          now.hour()   == URA_START_HH &&
          now.minute() >= MINUTA_START_MM) {
          delayRunning = true; 
         
          NEKI ();

          digitalWrite(LED1,LOW);
      }
      }
     

void NEKI (){
     
    digitalWrite(LED1, HIGH);
    delay(500);
    digitalWrite(LED1, LOW);
    delay(250);
}

_________________
Če bi nekateri padli z višine svojega ega na višino svoje inteligence, bi se ubili. (Je pa res, da se meni ne smilijo!) Smile
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Jaka57
Moderator
Moderator



Pridružen-a: Ned 12 Dec 2004 21:47
Prispevkov: 5766
Aktiv.: 25.97
Kraj: Grosuplje

PrispevekObjavljeno: Ned Jan 23, 2022 9:01 pm    Naslov sporočila:   Odgovori s citatom

Bizgec65 je napisal/a:
Jaka57, ja sej dela ta del, sem prehitro kopiral del po del kode. Ampak sem delal napake v 3. in 5. vrstici.......
Kdo bi vedel, kaj kvačkaš, saj 3. in 5. vrstice ni bilo nikjer.
Mogoče bi bilo lažje, če bi napisal, kaj kvačkaš, sploh Razz , tako pa ne vem, če je kdo vedel, za kaj gre!

_________________
Lp, Jaka
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 48 dni


Powered by phpBB © 2001, 2005 phpBB Group