Skocz do zawartości

Sposób na rozbudowane if, switch...


SOYER

Pomocna odpowiedź

Cześć, podsuncie jakiś pomysł...

Uczepiłem się tego dfplayerem to mam😭, chcę by mój dfp wygrał mi aktualną datę, godzinę i dzień tygodnia. Wszystkie te dane, tzn. dzień tygodnia, miesiąca, miesiąc, rok i oczywiście godziny mam w formie liczbowej (int). Do każdej tej liczby muszę przyporządkować konkretny numer pliku wav.

Teraz, zrobienie tego na if... kupa pisania...

Zrobienie na switchu nie lepiej... 31dni, 12 miesięcy, rok, 24 godziny, 60 minut...

127szt case...

Pętla for? Jeszcze inaczej? Ale jak?

Pomożecie?

Edytowano przez SOYER
Link do komentarza
Share on other sites

Cześć!

A gdyby nie nr pliku a nazwę pliku? Co zawierają, (lub mają zawierać) te pliki?

Jeśli masz numer dnia to ustaw nazwę pliku np na

nazwa_aktualnego_pliku_dnia = "dzien_" + str(nr_dnia) + ".vav" ; // to dzień, miesiąc, rok, godzina, mnuta, sekunda analogicznie

Jeśli pliki masz sensownie ponumerowane to możesz numer uzyskać np dodając nr pierwszej pozycji zawierającej dzień do numeru dnia minus jeden.

Edytowano przez bjrk
Nowy pomysł
Link do komentarza
Share on other sites

(edytowany)

Nie bardzo łapię...

Nazwa pliku to 01, 02,03,04...11,12,13,...256. Takiego nazewnictwa wymaga dfp.

Pliki to sample dźwiękowe, "czwarty", "szesnasty", "lipca"...

Pliki z dniami miesiąca są nazywane kolejnymi numerami, podobnie dni tygodnia, miesiące...

Np. dni tygodnia to int od "0" do "6", a pliki z samplami to numery od "55" do "61"

Podobnie reszta...

 

 

Edit:

Poprawcie mnie jeśli się mylę,ale rozwiązanie jest chyba banalne, robię 6 krótkich funkcji, dla minuty, godziny, dnia tygodnia, dnia miesiąca, miesiąca, roku. W argument funkcji daję int-a z pobranej godziny, miesiąca itd.

W funkcji tylko 

dfp.play(argument funkcji);

Ok?

Czy da się prościej?

 

Edytowano przez SOYER
Link do komentarza
Share on other sites

Czyli nazwa pliku dla 26 dnia to numer pierwszego pliku z serii (np 5) plus nr wewnątrz serii czyli 26.

jeśli  styczeń ma nr 35, luty 36 itd to numer marca to 34+3, numer maja 34+5 itd

Nie pisałem o dniach tygodnia, bo tu jeszcze zależy jak je numerujesz

czyli

nr_pliku = pierwszy_z_serii + nr_wewnątrz_serii ;
nr_pliku_dnia_tygodnia = 55 + nr_dnia_tygodnia;

To odpowiedź na Twój post, ale mi połączyło:

Pewnie tak, wtedy nr pierwszego pliku z serii masz w środku funkcji.

Edytowano przez bjrk
połaczenie postów
  • Pomogłeś! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

18 minut temu, SOYER napisał:

Edit:

Poprawcie mnie jeśli się mylę,ale rozwiązanie jest chyba banalne, robię 6 krótkich funkcji, dla minuty, godziny, dnia tygodnia, dnia miesiąca, miesiąca, roku. W argument funkcji daję int-a z pobranej godziny, miesiąca itd.

W funkcji tylko 

dfp.play(argument funkcji);

Ok?

Czy da się prościej?

Prościej znaczy krócej, jedna funkcja z 6 argumentami...

Prościej chyba się nie da...??

Link do komentarza
Share on other sites

Prościej zawsze jakoś się da, ale czy będzie lepiej to nie wiem.😉 Ja myślałem ewentualnie o jednej funkcji z dwoma argumentami: numer_pierwszego, numer_aktualnego. Obliczasz pozycję i wywołujesz co tam chcesz, a pierwszy parametr to stała, może predefiniowana (#define)

Link do komentarza
Share on other sites

A na przykład dla godziny (czas w minutach) coś w rodzaju:
 

int pliki[4];
int nr = 0;

static const int godziny = 10; // arbitralnie - od numeru 10 zaczną się godziny
static int minuty = 31; // minuty od 0 do 19
static int minuty_d = 41; // dziesiątki minut od 20

hour = time / 60; // time to aktualny czas w minutach od zera do 1440
mins = time % 60;

if (hour <= 20) pliki[nr++] = godziny + hour; // dla godzin do dwudziestej
else { // składamy z dwóch, np. "dwudziesta" i "pierwsza"
	pliki[nr++] = godziny + 20;
    pliki[nr++] = godziny + (hour - 20);
}
if (mins < 10) {
  pliki[nr++] = minuty; // zero
  if (mins) pliki[nr++] = minuty + mins;
}
else if (mins < 20) {
  pliki[nr++] = minuty + mins; // dziesięć i naście
}
else {
  pliki[nr++] = minuty_d + mins/10 - 2; // dwadzieścia i dalej
  if (mins % 10) pliki[nr++] = minuty + mins % 10;
}

// w tablicy plik masz numery plików, a w nr ile ich trzeba zagrać.

Masz 21 + 20 + 5 = 46 plików na powiedzenie godziny.

Ech, kiedyś to ćwiczyłem na Symbianie 🙂

 

  • Pomogłeś! 1
Link do komentarza
Share on other sites

20 minut temu, bjrk napisał:

nr_pliku = pierwszy_z_serii + nr_wewnątrz_serii ;

Dzięki, dobry pomysł, ale mała poprawka:

nr_pliku = (pierwszy_z_serii-1)+ nr_wewnątrz_serii ;

a właściwie

 

nr_pliku = (pierwszy_z_serii-1)+ nr_dnia_ew.tyg_ew.godzinaitd;

 

Link do komentarza
Share on other sites

3 minuty temu, bjrk napisał:

Moim zdaniem rozwiązuje, ale dobranoc.

Rozwiązuje dopiero połączenie Twojego pomysłu z moim... 

Pomysłowi @ethanak muszę się przyjrzeć na spokojnie...

Ja to widzę tak:

int godzina=get.hour();

Int plikGodzina=79+godzina;

int miesiac=get.month();

Int plikMiesiac=123+month;

I tak jeszcze 4 razy...

gadajCzas(plikMinuta, plikGodzina,plikdzien,plikMiesiac,plikDzienTygodnia);

gadajCzas(int min, int godz, int dzień,int miesiac,int dzienT){

dfp.play(min);

delay(3000);

dfp.play(godz);

delay(3000);

Itd.itp.

}

 

 

 

Link do komentarza
Share on other sites

Tak dokładnie jest, jeden plik na każdy dzień i miesiąc, godzin i minut nie nagrywałem jeszcze. Tutaj właśnie przyda się pomysł @ethanak bo nie będę musiał nagrywać tyłu plików.

Link do komentarza
Share on other sites

No wiesz - ja w Nokii chciałem oszczędzić miejsca (zegarek to była część playera do audiobooków, i wolałem wsadzić na kartę jedną książkę więcej niż za dużo komunikatów). Ale po prostu chciałem pokazać jeden ze sposobów.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.