Witam serdecznie wszystkich forumowiczów, zaczynam swoją zabawę z AVR oraz zestawem ATB 1.04a i pomału próbuję się przesiąść z platformy ARDUINO na czysty C i mam może banalne pytanie ale nie mogę sobie poradzić z prostym kodem zapalania diod korzystając z tablicy, otóż wszystko działa pięknie na 8 ledach czyli wpiętych do portu Bxx ATMEGA32 zrobiłem taki prosty efekt linijki (WĄŻ ŚWIETLNY) i wszystko ok natomiast chciałbym podłączyć kolejne diody np. do portu Dxx czyli razem 16 i za nic nie mogę sobie poradzić aby ten wężyk przechodził z portu Bxx do Dxx tak aby porty Bxx i Dxx tworzyły całość, proszę o pomoc. Poniżej znajduje się kod na 8 led jeszcze dla arduino. Pozdrawiam
#include <avr/pgmspace.h> const byte przerwa = 100; const byte przerwa2 = 50; byte animacja = 0; uint8_t i, liczba=1; const uint8_t tab[] PROGMEM = { 0b11111110, 0b11111100, 0b11111000, 0b11110000, 0b11100000, 0b11000000, 0b10000000, 0b00000000, 0b00000001, 0b00000011, 0b00000111, 0b00001111, 0b00011111, 0b00111111, 0b01111111, 0b11111111, 0b01111111, 0b00111111, 0b00011111, 0b00001111, 0b00000111, 0b00000011, 0b00000001, 0b00000000, 0b10000000, 0b11000000, 0b11100000, 0b11110000, 0b11111000, 0b11111100, 0b11111110, 0b11111111 }; const uint8_t tab2[] PROGMEM = { 0b11111110, 0b11111100, 0b11111000, 0b11110000, 0b11100000, 0b11000000, 0b10000000, 0b00000000, 0b00000001, 0b00000011, 0b00000111, 0b00001111, 0b00011111, 0b00111111, 0b01111111, 0b11111111, }; unsigned long przejscie = millis(); unsigned long timer = millis(); void setup() { DDRB = 0b11111111; PORTB |= (0b00000000);
}
void loop() { if ((millis()-przejscie>5000)){ animacja = 1; if((millis()-przejscie>10000)){ przejscie = millis(); animacja = 0; }} switch(animacja){ case 0: if ((millis()-timer>przerwa)){ PORTB = pgm_read_byte ( tab +i ) ; i++; timer = millis(); switch(i){ case 32: i=0; } break; case 1: if ((millis()-timer>przerwa2)){ PORTB = pgm_read_byte ( tab2 +i ) ; i++; timer = millis(); switch(i){ case 32: i=0; break; } } } } }
|