#include #include // BG driver IC SSD1306, 0.91 inch OLED, 128x32, IIC, white, Vcc 3.3-5V, // SSD1306 by Alexey Dynda Arduino library #define W 128 #define H 32 uint8_t d_buffer[W*H/8]; void setup() { ssd1306_128x32_i2c_init(); // ssd1306_displayOn(); } void loop() { NanoCanvas d_canvas(W,H, d_buffer); ssd1306_clearScreen(); d_canvas.clear(); d_canvas.drawRect(0,0, W-1, H-1); // putPixel is OK: for(int x = 0; x> 3) << M_P) #define BADDR(b) ((b) << M_P) uint8_t m_invertByte = 0; uint8_t m_w = W; uint8_t m_h = H; uint8_t *m_bytes = d_buffer; void xfillRect(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, uint8_t templ) { templ ^= m_invertByte; if ((x1 < x2) && (x1 >= m_w)) return; if ((y1 < y2) && (y1 >= m_h)) return; if (x1 > x2) x1 = 0; if (y1 > y2) y1 = 0; if (x2 >= m_w) x2 = m_w -1; if (y2 >= m_h) y2 = m_h -1; uint8_t bank1 = (y1 >> 3); uint8_t bank2 = (y2 >> 3); for (uint8_t bank = bank1; bank<=bank2; bank++) { uint8_t mask = 0xFF; if (bank1 == bank2) { //mask = (mask >> ((y1 & 7) + 7 - (y2 & 7))) << (7 - (y2 & 7)); // <--- nano_gfx.cpp line #92 // here comes the fixed mask mask = (mask >> ((y1 & 7) + 7 - (y2 & 7))) << (y1 & 7); } else if (bank1 == bank) { mask = (mask << (y1 & 7)); } else if (bank2 == bank) { mask = (mask >> (7 - (y2 & 7))); } for (uint8_t x=x1; x