Strona 1 z 1

Mam problem z chyba prostym programem w LabWindows5.0

: 08 mar 2006 17:18
autor: Gość
Mam problem z chyba prostym programem w LabWindows5.0 a dokładnie chodzi mi czy ma ktos albo napisal by mi programik ktory gra jakas melodie na glosniku komputera mam tu przyklad i jest to pojedynczy dzwiek a mi chodzi o cos dluzszego .Dziekuje z gory za pomoc pozdrawiam :)))

#include <utility.h>

int main (void)
{
int dzielnik;
int fw = 1193180;
int f = 1193;
unsigned char LSB, MSB,rej;
dzielnik = fw/f;
LSB =dzielnik&0x0f ;
MSB =dzielnik>>8 ;
outp (0x43, 0x86);
outp (0x42, LSB);
outp (0x42, MSB);
rej = inp(0x61);
outp (0x61, rej |0x03);
Delay (1);
outp (0x61,rej &0xFC) ;
}

Re: Mam problem z chyba prostym programem w LabWindows5.0

: 08 mar 2006 20:01
autor: jogurt_owocowy
To chyba nie wygląda na trudne. A przynajmniej nie na tyle, żeby szukać gotowca-szybciej ruszyć głową samemu. Nigdy nie miałem styczności z LabWindows, ale... fw wygląda na wielkość definiującą częstotliwość odgrywanego dźwięku.
Więc żeby odgrywać nie pojedynczy dźwięk a "coś dłuższego" robimy tak, żeby fw zamiast pojedynczej zmiennej, było tablicą wysokości kolejnych dźwięków(nie jestem pewien składni, bo dawno w C nie pisałem): int fw[]={1193180,596590,1193180};-tu trzy kolejne dĹşwięki, taki jak w przykłądzie,inny(niższy?), taki jak w przykładzie. W kod programu wmontowujemy pętlę for w taki sposób (...) unsigned char LSB, MSB,rej; int i;
for(i=0;i<3;i++) {
dzielnik = fw/f;
LSB =dzielnik&0x0f ; (...)
Delay (1); outp (0x61,rej &0xFC) ; } // koniec pętli for (...)

I już powinno hulać.(...) oznaczają oczywiście resztę programu w niezmienionej postaci.
Jeśli "coś dłuższego" ma być jakąś melodyjką to wypadałoby się zaopatrzyć w tabelkę definiującą jakiej wartości fw odpowiada jaka wysokość dĹşwięku (C-D-E-F-G-A-H-C... czyli do-re-mi-fa-sol-la-si-do...). Najpewniej trzeba to będzie zrobić pośrednio fw->hz, potem hz->wysokość dĹşwięku i w końcu fw->wysokość dĹşwięku. Teraz naszą melodyjkę piszemy w postaci tablicy wysokości kolejnych nutek, czyli dla "wlazł kotka..." nutki[]={4,2,2,3,1,1,0,2,4}; gdzie 0-do, 1-re,2-mi itd. Zanim wejdziemy do pętli for tablicę nutki konwertujemy na tablicę fw wg uprzednio sporządzonej tabelki fw-nutka i gotowe-musi działać.
Pozdrawiam

Re: Mam problem z chyba prostym programem w LabWindows5.0

: 13 mar 2006 21:54
autor: Gość
Dzieki za pomoc bardzo sie przydała :)))

Pozdrawiam

Re: Mam problem z chyba prostym programem w LabWindows5.0

: 13 mar 2006 22:11
autor: Gość
Ale program nie smiga:(((((((((

Re: Mam problem z chyba prostym programem w LabWindows5.0

: 13 mar 2006 23:16
autor: jogurt_owocowy
A co takiego nie działa?
for(int i...)? length(fw)? ?

Re: Mam problem z chyba prostym programem w LabWindows5.0

: 13 mar 2006 23:32
autor: Gość
wpisalem tak :
#include <utility.h>

int main (void)
{
int dzielnik;
int fw[]={1193180,596590,1193180};
int f = 1193;
unsigned char LSB, MSB,rej;

for(int i=0;i<length(fw);i++) ;
{
dzielnik = fw/f;
LSB =dzielnik&0x0f ;
MSB =dzielnik>>8 ;
outp (0x43, 0x86);
outp (0x42, LSB);
outp (0x42, MSB);
rej = inp(0x61);
outp (0x61, rej |0x03);
Delay (1);
outp (0x61,rej &0xFC) ;
}
i wyswietla mi bledy przy for(int i...) ...nie wiem co jest nie tak ,moze zle wpisalem ?nie wiem jestem zielony z tego:(

Re: Mam problem z chyba prostym programem w LabWindows5.0

: 13 mar 2006 23:36
autor: jogurt_owocowy
No to na gotowca nie licz.
Wszystko co trzeba zrobić do poklikać w błędy które wypisuje, poczytać co o nich ma do powiedzenia i poprawić. Swojego posta pisałem "intuicyjnie" bo z LabWindows do czynienia nigdy nie miałem. Akurat szczęściem zainstalowałem parę dni temu i poprawienie tych błędów zajmuje(dosłownie!) pół minuty. Czego dowód w poprawionym poście powyżej.

Re: Mam problem z chyba prostym programem w LabWindows5.0

: 14 mar 2006 09:17
autor: Gość
Spoko juz wiem , bo jeśli zamiast length(fw) wstawie 3 to działa
Dzieki za pomoc:)
Pozdrawiam