Witam, mam problem z poniższym programem,który jest częścią większego kodu. Chce aby wejść w aplikacje, konieczne bylobyby wcisniecie odpowiednio w sekwencji :3 razy przycisk 1, 2 razy przycisk 2.
Po wpisaniu tej sekwencji program ma przejść do dalszych instrukcji w mainie. Jesli kolejnosc sekwencji zostanie pomylona program wraca do poczatku wpisywania.
Program niedziala jednak poprawnie, nie jest chyba to problem drgania stykow bo opoznienie po wcisnieciu przyciskow wynosi 200ms(dawalem tez 500) i obojetnie jak nie zmieniam to problem sie powtarza.
Wydaje mi sie ze wina lezy w tej czesci kodu(struktura powtarz sie parokrotnie):poniewaz gdy przerobie strukture switch do tylko jednego case to zabezpieczenie dziala, ale tak co 3,4 wcisniecie przycisku(tzn. wlacza sie dosc losowo),co przy sekwencji jest niedopuszczalne, bo automatycznie wraca do poczatku kodu.
Jak moge przerobic program zeby dzialal poprawnie?? Bede wdzieczny za pomoc...
Oto caly program:
Proszę poprawić tytuł wiadomości - regulamin p.11.1
[zumek]
Po wpisaniu tej sekwencji program ma przejść do dalszych instrukcji w mainie. Jesli kolejnosc sekwencji zostanie pomylona program wraca do poczatku wpisywania.
Program niedziala jednak poprawnie, nie jest chyba to problem drgania stykow bo opoznienie po wcisnieciu przyciskow wynosi 200ms(dawalem tez 500) i obojetnie jak nie zmieniam to problem sie powtarza.
Wydaje mi sie ze wina lezy w tej czesci kodu(struktura powtarz sie parokrotnie):
while(c!=1)
{
if ((PINC&0x02)==0x00)
{ zm++;
c=1;
_delay_ms(opoznienie2);
}
}
}Jak moge przerobic program zeby dzialal poprawnie?? Bede wdzieczny za pomoc...
Oto caly program:
#define opoznienie2 200
int zm=0;
void zabezpieczenie(zm)
{
switch(zm)
{
case 0: while(c!=1)
{
if ((PINC&0x02)==0x00)
{ zm++;
c=1;
_delay_ms(opoznienie2);
}
}
case 1:
while(c!=2)
{
if ((PINC&0x02)==0x00)
{ zm++;
c=2;
_delay_ms(opoznienie2);
}
if ((PINC&0x01)==0x00)
{ zm=0;
c=2;
_delay_ms(opoznienie2);
}
}
case 2:
while(c!=3)
{
if ((PINC&0x02)==0x00)
{ zm++;
c=3;
_delay_ms(opoznienie2);
}
if ((PINC&0x01)==0x00)
{ zm=0;
c=3;
_delay_ms(opoznienie2);
}
}
case 3:
while(c!=4)
{
if ((PINC&0x02)==0x00)
{ zm=0;
c=4;
_delay_ms(opoznienie2);
}
if ((PINC&0x01)==0x00)
{ zm++;
c=4;
_delay_ms(opoznienie2);
}
}
case 4:
while(c!=5)
{
if ((PINC&0x02)==0x00)
{ zm=0;
c=5;
_delay_ms(opoznienie2);
}
if ((PINC&0x01)==0x00)
{ zm++;
c=5;
_delay_ms(opoznienie2);
d=1;
}
}
break;
}
}
void main(void)
{
while(d!=1)
{
zabezpieczenie(zm);
}
}
Proszę poprawić tytuł wiadomości - regulamin p.11.1
[zumek]