• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
zrozumienie nie działania tego programu...
#1
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.





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;
    }
 
Odpowiedź
  


Wiadomości w tym wątku
zrozumienie nie działania tego programu... - przez przemo.bundy - 22-05-2020, 07:37

Skocz do:


Przeglądający: 1 gości