ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Arduino画圣诞树(精修版)

2022-03-03 09:31:20  阅读:220  来源: 互联网

标签:Adafruit drawLine Arduino int GFX color OLED 精修 圣诞树


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屏如下:
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

标签:Adafruit,drawLine,Arduino,int,GFX,color,OLED,精修,圣诞树
来源: https://blog.csdn.net/ws15168689087/article/details/123242171

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有