I2C OLED 加粗五角星绘制
- 开发板esp8266 Nodemcu1.0
- 1.3寸oled屏幕(保留0.96寸屏幕调用接口)
#include "SH1106Wire.h"
#include "OLEDDisplayUi.h"
#if defined(ESP8266)
const int SDA_PIN = D2;
const int SDC_PIN = D1;
#else
const int SDA_PIN = D1;
const int SCL = D2;
#endif
const int I2C_DISPLAY_ADDRESS = 0x3c;
SH1106Wire display(I2C_DISPLAY_ADDRESS, SDA_PIN, SDC_PIN);
OLEDDisplayUi ui ( &display );
void OLED_DrawLine(int x1,int y1,int x2,int y2);
void setup() {
Serial.begin(115200);
randomSeed(analogRead(0));
display.init();
display.clear();
display.display();
display.setContrast(240);
delay(1000);
ui.setTargetFPS(80);
ui.disableAllIndicators();
ui.enableAutoTransition();
ui.setFrameAnimation(SLIDE_LEFT);
ui.enableAutoTransition();
ui.setAutoTransitionForwards();
ui.setTimePerFrame(5000);
ui.setTimePerTransition(500);
ui.init();
void loop()
{
OLED_DrawLine(63, 0, 86, 63);
OLED_DrawLine( 63, 0,40, 64);
OLED_DrawLine( 25, 23,86, 63);
OLED_DrawLine(25, 23, 101, 23);
OLED_DrawLine( 101, 23,40, 64);
delay(1200);
display.clear();
}
void OLED_DrawLine(int x1,int y1,int x2,int y2)
{
unsigned int t;
int xerr=0,yerr=0,delta_x,delta_y,distance;
int incx,incy,uRow,uCol;
delta_x=x2-x1;
delta_y=y2-y1;
uRow=x1;
uCol=y1;
if(delta_x>0)incx=1;
else if (delta_x==0)incx=0;
else {incx=-1;delta_x=-delta_x;}
if(delta_y>0)incy=1;
else if (delta_y==0)incy=0;
else {incy=-1;delta_y=-delta_x;}
if(delta_x>delta_y)distance=delta_x;
else distance=delta_y;
for(t=0;t<distance+1;t++)
{
display.fillCircle(uRow ,uCol, 2);
display.display(); delay(50);
xerr+=delta_x;
yerr+=delta_y;
if(xerr>distance)
{
xerr-=distance;
uRow+=incx;
}
if(yerr>distance)
{
yerr-=distance;
uCol+=incy;
}
}
}