天天看点

玩转OLED,U8g2动画,增长数字和随机三角形等1.动态数字显示2.三角形的绘制3.屏幕关闭效果

1.动态数字显示

从逻辑上来说,就是绘制一个实心方块,遮挡上一次绘制的内容,然后再绘制这一次的。

//动画数字效果
void dynamicNum(int x, int y, int num)
{
  int i;
  for (i = 0; i < num; i++)
  {
    u8g2.setDrawColor(0);
    u8g2.drawBox(x, 10, 60, 60);
    u8g2.setCursor(x, y);
    u8g2.setDrawColor(1);
    u8g2.print(i);
    u8g2.drawBox(0, 63 - 3, (127 / 100) * i, 3);
    u8g2.sendBuffer();
    delay(2);
  }
}
           

2.三角形的绘制

这一个算法就是画一个等边三角形,本来是这样的,但我加了伪随机数,于是就变成了一个乱飞的三角形

random(int i)函数,用于生成从0到i的一个数字

void animateG(int x, int y, int r)
{

  int rd1 = random(2);
  int rd2 = random(3);
  int rd3 = random(3);
  int rd4 = random(3);
  int rd5 = random(3);
  int rd6 = random(2);
  u8g2.drawLine(x * rd1, (y - r * 2 / 3) * rd2, (x + r / sqrt(3)) * rd3, (y + r / 3) * rd4);
  u8g2.drawLine((x + r / sqrt(3)) * rd3, (y + r / 3) * rd4, (x - r / sqrt(3)) * rd5, (y + r / 3) * rd6);
  u8g2.drawLine((x - r / sqrt(3)) * rd5, (y + r / 3) * rd6, x * rd1, (y - r * 2 / 3) * rd2);
}
           

3.屏幕关闭效果

类似老电视的那种显像管失电后十字关闭的效果,我是想模仿这个的。

void close()
{
  u8g2.clear();
  u8g2.drawBox(0, 63 / 2 - 3, 127, 6);
  u8g2.drawBox(127 / 2 - 3, 0, 6, 63);
  u8g2.sendBuffer();
  delay(3);
  u8g2.clear();
  u8g2.drawBox(0, 63 / 2 - 2, 127, 4);
  u8g2.drawBox(127 / 2 - 2, 0, 4, 63);
  u8g2.sendBuffer();
  delay(3);
  u8g2.clear();
  u8g2.drawBox(0, 63 / 2 - 1, 127, 2);
  u8g2.drawBox(127 / 2 - 1, 0, 2, 63);
  u8g2.sendBuffer();
  delay(3);
  u8g2.clear();
}
           

继续阅读