60 nap alatt Arduino #16 - LCD-ből óra

A "60 nap alatt Arduino" tanfolyam házi feladatai és közvetlen témái
zoldfulurozi
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2018. június 13. szerda, 11:44

Re: 60 nap alatt Arduino #16 - LCD-ből óra

HozzászólásSzerző: zoldfulurozi » 2018. július 21. szombat, 11:02

Köszönöm, akkor ha az if után nincs kapcsos zárójel , akkor úgy működik, hogy ha logikai vizsgálat igaznak bizonyúl akkor végrehajtja a parancsot, ha pedig nem igaz, akkor egyszerűen megy tovább???

atilla
Biztosítékgyilkos
Hozzászólások: 56
Csatlakozott: 2016. május 10. kedd, 18:35

Re: 60 nap alatt Arduino #16 - LCD-ből óra

HozzászólásSzerző: atilla » 2018. július 21. szombat, 11:44

Idézet:
"Az If utasítás segítségével ellenőrizhetünk 1-1 feltételt, azaz hogy a feltétel teljesül-e;
például egy analóg bemenőjel értéke meghalad-e egy szintet. Ha a feltétel teljesül,
akkor a feltételt követő kapcsos-zárójelben levő utasítások végrehajtódnak; ha pedig
nem, akkor kihagyásra kerülnek."

zoldfulurozi
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2018. június 13. szerda, 11:44

Re: 60 nap alatt Arduino #16 - LCD-ből óra

HozzászólásSzerző: zoldfulurozi » 2018. július 21. szombat, 13:43

Nagyon köszönöm a választ , el voltam tévedve, azt gondoltam addig vár, amíg nem teljesül a feltétel.
Nagyon köszönöm a segítséget, a fórum és a levelek is nagyon sokat segítenek.
Észre vettem egy számomra érdekes dolgot. A Time library letöltése után a példa progit futtatva siet a lapom. 1000 mili-ként 0,932 milit. ( A referencia telefonhoz képest, ami a mobil szolgáltatótól pontosit). Ugyanezt a programot egy Mblock ME Aurigán ( Arduino mega 2560 ) futtatva durván 11 óra alatt késik 7 másodpercet.… Azt gondoltam, hogy egy ennyire ismert , használt lib csak is jól, pontosan működhet. Úgy tűnik a másolat, clone –lapokon mégsem olyan pontos.
Elsőre azt gondoltam volna, hogy az UNO-n csak is késhet, ha még egy LCD-t is hozzá illesztek, de nem siet..
Próbálkozom , hátha sikerül a Time. cpp file-ban elcsalnom egy kis időt.
time_t now() {
// calculate number of seconds passed since last call to now()
while (millis() - prevMillis >= 1000) {
// millis() and prevMillis are both unsigned ints thus the subtraction will always be the absolute value of the difference
sysTime++;
prevMillis += 1000;// itt próbálom állítani, hátha.
#ifdef TIME_DRIFT_INFO
sysUnsyncedTime++; // this can be compared to the synced time to measure long term drift
#endif

atilla
Biztosítékgyilkos
Hozzászólások: 56
Csatlakozott: 2016. május 10. kedd, 18:35

Re: 60 nap alatt Arduino #16 - LCD-ből óra

HozzászólásSzerző: atilla » 2018. július 21. szombat, 16:21

Millis használatával nem lesz pontos az órád. A 0-ás timer 64-es előosztón megy ilyenkor. Az 250000, ha jól jár a 16 MHz-es rezonátorod.
A 250000-et a timer 256-tal osztja. Ez 976,5625 Hz, és nem 1000. Tehát ennyi pontatlanság van benne. Ezt a blink villogónál nem veszed észre, de egy óránál igen.
Állítsad be a 16 bites timert 1 Hz-re, és azzal időzítsél.

zoldfulurozi
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2018. június 13. szerda, 11:44

Re: 60 nap alatt Arduino #16 - LCD-ből óra

HozzászólásSzerző: zoldfulurozi » 2018. július 21. szombat, 16:34

Köszönöm a válaszod, arra rájöttem közben, hogy nem érdemes bele nyúlni a file-ba, mert különben folyton összeomlik.
Amit leírtál sajnos egyelőre nekem nagyon magas, de köszönöm. Azt hiszem ez olyan izgalmas téma, amire időről időre vissza fogok térni :-)

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3249
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: 60 nap alatt Arduino #16 - LCD-ből óra

HozzászólásSzerző: kapu48 » 2018. július 22. vasárnap, 12:00

if...else:
https://www.arduino.cc/reference/en/language/structure/control-structure/if/

Ha nem használsz kapcsos zárójeleket, akkor csak a következő 1 utasításra vonatkozik a feltételes végrehajtás.

Kód: Egész kijelölése

Mind a 3 formátumnak egyforma az eredménye.
if (x > 120) digitalWrite(LEDpin, HIGH);

if (x > 120)
digitalWrite(LEDpin, HIGH);

if (x > 120){ digitalWrite(LEDpin, HIGH); }


Ha több utasítást alkalmazol a feltétel vizsgálatban?
Akko csoportba kel zárni őket:

Kód: Egész kijelölése

if (x > 120){
  digitalWrite(LEDpin1, HIGH);
  digitalWrite(LEDpin2, HIGH);
}                                 // all are correct


Avatar
csegebiga
Chipgyilok
Hozzászólások: 284
Csatlakozott: 2015. március 27. péntek, 21:27

Re: 60 nap alatt Arduino #16 - LCD-ből óra

HozzászólásSzerző: csegebiga » 2018. július 23. hétfő, 6:49

Hülyeséget írtam nem tudom törölni.

zoldfulurozi
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2018. június 13. szerda, 11:44

Re: 60 nap alatt Arduino #16 - LCD-ből óra

HozzászólásSzerző: zoldfulurozi » 2018. július 24. kedd, 18:47

Isteni , jó, hogy egy csomó dologra segítőkész válaszokat kaphatok. Köszönöm szépen.

sanca21
Újonc
Újonc
Hozzászólások: 3
Csatlakozott: 2019. január 6. vasárnap, 22:09

Re: 60 nap alatt Arduino #16 - LCD-ből óra

HozzászólásSzerző: sanca21 » 2019. január 25. péntek, 10:47

Sziasztok!
Elkészült az LCD órám. Jól működik, de másra nem használható.

// LCD óra. HF-3


#include <EEPROM.h>
#include <LiquidCrystal.h>


byte masodperc = 0; // Másodperc tároló.
byte perc = 0; // Perc tároló.
byte ora = 12; // Óra tároló.
byte bekapcsolasH;
byte bekapcsolasL;
word bekapcsolas; // belső változók

LiquidCrystal lcd (2, 3, 4, 5, 6, 7); // (RS, E, D4, D5, D6, D7)

void setup() {
Serial.begin(9600); // soros port: 9600 bps
lcd.begin(16, 2);
pinMode(13, OUTPUT); // D13: LED
digitalWrite(13, LOW); // D13 kikapcsolva
bekapcsolasH = EEPROM.read(2); // magas helyiértek
bekapcsolasL = EEPROM.read(1); // alacsony helyiértek
if (bekapcsolasH == 0xFF && bekapcsolasL == 0xFF) {
bekapcsolasH = 0; // figyeljük, hogy az EEPROM üres?
bekapcsolasL = 0;
}
bekapcsolas = word(bekapcsolasH,bekapcsolasL); // worddé alakitás
bekapcsolas = bekapcsolas + 1; // a számlálás es visszaíras
Serial.print(bekapcsolas); // kiíras
Serial.println(". bekapcsolás");
bekapcsolasH = bekapcsolas/256;
bekapcsolasL = bekapcsolas % 256;
EEPROM.write (1, bekapcsolasL);
EEPROM.write (2, bekapcsolasH);

lcd.setCursor (3,0); // Kurzor a megfelelő helyre.
lcd.print("Pontos ido"); // "Pontos ido" nyomtatása az 1. sorba.
lcd.setCursor (4,1); // Kurzor a megfelelő helyre.
lcd.print("12:00:00"); // Az óra 12:00:00-ról indul.
}
void loop() {

for (masodperc = 0; masodperc<60; masodperc++) {
lcd.setCursor (10,1); // 60 másodperces for ciklus
if (masodperc<10) { // 60 másodperces for ciklus
lcd.print("0"); // 60 másodperces for ciklus
} // 60 másodperces for ciklus
lcd.print(masodperc, DEC); // másodperc nyomtatás.
// 60 másodperces for ciklus
delay(400); // Késleltetés
digitalWrite(13, HIGH); // D13 bekapcsolva
delay(300); // Késleltetés
digitalWrite(13, LOW); // D13 kikapcsolva
}

perc = perc + 1; // Perc növelés.
lcd.setCursor (7,1); // Kurzor a megfelelő helyre.
if (perc >= 60) { // Perc figyelés, ha elérte a
perc = 0; // 60-at, akkor nullázzuk, és
ora++; // növeljük az óra regisztert is.
}
if (perc<10) { // Tíznél kissebb számoknál 0-át
lcd.print("0"); // írunk a tizes helyértékre
}

lcd.print(perc, DEC); // Perc nyomtatás.

lcd.setCursor (4,1); // Óra regiszter figyelése
if (ora >= 24) { // Ha elérte a 24-et, nullázzuk
ora = 0;
}
if (ora<10) { // Tíznél kissebb számoknál térközt
lcd.print(" "); // írunk
}
lcd.print(ora, DEC); // Óra nyomtatása

}


Vissza: “60 nap alatt Arduino - Házi feladatok”

Ki van itt

Jelenlévő fórumozók: KZN valamint 1 vendég