köszönöm válaszod!
újabb kérdésem lenne.
Ha van egy változóm, ami pl. float ertek = 24.13
a 0.13-at megkapom, ha pl. ertek%1-et írok.
Ha viszont az egész része érdekel egyrészt tudok a változó típusával játszani, hogy integer legyen vagy byte, tudok kerekíteni a Round(ertek)-kel (de az nem az egész részt adja, hanem kerekít, így kiesik)
Nincs erre speciális funkció?
Sajnos nem találtam meg a leckék közti kereséskor, valahol pedig benne kell lennie.
Épp a leckém farigcsálom és megakadtam ennél az apróságnál.
Köszönöm előre is!
LCD ébresztőóra
Re: LCD ébresztőóra
byte=float;
adott típusú változóként.
adott típusú változóként.
-
- Újonc
- Hozzászólások: 12
- Csatlakozott: 2014. december 8. hétfő, 20:03
Re: LCD ébresztőóra
Üdvözlet!
Lehet jó lenne átírni a fórum címét a #21 lecke ébresztőóra megoldásának címére, mert végülis ott kaptuk eme nemes feladatot, mármint az ébresztőóra megvalósítását.
Beraknám az általam megírt kódot a korábban az LCD óra megvalósításával továbbfejlesztve.
Pár gondolatot hozzáfűznék:
1. A pitch.h fájl beincludolásával volt nem kevés gond. Azért is, mert az Arduino legújabb 1.5.8 verziót futtatom, és ez nem ugyanúgy kezeli a függvénykönyvtárakat, mint a korábbi 1.0 körüli verziók (tudom, BETA verziók használata tilos). Más a felépítése is más, így addig szórakoztattam vele, míg csináltam magamnak - talán hasznos lesz később - egy külön saját könyvtárat, amiben ez is benne foglaltaik, sőt egyelőre csak ez.Legalább ezt is gyakorolgattam, később jól jöhet. Kell hozzá mindenképpen egy library.properties fájlt írni, és egy meghatározott könyvtárszerkezetet felépíteni, mert máshogy nekem ez a verzió nem volt hajlandó kezelni a pitc.h fájlt. Az 1.0.6 körüli verzióval minden gond nélkül működött.
2. Gyakorolgattam az eljárásokat is, ami már ebbe belekerült. Kicsit így talán átláthatóbb is. Volt ahol értelme is volt, pl. az alapkepernyo() függvénynél, mivel azt többször használjuk a program során (indításnál és ébresztés után is).
3. Lehetne még optimalizálni, de volt már ennél nagyobb is .
Az még nem teljesen tiszta, pontosabban kicsit ellentmondásos számomra, hogy az #include utasítás után mikor kell "" illetve <> közé tenni a függvényt/függvénykönyvtárat.
További kellemes estét,
Jazzkedvelo
Lehet jó lenne átírni a fórum címét a #21 lecke ébresztőóra megoldásának címére, mert végülis ott kaptuk eme nemes feladatot, mármint az ébresztőóra megvalósítását.
Beraknám az általam megírt kódot a korábban az LCD óra megvalósításával továbbfejlesztve.
Kód: Egész kijelölése
#include <pitches.h>
#include "LiquidCrystal.h"
LiquidCrystal lcd(4, 5, 6, 7, 8, 9);
byte ora, perc, mp; //aktuális ido
byte EORA=22, EPERC=30, EMP=30; //ébresztési idő megadása
unsigned long ORA=22, PERC=30, MP=25; //pontos idő megadása induláskor
unsigned long ido; //milisec alapu idő a bekapcsolas óta
int melody[] = {
NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};
int noteDurations[] = {
4, 8, 8, 4,4,4,4,4 };
void alapkepernyo()
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Ido: : :");
lcd.setCursor(0, 1);
lcd.print("Vekker:");
lcd.setCursor(8, 1);
lcd.print(EORA);
lcd.print(":");
lcd.print(EPERC);
lcd.print(":");
lcd.print(EMP);
}
void idomeghatarozas()
{
ido = millis();
//alapértékek kiszamolasa a millis() ertekebol
mp= ((ido+1000*MP) % 60000)/1000;
perc=((ido+mp+1000*MP+60000*PERC) % (60*60000))/60000;
ora= ((ido+mp+perc+1000*MP+60000*PERC+(60000*60*ORA)) % (24*60*60000))/(60000*60);
}
void ebresztes()
{
lcd.setCursor(0, 1);
lcd.print(" Ebreszto! ");
// zenelejatszas
for (int thisNote = 0; thisNote < 9; thisNote++)
{
int noteDuration = 1000/noteDurations[thisNote];
tone(10, melody[thisNote],noteDuration);
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
if (thisNote==8) {delay (1000); thisNote=-1;}
if (digitalRead(3)==0)
{
noTone(10);
lcd.setCursor(0, 1);
lcd.print(" Epp ideje!");
delay(2000);
thisNote=9;
alapkepernyo();
}
}
}
void idokiiras()
{
lcd.setCursor(14, 0);
if (mp<10)
{
lcd.print("0");
lcd.print(mp);
}
else
{
lcd.print(mp);
}
lcd.setCursor(11, 0);
if (perc<10)
{
lcd.print("0");
lcd.print(perc);
}
else
{
lcd.print(perc);
}
lcd.setCursor(8, 0);
if (ora<10)
{
lcd.print("0");
lcd.print(ora);
}
else
{
lcd.print(ora);
}
}
void setup() {
pinMode(3, INPUT); //ebresztogomb
pinMode(13, OUTPUT); //háttérvilágítás
digitalWrite(13, HIGH);
lcd.begin(16,2);
alapkepernyo();
}
void loop() {
idomeghatarozas();
idokiiras();
if (EORA==ora && EPERC==perc && EMP==mp) //ébresztő és óra egyezik
{
ebresztes();
}
}
1. A pitch.h fájl beincludolásával volt nem kevés gond. Azért is, mert az Arduino legújabb 1.5.8 verziót futtatom, és ez nem ugyanúgy kezeli a függvénykönyvtárakat, mint a korábbi 1.0 körüli verziók (tudom, BETA verziók használata tilos). Más a felépítése is más, így addig szórakoztattam vele, míg csináltam magamnak - talán hasznos lesz később - egy külön saját könyvtárat, amiben ez is benne foglaltaik, sőt egyelőre csak ez.Legalább ezt is gyakorolgattam, később jól jöhet. Kell hozzá mindenképpen egy library.properties fájlt írni, és egy meghatározott könyvtárszerkezetet felépíteni, mert máshogy nekem ez a verzió nem volt hajlandó kezelni a pitc.h fájlt. Az 1.0.6 körüli verzióval minden gond nélkül működött.
2. Gyakorolgattam az eljárásokat is, ami már ebbe belekerült. Kicsit így talán átláthatóbb is. Volt ahol értelme is volt, pl. az alapkepernyo() függvénynél, mivel azt többször használjuk a program során (indításnál és ébresztés után is).
3. Lehetne még optimalizálni, de volt már ennél nagyobb is .
Az még nem teljesen tiszta, pontosabban kicsit ellentmondásos számomra, hogy az #include utasítás után mikor kell "" illetve <> közé tenni a függvényt/függvénykönyvtárat.
További kellemes estét,
Jazzkedvelo
-
- Újonc
- Hozzászólások: 12
- Csatlakozott: 2014. december 8. hétfő, 20:03
Re: LCD ébresztőóra
Még egy nagyon kicsit belehúztam: állíthatóvá tettem az ébresztés időpontját.
Ehhez két gombot definiáltam, az egyikkel(S1) tudok lépkedni, a másikkal(S2) meg állítani. Persze mindegyikhez van saját megjelenítés is.
Azaz megnyomom az S1 gombot, bejön a beállító képernyő, és az S2-vel tudom léptetni az órát.
Utána ismét S1 átlép perc üzembe és a percet tudom léptetni. Mégegyszer lenyomom az S1-et és kilép vissza az alapállapotba. Persze itt a prell-et is le kellett kezelni rendesen. és persze csörög is az új beállításkor.
A kódot inkább nem rakom be, mert már kezd hosszú lenni, és nem akarok lefárasztani mindenkit.
Ahhoz viszont hogy az órát is állíthatóvá tegyem igencsak át kell formálnom a programot, azon belül is a void idomeghatarozas() reszt. Ez már nem is annyira triviális ha a milis alapjaira helyezzük az óra járását. legalábbis fel kell rúgni az eddigi (működési)elvet.
Ehhez két gombot definiáltam, az egyikkel(S1) tudok lépkedni, a másikkal(S2) meg állítani. Persze mindegyikhez van saját megjelenítés is.
Azaz megnyomom az S1 gombot, bejön a beállító képernyő, és az S2-vel tudom léptetni az órát.
Utána ismét S1 átlép perc üzembe és a percet tudom léptetni. Mégegyszer lenyomom az S1-et és kilép vissza az alapállapotba. Persze itt a prell-et is le kellett kezelni rendesen. és persze csörög is az új beállításkor.
A kódot inkább nem rakom be, mert már kezd hosszú lenni, és nem akarok lefárasztani mindenkit.
Ahhoz viszont hogy az órát is állíthatóvá tegyem igencsak át kell formálnom a programot, azon belül is a void idomeghatarozas() reszt. Ez már nem is annyira triviális ha a milis alapjaira helyezzük az óra járását. legalábbis fel kell rúgni az eddigi (működési)elvet.
Re: LCD ébresztőóra
Arduino Include különbségek:
A fenti két sor a nevezett fájlokat egyszerűen bemásolja az #include helyére. Az első esetben a forrásfájl nevét a kisebb-nagyobb (<, >) jelek közé írtuk, ezért a fordító a fejállományok szabványos helyén fogja keresni azt. A második példában idézőjelek közé helyeztük el a fájlnevet, így a program saját könyvtárából relatíve keresi azt a fordító.
Referencia: http://hu.wikipedia.org/wiki/C_el%C5%91 ... %ADt%C3%B3
Kód: Egész kijelölése
#include <iostream>
#include "otherfile.h"
Referencia: http://hu.wikipedia.org/wiki/C_el%C5%91 ... %ADt%C3%B3