天天看點

玩轉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();
}
           

繼續閱讀