|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
marko11 Član
Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 876 Aktiv.: 3.82 Kraj: Dobrepolje
|
Objavljeno: Tor Dec 26, 2023 12:41 pm Naslov sporočila: Arduino if pogoji and or |
|
|
Hi
Nikakor mi ne uspe združiti or in and povpraševanja.
Če v if stavku uporabljam samo OR se koda izvede, ko pa dodam še AND povpraševanje pa se koda sploh ne izvede.
Kaj delam narobe? mogoče so napačno postavljeni oklepaji (oklepaji so mi večni problem) ali kaj drugega.
lp,
Koda: |
DateTime now = rtc.now();
if (((now.month()== 1 )) || ((now.month() == 2)) || ((now.month() == 11)) || ((now.month() == 12)) && (daysOfTheWeek[now.dayOfTheWeek()] == "Poned")) {
Serial.println ("Višja sezona: ");
}
|
|
|
Nazaj na vrh |
|
|
Jaka57 Moderator
Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5794 Aktiv.: 25.27 Kraj: Grosuplje
|
Objavljeno: Tor Dec 26, 2023 3:47 pm Naslov sporočila: |
|
|
Okroglih oklepajev imaš za prodat .
Če prav razumem se mora izpisat "Višja sezona", če je mesec Januar ali Februar ali November ali December in Ponedeljek.
Katerikoli drug dan v tednu se "Višja sezona" ne bo izpisala, a ne?
Spodaj je to to:
Koda: |
DateTime now = rtc.now();
if (((now.month()== 1 ) || (now.month() == 2) || (now.month() == 11) || (now.month() == 12)) && (daysOfTheWeek[now.dayOfTheWeek()] == "Poned")) {
Serial.println ("Višja sezona: ");
} |
_________________ Lp, Jaka |
|
Nazaj na vrh |
|
|
marko11 Član
Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 876 Aktiv.: 3.82 Kraj: Dobrepolje
|
Objavljeno: Tor Dec 26, 2023 6:11 pm Naslov sporočila: |
|
|
Jaka57 je napisal/a: |
Okroglih oklepajev imaš za prodat .
Če prav razumem se mora izpisat "Višja sezona", če je mesec Januar ali Februar ali November ali December in Ponedeljek.
Katerikoli drug dan v tednu se "Višja sezona" ne bo izpisala, a ne?
Spodaj je to to:
Koda: |
DateTime now = rtc.now();
if (((now.month()== 1 ) || (now.month() == 2) || (now.month() == 11) || (now.month() == 12)) && (daysOfTheWeek[now.dayOfTheWeek()] == "Poned")) {
Serial.println ("Višja sezona: ");
} |
|
Sosed zdravo (občine)
Pogoji so taki kot si opisal zgoraj.
Napisal sem tvojo varianto, pa NE deluje.
Koda: |
if (((now.month()== 1 ) || (now.month() == 2) || (now.month() == 11) || (now.month() == 12)) && (daysOfTheWeek[now.dayOfTheWeek()] == "Tor")) { // NE dala
|
Če pa NE napišem pogoja za AND, pa deluje.
Koda: |
if ((now.month()== 1 ) || (now.month() == 2) || (now.month() == 11) || (now.month() == 12)) { // to DELUJE
Serial.println ("Višja sez ona: ");
|
Nikakor mi ni jasno kje je "haklc".
Imel sem Nano plato, pa sem jo zamenjal z UNO, pa je ista zadeva.
Lp,Marko |
|
Nazaj na vrh |
|
|
Obelix Član
Pridružen-a: Pon 19 Maj 2008 13:59 Prispevkov: 1869 Aktiv.: 9.33 Kraj: Maribor
|
Objavljeno: Tor Dec 26, 2023 6:19 pm Naslov sporočila: |
|
|
Mogoče je stavek predolg. Razdeli na krajše. Če je pogoj z ALI izpolnjen postavi nek "flag" in potem tistega ANDaj s tem kar pač želiš. |
|
Nazaj na vrh |
|
|
Jaka57 Moderator
Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5794 Aktiv.: 25.27 Kraj: Grosuplje
|
Objavljeno: Tor Dec 26, 2023 7:02 pm Naslov sporočila: |
|
|
Kaj pa, če napišeš:
Koda: |
DateTime now = rtc.now();
bool mesec = (now.month()== 1 ) || (now.month() == 2) || (now.month() == 11) || (now.month() == 12);
if mesec && (daysOfTheWeek[now.dayOfTheWeek()] == "Poned")) {
Serial.println ("Višja sezona: ");
} |
Oz. kaj ti vrne:
Koda: |
daysOfTheWeek[now.dayOfTheWeek()] |
Katero knjižnjico uporabljaš?
Ali knjižnjica uporablja slovenščino? _________________ Lp, Jaka |
|
Nazaj na vrh |
|
|
marko11 Član
Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 876 Aktiv.: 3.82 Kraj: Dobrepolje
|
Objavljeno: Tor Dec 26, 2023 7:16 pm Naslov sporočila: |
|
|
Hi
Sem rešil zadevo, na napačno mesto sem vpisoval ime dneva, vpisati ga moraš v oglati oklepaj.
Pravilen zapis je :
Koda: |
(daysOfTheWeek[now.dayOfTheWeek()== "Tor"])
|
NISEM rešil, sem mislil da deluje pa ni nič od tega. Mogoče pa je kaj v knjižnici?
Koda: |
#include "RTClib.h"
RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = {"Ned", "Pon", "Tor", "Sre", "Cet", "Pet", "Sob"};
char monthsOfTheYear[12][10] = {"Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"};
void Loop(){
DateTime now = rtc.now();
Serial.print(now.day(), DEC);
Serial.print('-');
Serial.print(now.month(), DEC);
Serial.print('-');
Serial.print(now.year(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]); // izpiše ime dneva
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.print("Month ");
Serial.print(now.month());
Serial.print(" is ");
Serial.println(monthsOfTheYear[now.month()-1]);
Serial.println();
}
|
To vse dela Ok, ko pa hočem z if stavkom povprašati za ime dveva pa ne deluje.
V čem je fora?
lp,
Nazadnje urejal/a marko11 Tor Dec 26, 2023 9:39 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
|
Jaka57 Moderator
Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5794 Aktiv.: 25.27 Kraj: Grosuplje
|
Objavljeno: Tor Dec 26, 2023 8:17 pm Naslov sporočila: |
|
|
Saj lahko pišeš v naslednjo vrstico, probaj, če tvoja koda dela:
Koda: |
DateTime now = rtc.now();
if (((now.month()== 1 )) || ((now.month() == 2)) || ((now.month() == 11)) ||
((now.month() == 12)) && (daysOfTheWeek[now.dayOfTheWeek() == "Poned"]))
{
Serial.println ("Višja sezona: ");
} |
_________________ Lp, Jaka |
|
Nazaj na vrh |
|
|
marko11 Član
Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 876 Aktiv.: 3.82 Kraj: Dobrepolje
|
Objavljeno: Tor Dec 26, 2023 9:53 pm Naslov sporočila: |
|
|
NISEM rešil, sem mislil da deluje pa ni nič od tega. Mogoče pa je kaj v knjižnici?
lp,
Koda: |
#include "RTClib.h"
RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = {"Ned", "Pon", "Tor", "Sre", "Cet", "Pet", "Sob"};
char monthsOfTheYear[12][10] = {"Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"};
void Loop(){
DateTime now = rtc.now();
Serial.print(now.day(), DEC);
Serial.print('-');
Serial.print(now.month(), DEC);
Serial.print('-');
Serial.print(now.year(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]); // izpiše ime dneva
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.print("Month ");
Serial.print(now.month());
Serial.print(" is ");
Serial.println(monthsOfTheYear[now.month()-1]);
Serial.println();
}
|
Ta koda zgoraj deluje.
Ko pa hočem z IF povprašati po imenu dneva pa ne deluje.
Kaj delam narobe?
lp, |
|
Nazaj na vrh |
|
|
marko11 Član
Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 876 Aktiv.: 3.82 Kraj: Dobrepolje
|
Objavljeno: Sre Dec 27, 2023 2:02 pm Naslov sporočila: |
|
|
Hi
Sedaj pa DELA tako kot mora. Priložena popravljena koda.
Koda: |
DateTime now = rtc.now();
int Stev_dneva = now.dayOfTheWeek(); //This returns 0 for Nedelja, 1 for Ponedeljek...
if (((now.month()== 1 ) || (now.month() == 2) || (now.month() == 11) || (now.month() == 12)) &&
(Stev_dneva == 0 || Stev_dneva == 6)) {
Serial.println ("Dela prost dan");
}
|
Lp, |
|
Nazaj na vrh |
|
|
bubm7 Član
Pridružen-a: Pon 29 Okt 2012 18:10 Prispevkov: 21 Aktiv.: 0.14 Kraj: Ljubljana
|
Objavljeno: Sre Jan 03, 2024 4:52 pm Naslov sporočila: |
|
|
marko11 je napisal/a: |
Kaj delam narobe?
lp, |
Ugibam, da == ne zna primerjati pointerja na char in stringa v narekovajih.
Namesto
poskusi z
Koda: |
strcmp(x, "Pon") == 0 |
torej v tvojem primeru
Koda: |
.. || (strcmp(daysOfTheWeek[now.dayOfTheWeek()], "Pon") == 0) || .. |
ali pa delaj s String klaso namesto pointerji na char array. |
|
Nazaj na vrh |
|
|
bostjang Član
Pridružen-a: Tor 03 Jan 2006 15:29 Prispevkov: 3318 Aktiv.: 14.48 Kraj: Postojna
|
Objavljeno: Čet Jan 04, 2024 1:01 pm Naslov sporočila: |
|
|
bubm7 je napisal/a: |
Ugibam, da == ne zna primerjati pointerja na char in stringa v narekovajih. |
Primerja čisto lepo. Težava je v tem, da je en niz (string) shranjen na enem naslovu, drug pa na drugem. V C-ju ime niza pomeni njegov naslov, ne pa vsebino kot v skriptnih jezikih (npr. JavaScript). Za primerjanje vsebine nizov so na voljo funkcije (string.h). |
|
Nazaj na vrh |
|
|
bubm7 Član
Pridružen-a: Pon 29 Okt 2012 18:10 Prispevkov: 21 Aktiv.: 0.14 Kraj: Ljubljana
|
Objavljeno: Čet Jan 04, 2024 2:31 pm Naslov sporočila: |
|
|
bostjang je napisal/a: |
bubm7 je napisal/a: |
Ugibam, da == ne zna primerjati pointerja na char in stringa v narekovajih. |
Primerja čisto lepo. Težava je v tem, da je en niz (string) shranjen na enem naslovu, drug pa na drugem. V C-ju ime niza pomeni njegov naslov, ne pa vsebino kot v skriptnih jezikih (npr. JavaScript). Za primerjanje vsebine nizov so na voljo funkcije (string.h). |
Ja. Ne primerja vsebine, to pa je tisto, kar je avtor želel in kjer mu ni delalo.
Tudi v Arduino okolju (C++) operator == čisto lepo primerja po vsebini, če uporabiš objekte tipa String. |
|
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: 265 dni
Powered by phpBB © 2001, 2005 phpBB Group
|