I am using nrf52832 and I am trying to interface OLED with it. I am attaching the code below and i referred that code from https://github.com/devdprj/olednrf here,
i made the changes because it has some file missing. I am not getting any character on display and it remains blank. I tried to change address but doesnt works.
#include <stdio.h>
#include "nrf_drv_twi.h"
#include "nrf_delay.h"
#include "i22c.h"
#include "ssd1306.h"
#include "binary.h"
extern uint8_t time_buffer[128];
#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH 16
static const unsigned char /*PROGMEM*/ logo16_glcd_bmp[] = {
B00000000, B11000000,
B00000001, B11000000,
B00000001, B11000000,
B00000011, B11100000,
B11110011, B11100000,
B11111110, B11111000,
B01111110, B11111111,
B00110011, B10011111,
B00011111, B11111100,
B00001101, B01110000,
B00011011, B10100000,
B00111111, B11100000,
B00111111, B11110000,
B01111100, B11110000,
B01110000, B01110000,
B00000000, B00110000
};
void testdrawchar(void)
{
ssd1306_clear_display();
ssd1306_set_textsize(1);
ssd1306_set_textcolor(WHITE);
ssd1306_set_cursor(0, 0);
for (uint8_t i = 0; i < 168; i++) {
if (i == '\n') continue;
ssd1306_write(i);
if ((i > 0) && (i % 21 == 0))
ssd1306_write('\n');
}
ssd1306_display();
}
void testdrawline(void)
{
for (int16_t i = 0; i < ssd1306_width(); i += 4) {
ssd1306_draw_line(0, 0, i, ssd1306_height() - 1, WHITE);
ssd1306_display();
}
for (int16_t i = 0; i < ssd1306_height(); i += 4) {
ssd1306_draw_line(0, 0, ssd1306_width() - 1, i, WHITE);
ssd1306_display();
}
nrf_delay_ms(250);
ssd1306_clear_display();
for (int16_t i = 0; i < ssd1306_width(); i += 4) {
ssd1306_draw_line(0, ssd1306_height() - 1, i, 0, WHITE);
ssd1306_display();
}
for (int16_t i = ssd1306_height() - 1; i >= 0; i -= 4) {
ssd1306_draw_line(0, ssd1306_height() - 1, ssd1306_width() - 1, i, WHITE);
ssd1306_display();
}
nrf_delay_ms(250);
ssd1306_clear_display();
for (int16_t i = ssd1306_width() - 1; i >= 0; i -= 4) {
ssd1306_draw_line(ssd1306_width() - 1, ssd1306_height() - 1, i, 0, WHITE);
ssd1306_display();
}
for (int16_t i = ssd1306_height() - 1; i >= 0; i -= 4) {
ssd1306_draw_line(ssd1306_width() - 1, ssd1306_height() - 1, 0, i, WHITE);
ssd1306_display();
}
nrf_delay_ms(250);
ssd1306_clear_display();
for (int16_t i = 0; i < ssd1306_height(); i += 4) {
ssd1306_draw_line(ssd1306_width() - 1, 0, 0, i, WHITE);
ssd1306_display();
}
for (int16_t i = 0; i < ssd1306_width(); i += 4) {
ssd1306_draw_line(ssd1306_width() - 1, 0, i, ssd1306_height() - 1, WHITE);
ssd1306_display();
}
nrf_delay_ms(250);
ssd1306_display();
nrf_delay_ms(250);
ssd1306_clear_display();
}
void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h)
{
#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
uint8_t icons[NUMFLAKES][3];
// initialize
for (uint8_t f = 0; f < NUMFLAKES; f++) {
icons[f][XPOS] = rand() % ssd1306_width();
icons[f][YPOS] = 0;
icons[f][DELTAY] = (rand() % 5) + 1;
}
while (1) {
// draw each icon
for (uint8_t f = 0; f < NUMFLAKES; f++) {
ssd1306_draw_bitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, WHITE);
}
ssd1306_display();
nrf_delay_ms(200);
// then erase it + move it
for (uint8_t f = 0; f < NUMFLAKES; f++) {
ssd1306_draw_bitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, BLACK);
// move it
icons[f][YPOS] += icons[f][DELTAY];
// if its gone, reinit
if (icons[f][YPOS] > ssd1306_height()) {
icons[f][XPOS] = rand() % ssd1306_width();
icons[f][YPOS] = 0;
icons[f][DELTAY] = (rand() % 5) + 1;
}
}
}
}
int main(void)
{
twi_init();
ssd1306_begin(SSD1306_SWITCHCAPVCC, SSD1306_I2C_ADDRESS, false);
nrf_delay_ms(1000);
ssd1306_display();
nrf_delay_ms(1000);
testdrawline();
while (true)
{
ssd1306_clear_display();
// draw a single pixel
ssd1306_draw_pixel(10, 10, WHITE);
ssd1306_display();
nrf_delay_ms(500);
ssd1306_draw_circle(SSD1306_LCDWIDTH / 2, SSD1306_LCDHEIGHT / 2, 30, WHITE);
ssd1306_display();
nrf_delay_ms(500);
testdrawchar();
nrf_delay_ms(500);
ssd1306_clear_display();
ssd1306_display();
nrf_delay_ms(500);
testdrawline();
ssd1306_clear_display();
ssd1306_draw_bitmap(30, 16, logo16_glcd_bmp, 16, 16, 1);
ssd1306_display();
nrf_delay_ms(500);
// draw a bitmap icon and 'animate' movement
testdrawbitmap(logo16_glcd_bmp, LOGO16_GLCD_HEIGHT, LOGO16_GLCD_WIDTH);
}
}