#17 házi feladat megoldása

A "60 nap alatt Arduino" tanfolyam házi feladatai és közvetlen témái
Válasz küldése
pappelektronika
Újonc
Újonc
Hozzászólások: 6
Csatlakozott: 2019. december 8. vasárnap, 17:39

#17 házi feladat megoldása

Hozzászólás Szerző: pappelektronika »

#include"LiquidCrystal.h" //LCD könyvtár betöltése
LiquidCrystal lcd(4,5,6,7,8,9); // LCD bekötése
int mp=-1;
int perc=0;
int ora=12; // idő változók deklarálása
byte bekapcsolasH;
byte bekapcsolasL;
word bekapcsolas=1; // belső változók
#include"EEPROM.h" // EEPROM könyyvtár betöltése
void timeprint(){ //idő kiírás blokk
lcd.setCursor(0,1) ;
lcd.print(ora);
lcd.print("o ");
lcd.print(perc);
lcd.print("p ");
lcd.print(mp);
lcd.print(" mp");
}
void setup() {
lcd.begin(16,2); //LCD típus beállítása
bekapcsolasH=EEPROM.read(2); //magas helyiérték olvasása EEPROM-ból
bekapcsolasL=EEPROM.read(1); //alacsony helyiérték olvasása EEPROM-ból
bekapcsolas=word(bekapcsolasH,bekapcsolasL); //word-dé alakítás
lcd.print("Pappelektronika"); //kiírás
delay(2000); // 2 másodperc késleltetés
lcd.clear(); //LCD törlés
lcd.setCursor(0,0); // LCD Kuryor beállítás
lcd.print(bekapcsolas);
lcd.print(" inditas"); // bekapcsolások kiírása
bekapcsolas=bekapcsolas+1; //bekapcsolás számláló növelése
bekapcsolasH=bekapcsolas/256;
bekapcsolasL=bekapcsolas%256; //modulo alkalmazása
EEPROM.write(1,bekapcsolasL);
EEPROM.write(2,bekapcsolasH); //mentés EEPROM-ba
}
void loop() //program
{
mp=mp+1; //másodperc növelése
delay(1000); // 1 másodperc késleltetés
if (mp==60) //
{
mp=0; // Ha 60 akkor visszírás 0-nak és
perc=perc+1; // perc növelése
}
if (perc==60){ // Ha 60 akkor visszírás 0-nak és
perc=0;
ora=ora+1; // óra növelése
}
if (ora==24){ // Ha 24 akkor visszírás 0-nak és
ora=0;
}
timeprint(); // idő kiírás blokk hívása
}


Sziasztok !
Én így oldottam meg , kezdő vagyok szeretném kikérni a véleményeteket.
Előre is köszönöm ay építő hozzászólásokat!
Avatar
Verjoz
SzínkódFestő
Hozzászólások: 99
Csatlakozott: 2018. március 13. kedd, 7:18

Re: #17 házi feladat megoldása

Hozzászólás Szerző: Verjoz »

Tisztelt pappelektronika!

A loop részben nem így csináld a léptetést!
A delay() esetében egy másodpercig nem fut semmi! Csak toporog a proci egyhelyben.
A tavír lecke is leírja miért nem jó ez a megoldás.
Időzítés használj.... millis() erre a legjobb.
De ha a legpontosabb órát akarod akkor külső chip használata elengedhetetlen.
A kódod elméletileg léptet, csak soha nem lesz pontos.
pappelektronika
Újonc
Újonc
Hozzászólások: 6
Csatlakozott: 2019. december 8. vasárnap, 17:39

Re: #17 házi feladat megoldása

Hozzászólás Szerző: pappelektronika »

Tisztelt Verjoz!%
Nagyon köszönöm a tanácsot!
Számomra igen hasznosnak bizonyult, mert épp az idő beállításán törtem a fejem és ez a (delay) ,bizony akadályt jelent...
dolgozom rajta...
Attila79
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2020. október 19. hétfő, 19:16

Re: #17 házi feladat megoldása

Hozzászólás Szerző: Attila79 »

Sziasztok,
Én így oldottam meg a házit, de van egy gondom.
Amikor elkezdenek számolni a számlálók egy karaktert használnak kilencig, azután jobbra tolódnak egyet és úgy folytatják. Ezzel nem is lenne gondom mindaddig míg nem nullázódik. Miután a számlálók nullázódnak és újra kezdi a számolást az első 9 értékig megint csak a baloldali karakter helyet használják, de tőle jobbra lévő karakterhelyen marad egy nulla :( így 10,20,30,40,50,60,70,80,90,10,11,12...stb.)
Mit lehetne tenni?

Köszönöm, ha segítetek

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

#include "LiquidCrystal.h"
#include "EEPROM.h";

byte bekapcsolasH;//bekapcsolás számláló
byte bekapcsolasL;
word bekapcsolas;


unsigned long masodPerc = 0;  //másodperc változók
unsigned long mPSzamlalo = 0;
int mPOszto = 0;

unsigned long perc = 0; //perc változók
unsigned long pSzamlalo = 0;
int pOszto = 0;

unsigned long ora = 0; //óra változók
unsigned long oSzamlalo = 0;
int oOszto = 0;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


void setup() {
  lcd.begin(16, 2);

  lcd.setCursor(2, 1);
  lcd.print(":");
  lcd.setCursor(5, 1);
  lcd.print(":");

  bekapcsolasH = EEPROM.read(4);  //bekapcsolásokat számláló rész
  bekapcsolasL = EEPROM.read(3);
  bekapcsolas = word(bekapcsolasH, bekapcsolasL);

  bekapcsolas = bekapcsolas + 1;
  bekapcsolasH = bekapcsolas / 256;
  bekapcsolasL = bekapcsolas % 256;
  EEPROM.write (3, bekapcsolasL);
  EEPROM.write (4, bekapcsolasH);

  lcd.setCursor(10, 1);
  lcd.print(bekapcsolas);



}

void loop() {


  masodPerc = millis() / 1000;  //másodperc beállítás
  mPSzamlalo = masodPerc - mPOszto * 60;
  if (mPSzamlalo == 60) {
    mPOszto++;
  }

  lcd.setCursor(6, 1); //másodperc kiiratás
  lcd.print(mPSzamlalo);



  perc = millis() / 60000; //perc beállítás
  pSzamlalo = perc - pOszto * 60;
  if (pSzamlalo == 60) {
    pOszto++;
  }

  lcd.setCursor(3, 1);  //perc kiiratás
  lcd.print(pSzamlalo);


  ora = millis() / 3600000;  //óra beállítás
  oSzamlalo = ora - oOszto * 24;
  if (oSzamlalo == 24) {
    oOszto++;
  }

  lcd.setCursor(0, 1);  // óra kiiratás
  lcd.print(oSzamlalo);

}
Válasz küldése