Witam
Próbuję zrobić tak, aby po naciśnięciu 1 z 4 switchy zapalała się dioda led, i w zależności który wciśniemy, zaświeciła się dioda określoną ilość razy.
Kod:
I problem polega na tym, że po podłączeniu zasilania uC sprawdza, który switch został włączony, i wtedy zapala led'a z przerwami, ale po skończeniu tego, pomimo, że nic nie jest włączone, cały czas, w pętli wykonuje, to co dostał na początku, nie wiadomo dlaczego?
Jeśli ktoś widzi jakiś błąd, to proszę o pomoc.
Próbuję zrobić tak, aby po naciśnięciu 1 z 4 switchy zapalała się dioda led, i w zależności który wciśniemy, zaświeciła się dioda określoną ilość razy.
Kod:
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/signal.h>
#define SET_OUT_LED DDRB |= (1<<PB3) //inicjacja
#define SET_LED PORTB |= (1<<PB3) //włącza
#define CLR_LED PORTB &= (0<<PB3) //gasi
int main(void)
{
PORTB &= ~(0<<PB0);
PORTB &= ~(0<<PB1);
PORTB &= ~(0<<PB2);
PORTB &= ~(0<<PB4);
const int przerwa1 = 250;
const int przerwa3 = 1500;
char licz = 0;
SET_OUT_LED;
while (1)
{
licz = 1;
if((!(PINB & _BV(2))) && licz == 1)
{
SET_LED;
_delay_ms(przerwa1);
CLR_LED;
_delay_ms(przerwa3);// 1
licz = 0;
}
if((!(PINB & _BV(1))) && licz == 1)
{
SET_LED;
_delay_ms(przerwa1);
CLR_LED;
_delay_ms(przerwa1);// 1
SET_LED;
_delay_ms(przerwa1);
CLR_LED;
_delay_ms(przerwa3);// 2
licz = 0;
}
if((!(PINB & _BV(0))) && licz == 1)
{
SET_LED;
_delay_ms(przerwa1);
CLR_LED;
_delay_ms(przerwa1);// 1
SET_LED;
_delay_ms(przerwa1);
CLR_LED;
_delay_ms(przerwa1);// 2
SET_LED;
_delay_ms(przerwa1);
CLR_LED;
_delay_ms(przerwa3);// 3
licz = 0;
}
if((!(PINB & _BV(4))) && licz == 1)
{
SET_LED;
_delay_ms(przerwa1);
CLR_LED;
_delay_ms(przerwa1);// 1
SET_LED;
_delay_ms(przerwa1);
CLR_LED;
_delay_ms(przerwa1);// 2
SET_LED;
_delay_ms(przerwa1);
CLR_LED;
_delay_ms(przerwa1);// 3
SET_LED;
_delay_ms(przerwa1);
CLR_LED;
_delay_ms(przerwa3);// 4
licz = 0;
}
}
}I problem polega na tym, że po podłączeniu zasilania uC sprawdza, który switch został włączony, i wtedy zapala led'a z przerwami, ale po skończeniu tego, pomimo, że nic nie jest włączone, cały czas, w pętli wykonuje, to co dostał na początku, nie wiadomo dlaczego?
Jeśli ktoś widzi jakiś błąd, to proszę o pomoc.