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 

Arduino if pogoji and or

 
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
marko11
Član
Član



Pridružen-a: Ned 14 Dec 2003 17:47
Prispevkov: 866
Aktiv.: 3.88
Kraj: Dobrepolje

PrispevekObjavljeno: Tor Dec 26, 2023 12:41 pm    Naslov sporočila:  Arduino if pogoji and or Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Jaka57
Moderator
Moderator



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

PrispevekObjavljeno: Tor Dec 26, 2023 3:47 pm    Naslov sporočila:   Odgovori s citatom

Okroglih oklepajev imaš za prodat Very Happy .
Č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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
marko11
Član
Član



Pridružen-a: Ned 14 Dec 2003 17:47
Prispevkov: 866
Aktiv.: 3.88
Kraj: Dobrepolje

PrispevekObjavljeno: Tor Dec 26, 2023 6:11 pm    Naslov sporočila:   Odgovori s citatom

Jaka57 je napisal/a:
Okroglih oklepajev imaš za prodat Very Happy .
Č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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Obelix
Član
Član



Pridružen-a: Pon 19 Maj 2008 13:59
Prispevkov: 1862
Aktiv.: 9.59
Kraj: Maribor

PrispevekObjavljeno: Tor Dec 26, 2023 6:19 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Jaka57
Moderator
Moderator



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

PrispevekObjavljeno: Tor Dec 26, 2023 7:02 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
marko11
Član
Član



Pridružen-a: Ned 14 Dec 2003 17:47
Prispevkov: 866
Aktiv.: 3.88
Kraj: Dobrepolje

PrispevekObjavljeno: Tor Dec 26, 2023 7:16 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Jaka57
Moderator
Moderator



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

PrispevekObjavljeno: Tor Dec 26, 2023 8:17 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
marko11
Član
Član



Pridružen-a: Ned 14 Dec 2003 17:47
Prispevkov: 866
Aktiv.: 3.88
Kraj: Dobrepolje

PrispevekObjavljeno: Tor Dec 26, 2023 9:53 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
marko11
Član
Član



Pridružen-a: Ned 14 Dec 2003 17:47
Prispevkov: 866
Aktiv.: 3.88
Kraj: Dobrepolje

PrispevekObjavljeno: Sre Dec 27, 2023 2:02 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
bubm7
Član
Član



Pridružen-a: Pon 29 Okt 2012 18:10
Prispevkov: 14
Aktiv.: 0.10
Kraj: Ljubljana

PrispevekObjavljeno: Sre Jan 03, 2024 4:52 pm    Naslov sporočila:   Odgovori s citatom

marko11 je napisal/a:


Kaj delam narobe?

lp,


Ugibam, da == ne zna primerjati pointerja na char in stringa v narekovajih.

Namesto
Koda:
x == "abc"
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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
bostjang
Član
Član



Pridružen-a: Tor 03 Jan 2006 15:29
Prispevkov: 3175
Aktiv.: 14.23
Kraj: Postojna

PrispevekObjavljeno: Čet Jan 04, 2024 1:01 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
bubm7
Član
Član



Pridružen-a: Pon 29 Okt 2012 18:10
Prispevkov: 14
Aktiv.: 0.10
Kraj: Ljubljana

PrispevekObjavljeno: Čet Jan 04, 2024 2:31 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten 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: 80 dni


Powered by phpBB © 2001, 2005 phpBB Group