Witam wszystkich, od niedawna zacząłem zabawę z mikro kontrolerami Atmegi (dokładnie Atmega8A-PU).
Chciałem napisać kod który powoduje że po wciśnięciu switcha dioda zaczyna migać 10 razy po czym gaśnie i tak w kółko.
O to on:
Kod:
#include <avr/io.h>
#include <util/delay.h>
#define LED_PIN (1<<PB0)
#define LED_TOG PORTB ^= LED_PIN
#define SWITCH_PIN (1<<PB1)
#define SWITCH_ON !(PINB & SWITCH_PIN)
uint8_t i;
int main(void)
{
DDRB |= LED_PIN;
PORTB |= LED_PIN;
DDRB &= ~SWITCH_PIN;
PORTB |= SWITCH_PIN;
while (1)
{
if (SWITCH_ON)
{
_delay_ms(50);
if(SWITCH_ON)
{
for (i=0; i<20; i++)
{
LED_TOG;
_delay_ms(500);
}
}
}
}
}
Taki kod wgrałem żeby sprawdzić czy dioda będzie świecić za pierwszym razem, ku mojemu zdziwieniu za każdym następnym naciśnięciem switcha dioda znowu wykonuje cykl świecenia. Myślałem że będę musiał napisać kolejną linię kodu który powoduje wyzerowanie
uint_t8 i.Może ktoś wytłumaczyć mi dlaczego tak się dzieje? Albo czy ja coś źle rozumuję.