Cześć, wróciłem do ćwiczeń z diodami i chciałem zrobić efekt "Night Rider", zapalam kolejno diody od 0 do 7 a potem gaszę od 7 do 0.
Mam pewien, prawdopodobnie, trywialny problem.
Przy gaszeniu diod, gaszę je jedynie do diody d1, d0 w dalszym ciągu się świeci.
Teoretycznie użycie "i>=0" powinno załatwić sprawę, ALE...wtedy całość operacji wykonuje się tylko 1 raz(nie wracam do początku pętli while).
Pomyślałem również o zmianie warunku rzeczonej pętli na i>-1, skutek był podobny.
Poniżej zamieszczam kod:
Kod:
#include <avr/io.h>
#include <util/delay.h>
#define LED (1<<PC0)
#define LED_ON PORTC &= ~LED
#define LED_OFF PORTC |= LED
#define LED_TOG PORTC ^= LED
int main(void){
DDRC |= 0xff;
PORTC = 0xff; // wygaszenie diod
while(1)
{
// Night Rider Effect
for(uint8_t i=0; i<8 ; i++ ) {
PORTC &= ~(1<<i);
_delay_ms(5000);
}
for(uint8_t i=7;i>0;i--){ // kiedy i>=0 to nie wracam na początek whila, podobnie jak i>-1
PORTC |= (1<<i);
_delay_ms(5000);
}
// obsługa klawisza (przeciwko drganiom stykow)
if (!key_lock && !(PINA & KEY)) {
key_lock = 1;
//piszemy zdazenie "press_button"
//LED_TOG; // zmiana aktualnego stanu LED
//BUZ_TOG; // zmiana aktualnego stanu BUZ
}else if (key_lock && (PINA & KEY)) key_lock++;
}
return 0;
}