|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Bizgec65 Član
Pridružen-a: Sre 10 Mar 2010 11:46 Prispevkov: 2057 Aktiv.: 11.97 Kraj: Trebnje
|
Objavljeno: Pet Jan 21, 2022 1:35 pm Naslov sporočila: RTC in event |
|
|
Ž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!) |
|
Nazaj na vrh |
|
|
Peter123 Član
Pridružen-a: Tor 13 Jan 2009 15:34 Prispevkov: 1366 Aktiv.: 7.35 Kraj: Lj.
|
Objavljeno: Pet Jan 21, 2022 6:52 pm Naslov sporočila: |
|
|
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 |
|
|
Bizgec65 Član
Pridružen-a: Sre 10 Mar 2010 11:46 Prispevkov: 2057 Aktiv.: 11.97 Kraj: Trebnje
|
Objavljeno: Pet Jan 21, 2022 8:38 pm Naslov sporočila: |
|
|
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.
_________________ Č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!)
Nazadnje urejal/a Bizgec65 Sob Jan 22, 2022 4:46 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
|
eddie Član
Pridružen-a: Sre 10 Dec 2003 21:02 Prispevkov: 706 Aktiv.: 3.17 Kraj: Severna primorska
|
Objavljeno: Sob Jan 22, 2022 8:58 am Naslov sporočila: |
|
|
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 |
|
|
Bizgec65 Član
Pridružen-a: Sre 10 Mar 2010 11:46 Prispevkov: 2057 Aktiv.: 11.97 Kraj: Trebnje
|
Objavljeno: Sob Jan 22, 2022 9:18 pm Naslov sporočila: |
|
|
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!) |
|
Nazaj na vrh |
|
|
eddie Član
Pridružen-a: Sre 10 Dec 2003 21:02 Prispevkov: 706 Aktiv.: 3.17 Kraj: Severna primorska
|
Objavljeno: Ned Jan 23, 2022 4:45 pm Naslov sporočila: |
|
|
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 |
|
|
Jaka57 Moderator
Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5773 Aktiv.: 25.91 Kraj: Grosuplje
|
Objavljeno: Ned Jan 23, 2022 6:41 pm Naslov sporočila: |
|
|
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 |
|
|
Bizgec65 Član
Pridružen-a: Sre 10 Mar 2010 11:46 Prispevkov: 2057 Aktiv.: 11.97 Kraj: Trebnje
|
Objavljeno: Ned Jan 23, 2022 8:20 pm Naslov sporočila: |
|
|
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!) |
|
Nazaj na vrh |
|
|
Bizgec65 Član
Pridružen-a: Sre 10 Mar 2010 11:46 Prispevkov: 2057 Aktiv.: 11.97 Kraj: Trebnje
|
Objavljeno: Ned Jan 23, 2022 8:27 pm Naslov sporočila: |
|
|
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!) |
|
Nazaj na vrh |
|
|
Jaka57 Moderator
Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5773 Aktiv.: 25.91 Kraj: Grosuplje
|
Objavljeno: Ned Jan 23, 2022 9:01 pm Naslov sporočila: |
|
|
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 , tako pa ne vem, če je kdo vedel, za kaj gre! _________________ Lp, Jaka |
|
Nazaj na vrh |
|
|
|
|
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: 69 dni
Powered by phpBB © 2001, 2005 phpBB Group
|