60 nap alatt Arduino #16 - LCD-ből óra
-
- Újonc
- Hozzászólások: 9
- Csatlakozott: 2018. június 13. szerda, 11:44
Re: 60 nap alatt Arduino #16 - LCD-ből óra
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???
Re: 60 nap alatt Arduino #16 - LCD-ből óra
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."
"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."
-
- Újonc
- Hozzászólások: 9
- Csatlakozott: 2018. június 13. szerda, 11:44
Re: 60 nap alatt Arduino #16 - LCD-ből óra
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
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
Re: 60 nap alatt Arduino #16 - LCD-ből óra
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.
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.
-
- Újonc
- Hozzászólások: 9
- Csatlakozott: 2018. június 13. szerda, 11:44
Re: 60 nap alatt Arduino #16 - LCD-ből óra
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
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

- 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
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.
Ha több utasítást alkalmazol a feltétel vizsgálatban?
Akko csoportba kel zárni őket:
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
Re: 60 nap alatt Arduino #16 - LCD-ből óra
Hülyeséget írtam nem tudom törölni.
-
- Újonc
- Hozzászólások: 9
- Csatlakozott: 2018. június 13. szerda, 11:44
Re: 60 nap alatt Arduino #16 - LCD-ből óra
Isteni , jó, hogy egy csomó dologra segítőkész válaszokat kaphatok. Köszönöm szépen.
Re: 60 nap alatt Arduino #16 - LCD-ből óra
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
}
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: nincs regisztrált felhasználó valamint 1 vendég