Witam.
Próbuję napisać program, który wygeneruje melodię po naciśnięciu przycisku. Każdy z przycisków (PG2, PD4, PD5, T2(PD7)) ma generować inną melodię. Jestem początkującym programistą i prosiłbym o poradę bardziej znających się na rzeczy kolegów, czy program, który napisałem nadaje się do użytku.
Dodam, że aplikację testowałem wyłącznie na symulatorze w VMLAM, gdyż mikrokontrolera jeszcze nie posiadam. Kompilator nie zgłasza błędów, ale symulator nie odtwarza dźwięku (być może nie posiada takiej funkcji?) przez to nie mogę sprawdzić poprawności programu.
Jako narzędzie programistyczne wykorzystuję VMLAB'a z kompilatorem WinAVR.
Bardzo proszę o pomoc.
Próbuję napisać program, który wygeneruje melodię po naciśnięciu przycisku. Każdy z przycisków (PG2, PD4, PD5, T2(PD7)) ma generować inną melodię. Jestem początkującym programistą i prosiłbym o poradę bardziej znających się na rzeczy kolegów, czy program, który napisałem nadaje się do użytku.
Dodam, że aplikację testowałem wyłącznie na symulatorze w VMLAM, gdyż mikrokontrolera jeszcze nie posiadam. Kompilator nie zgłasza błędów, ale symulator nie odtwarza dźwięku (być może nie posiada takiej funkcji?) przez to nie mogę sprawdzić poprawności programu.
Jako narzędzie programistyczne wykorzystuję VMLAB'a z kompilatorem WinAVR.
Bardzo proszę o pomoc.
#include <avr\io.h>
#include <avr\interrupt.h>
#include <avr\signal.h>
#include <util\delay.h>
unsigned nuty[] = {1911, 1702, 1516, 1430, 1275, 1196, 1012, 955};
unsigned lnut[] = {261, 293, 329, 349, 391, 440, 493, 523};
void graj( unsigned tone, unsigned len)
{
unsigned k;
for (k=0; k<len; k++)
{
PORTE=4;
_delay_us (nuty[tone]);
PORTE=0;
_delay_us (nuty[tone]);
}
}
int main(void)
{
DDRE = 0x00;
DDRG = 0x00;
DDRD = 0x00;
while(1)
{
// ********** PG2 **********
if (PING & 0x04) // 00000100 PORTG2 = 1
{}
else
{
for(int i=0;i<8;i++)
{
graj(i,lnut[i]); _delay_ms (100);
}
}
// ********** PD4 **********
if (PIND & 0x10) // 00010000 PORTD4 = 1
{}
else
{
graj(1,lnut[1]); _delay_ms (100);
graj(1,lnut[1]); _delay_ms (100);
graj(3,lnut[3]); _delay_ms (100);
graj(3,lnut[3]); _delay_ms (100);
graj(5,lnut[5]); _delay_ms (100);
graj(5,lnut[5]); _delay_ms (100);
graj(7,lnut[7]); _delay_ms (100);
graj(7,lnut[7]); _delay_ms (100);
}
// ********** PD5 **********
if (PIND & 0x20) // 00100000 PORTD5 = 1
{}
else
{
graj(2,lnut[2]); _delay_ms (100);
graj(2,lnut[2]); _delay_ms (100);
graj(4,lnut[4]); _delay_ms (100);
graj(4,lnut[4]); _delay_ms (100);
graj(6,lnut[6]); _delay_ms (100);
graj(6,lnut[6]); _delay_ms (100);
graj(8,lnut[8]); _delay_ms (100);
graj(8,lnut[8]); _delay_ms (100);
}
// *********** T2 **********
if (PIND & 0x80) // 00100000 PORTD7 = 1
{}
else
{
graj(3,lnut[3]); _delay_ms (200);
graj(5,lnut[5]); _delay_ms (100);
graj(5,lnut[5]); _delay_ms (100);
graj(2,lnut[2]); _delay_ms (200);
graj(4,lnut[4]); _delay_ms (100);
graj(4,lnut[4]); _delay_ms (100);
graj(1,lnut[1]); _delay_ms (200);
graj(3,lnut[3]); _delay_ms (100);
graj(5,lnut[5]); _delay_ms (100);
}
}
}
