22-05-2020, 07:37
Witam.
moja platforma testowa to ATtiny85, oled SSD1306 I2C 128x32
proszę o pomoc w zrozumieniu nie działającego programu.
używam biblioteki: Tiny4kOLED.h
funkcja: oled.bitmap(0,0,szerokosc,4,znak_0); wyświetla mi znak który jest zapisany w tablicy. tutaj niema problemu.
w programie używam takiego wpisu: oled.bitmap(0,0,szerokosc,4,matryca);
problem pojawia się gdy linia z tym wpisem: //i=2; jest zakomentowana program wyświetla mi śmieci na ekranie.
przy starcie pętli głównej pętli loop. i=0
ciekawszy problem pojawia się gdy odkomentuję tą linię. program wyświetla mi normalnie 3 wzory czcionek.
gdy przypisuje do 'i' wartosci stałe: i=0; i=1; i=2; wtedy bitmapy wyswietlają się ok.
gdzie jest błąd. gdy jedna tablica przechowuje adresy innych tablic.
przyznaje że wskaźniki są trudne. no może na tym przykładzie uda mi się to zrozumieć.
z góry dzięki za pomoc. pozdrawiam.
moja platforma testowa to ATtiny85, oled SSD1306 I2C 128x32
proszę o pomoc w zrozumieniu nie działającego programu.
używam biblioteki: Tiny4kOLED.h
funkcja: oled.bitmap(0,0,szerokosc,4,znak_0); wyświetla mi znak który jest zapisany w tablicy. tutaj niema problemu.
w programie używam takiego wpisu: oled.bitmap(0,0,szerokosc,4,matryca);
problem pojawia się gdy linia z tym wpisem: //i=2; jest zakomentowana program wyświetla mi śmieci na ekranie.
przy starcie pętli głównej pętli loop. i=0
ciekawszy problem pojawia się gdy odkomentuję tą linię. program wyświetla mi normalnie 3 wzory czcionek.
gdy przypisuje do 'i' wartosci stałe: i=0; i=1; i=2; wtedy bitmapy wyswietlają się ok.
gdzie jest błąd. gdy jedna tablica przechowuje adresy innych tablic.
przyznaje że wskaźniki są trudne. no może na tym przykładzie uda mi się to zrozumieć.
z góry dzięki za pomoc. pozdrawiam.
Kod:
#include <Tiny4kOLED.h>
// '0', 24x32px
const unsigned char znak_0 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0xf0, 0xfc, 0xfe, 0xff, 0xfe, 0xf8,
0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf8, 0xfe, 0xfe, 0x7f,
0x3f, 0x07, 0x87, 0xc7, 0xe3, 0xc7, 0x0f, 0x7f, 0xff, 0xff, 0xfe, 0xfc, 0xf0, 0xc0, 0x00, 0x00,
0x03, 0x07, 0x0f, 0x0f, 0x1f, 0xff, 0xff, 0xfe, 0xf8, 0xf3, 0x47, 0x8f, 0x0f, 0x0f, 0xc3, 0xe0,
0xf0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x07,
0x0f, 0x1f, 0x3f, 0x7f, 0xff, 0xff, 0x7f, 0x3f, 0x01, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00
};
// '1', 6x32px
const unsigned char znak_1 [] PROGMEM = {
0x02, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xf1, 0xff, 0xff, 0xff, 0xfc, 0x00, 0xe3, 0xf7, 0xff,
0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff
};
// '2', 18x32px
const unsigned char znak_2 [] PROGMEM = {
0x70, 0x78, 0xfe, 0xff, 0xff, 0x7f, 0x7f, 0x7e, 0x7c, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xf7, 0xff, 0xff, 0xff,
0xff, 0x7f, 0x1e, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xf0, 0xfc, 0xff, 0xff, 0xff, 0x3f,
0x1f, 0x07, 0x01, 0x00, 0x00, 0x00, 0xe0, 0xe0, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1d,
0xf9, 0xfc, 0xfc, 0x7c, 0x7c, 0xfc, 0xec, 0x00
};
unsigned char *const wybierak[] PROGMEM = {znak_0,znak_1,znak_2};
const byte znakSzerokosc[] = {24,6,18};
unsigned int pamiec,adres,i=0,matryca;
byte szerokosc;
void setup() {
oled.begin();
oled.clear();
oled.switchRenderFrame();
oled.on();
}
void loop() {
oled.clear();
//i=2;
matryca= wybierak[i];
szerokosc= znakSzerokosc[i];
oled.bitmap(0,0,szerokosc,4,matryca);
oled.switchFrame();
delay(250);
i++;
if (i==3) i=0;
}