Arduino画圣诞树(精修版)

简介: Arduino画圣诞树(精修版)

Arduino画圣诞树

上年圣诞节的时候,好友发了很多的圣诞树,pyq里到处都是

当然,在色彩斑斓的手机屏幕前,还坐着数不清的单身狗们

甚至有些激进分子当起了砍树先锋

刚好,期末前最后的大作业是用Arduino调用Adafruit_GFX库来画画,所以当时就想了想,还是画个简易版的圣诞树吧。

回归正题!!!

首先介绍一下Adafruit_GFX

Adafruit_GFX是一个强大的图形库,它为我们所有的LCD和OLED显示器提供了通用语法和一组图形功能。这使得我们可以在不同的图形之间转换,也可以在简单的或者是复杂的形式间进行转换。甚至是新的特性,或者是性能的改进以及故障查找都可以马上显示的彩色的图形显示器上。


具体如何在Arduino中导入这个库,就不多介绍了。

接着我们在它的库文件中加入一个新的方法——画圣诞树

首先,我们来到它的库文件夹下,找到这两个文件:

Adafruit_GFX.cpp 和 Adafruit_GFX.h

接着,我们在Adafruit_GFX.h文件中申明一条全局方法(之后在Arduino中直接调用Adafruit_GFX.h库后,可以直接使用该方法)

然后,我们在Adafruit_GFX.cpp中实现该方法:

//Draw a tree
void Adafruit_GFX::drawTree(uint16_t color){
  int a1_x = 64;
  int a1_y = 4;
  int b1_x = 60;
  int b1_y = 8;
  int c1_x = 68;
  int c1_y = 8;
  drawLine(a1_x , a1_y , b1_x, b1_y, color);
  drawLine(a1_x , a1_y , c1_x, c1_y, color);
  drawLine(b1_x , b1_y , c1_x, c1_y, color);
  int a2_x = 64;
  int a2_y = 8;
  int b2_x = 56;
  int b2_y = 16;
  int c2_x = 72;
  int c2_y = 16;
  drawLine(a2_x , a2_y , b2_x, b2_y, color);
  drawLine(a2_x , a2_y , c2_x, c2_y, color);
  drawLine(b2_x , b2_y , c2_x, c2_y, color);
  int a3_x = 64;
  int a3_y = 16;
  int b3_x = 50;
  int b3_y = 26;
  int c3_x = 78;
  int c3_y = 26;
  drawLine(a3_x , a3_y , b3_x, b3_y, color);
  drawLine(a3_x , a3_y , c3_x, c3_y, color);
  drawLine(b3_x , b3_y , c3_x, c3_y, color);
  int a4_x = 64;
  int a4_y = 26;
  int b4_x = 44;
  int b4_y = 40;
  int c4_x = 84;
  int c4_y = 40;
  drawLine(a4_x , a4_y , b4_x, b4_y, color);
  drawLine(a4_x , a4_y , c4_x, c4_y, color);
  drawLine(b4_x , b4_y , c4_x, c4_y, color);
  int aa_x = 60;
  int aa_y = 40;
  int bb_x = 68;
  int bb_y = 40;
  int cc_x = 60;
  int cc_y = 50;
  int dd_x = 68;
  int dd_y = 50;
  drawLine(aa_x , aa_y , cc_x, cc_y, color);
  drawLine(bb_x , bb_y , dd_x, dd_y, color);
  drawLine(cc_x , cc_y , dd_x, dd_y, color);  
}

该圣诞树是采用三角形和矩形的结合,其中(a_x,a_y),(b_x,b_y),(c_x,c_y)为三角形的三个点坐标,aa,bb,cc,dd则是底部矩形的坐标。

最后在Arduino中调用实现:

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH  128
#define SCREEN_HEIGHT 64
#define OLED_MOSI     11
#define OLED_CLK      13
#define OLED_DC        9
#define OLED_CS       10
#define OLED_RESET     8
Adafruit_SSD1306 ssd(SCREEN_WIDTH, SCREEN_HEIGHT,
  OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
void setup() {
  if(!ssd.begin(SSD1306_SWITCHCAPVCC)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
}
void loop() {
  ssd.clearDisplay();
  //画圣诞树
  ssd.drawTree(SSD1306_WHITE);
  ssd.display();
  delay(2000);
}

此时的OLED屏如下:

这里我花了几分钟的时间画了一个可以看出是树的圣诞树哈哈哈,当然,你们可以稍微费点时间实现更好看更花哨的圣诞树。

相关文章
|
3月前
|
算法 定位技术 C语言
51单片机实现俄罗斯方块游戏编程
设计了一款基于AT89C51单片机的俄罗斯方块游戏机,使用LCD12864液晶显示,按键控制方块移动与变形。游戏中,7种不同形状的方块随机下落,填满一行得分,满屏则游戏结束。包含电源、单片机最小系统、LCD和按键模块的硬件电路通过Proteus进行了仿真,展示了游戏运行、得分和计时等。代码部分展示了检查碰撞和更新地图的函数。
61 1
|
3月前
|
传感器 人工智能 IDE
探索电子技术的魅力:使用Arduino实现LED闪
探索电子技术的魅力:使用Arduino实现LED闪
|
10月前
|
编解码 网络性能优化 芯片
如何用51单片机实现pwm调光+呼吸灯(超详细+源码)
如何用51单片机实现pwm调光+呼吸灯(超详细+源码)
652 0
如何用51单片机实现pwm调光+呼吸灯(超详细+源码)
|
芯片
蓝桥杯嵌入式之 LED 闪烁
蓝桥杯嵌入式之 LED 闪烁
241 0
stm32f407探索者开发板(四)——点亮跑马灯(库函数)
stm32f407探索者开发板(四)——点亮跑马灯(库函数)
155 0
stm32f407探索者开发板(四)——点亮跑马灯(库函数)
|
存储 异构计算
|
编解码 算法 IDE
基于单片机的俄罗斯方块游戏机设计
本设计是通过STC89S52单片机来实现俄罗斯方块游戏的设计,使用C语言进行编程,并通过Proteus来进行仿真。本设计要实现的基本功能是:应用按键来控制方块的变换与移动;消除一行并计分;消除多行额外奖励记分,方块堆满时结束游戏等俄罗斯方块的基本功能。
基于单片机的俄罗斯方块游戏机设计
基于单片机的贪吃蛇游戏
贪吃蛇游戏的规则是:玩家通过四个方向键来控制蛇的移动,控制其在地图上吃豆子。吃掉豆子后蛇身相应加长,蛇身速度加快。蛇运动过程中撞到墙壁或蛇身,则立即结束游戏。