数码之家

 找回密码
 立即注册
搜索
查看: 12852|回复: 16

[Arduino] Adafruit_GFX驱动ILI9341 2.4寸并口屏

[复制链接]
发表于 2019-8-29 15:58:08 来自手机浏览器 | 显示全部楼层 |阅读模式
本帖最后由 wei27311 于 2019-8-31 12:56 编辑

买这屏的时候不知道只支持并口
回来要把之前的程序Ucglib库改成Adafruit_GFX库
这库要搭配MCUFRIEND_kbv库一起使用
才能驱动这个并口屏
感觉没Ucglib库那么好用
所以买屏幕最好选SPI接口
这屏幕唯一优势是可以直接插入Arduino UNO R3
不然接线都很麻烦


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 2家元 +120 收起 理由
人艰不拆了 + 20
家睦 + 100

查看全部打赏

 楼主| 发表于 2019-8-29 16:01:47 | 显示全部楼层
本帖最后由 wei27311 于 2019-8-31 12:59 编辑
  1. #include <dht11.h>
  2. #define DHT11PIN 13 //DHT11 data接13引脚
  3. dht11 DHT11;
  4. #include "Adafruit_GFX.h"// Hardware-specific library
  5. #include <MCUFRIEND_kbv.h>

  6. #define LCD_CS A3 // Chip Select goes to Analog 3
  7. #define LCD_CD A2 // Command/Data goes to Analog 2
  8. #define LCD_WR A1 // LCD Write goes to Analog 1
  9. #define LCD_RD A0 // LCD Read goes to Analog 0
  10. #define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin

  11. MCUFRIEND_kbv ucg;

  12. #define BLACK   0x0000
  13. #define BLUE    0x001F
  14. #define RED     0xF800
  15. #define GREEN   0x07E0
  16. #define CYAN    0x07FF
  17. #define MAGENTA 0xF81F
  18. #define YELLOW  0xFFE0
  19. #define WHITE   0xFFFF

  20. //外圈仪表
  21. void draw(int value)
  22. {
  23.   int cx = 160;  //圆心x
  24.   int cy = 120;  //圆心y
  25.   int cr = 119;  //圆半径r
  26.   float angle;  //数值转换指针偏转角度
  27.   float rad;  //指针偏转角度转换弧度
  28.   
  29.   //仪表刻度
  30.   for(int i=0;i<=100;i+=10)
  31.   {
  32.     angle = 150+i*2.4;  
  33.     rad = angle/180*PI;     
  34.     if(i==0||i==20||i==40||i==60||i==80||i==100)
  35.     {
  36.       //刻度线
  37.       ucg.drawLine(cx+(cr-15)*cos(rad),cy+(cr-15)*sin(rad),cx+(cr-5)*cos(rad),cy+(cr-5)*sin(rad),WHITE);
  38.       //刻度数值
  39.       ucg.setTextSize(2);
  40.       ucg.setTextColor(WHITE);
  41.       ucg.setCursor((cx-10)+(cr-35)*cos(rad),(cy-8)+(cr-35)*sin(rad));
  42.       ucg.print(int(i));
  43.     }
  44.     else
  45.     {
  46.       //刻度线
  47.       ucg.drawLine(cx+(cr-15)*cos(rad),cy+(cr-15)*sin(rad),cx+(cr-5)*cos(rad),cy+(cr-5)*sin(rad),WHITE);      
  48.     }
  49.   }
  50.   
  51.   //仪表外圆加粗5像素
  52.   for(int i=0;i<=4;i++)
  53.   {
  54.     ucg.drawCircle(cx,cy,(cr-i),WHITE);
  55.   }

  56.   //指针轨迹
  57.   for(float i=150;i<150+value*2.4;i++)
  58.   {
  59.     rad = i/180*PI;
  60.     ucg.drawLine(cx+(cr-10)*cos(rad),cy+(cr-10)*sin(rad),cx+(cr-5)*cos(rad),cy+(cr-5)*sin(rad),CYAN);     
  61.   }
  62.   
  63.   //指针
  64.   for(int i=0;i<=5;i++)
  65.   {
  66.     angle = 150+value*2.4;
  67.     ucg.drawLine(cx+(cr-69)*cos((angle-i)/180*PI),cy+(cr-69)*sin((angle-i)/180*PI),cx+(cr-5)*cos(rad),cy+(cr-5)*sin(rad),CYAN);
  68.     ucg.drawLine(cx+(cr-69)*cos((angle+i)/180*PI),cy+(cr-69)*sin((angle+i)/180*PI),cx+(cr-5)*cos(rad),cy+(cr-5)*sin(rad),CYAN);  
  69.   }   

  70.   //显示数值
  71.   ucg.setTextSize(3);
  72.   ucg.setTextColor(WHITE);
  73.   ucg.setCursor((cx-15),(cy+70));
  74.   ucg.print("RH");
  75. }

  76. //内圈仪表
  77. void draw2(int value) {
  78.   int cx = 160;  //圆心x
  79.   int cy = 120;  //圆心y
  80.   int cr = 50;  //圆半径r

  81.   //内圆显示数值
  82.   ucg.setTextSize(3);
  83.   ucg.setTextColor(WHITE);
  84.   ucg.setCursor((cx-25),(cy-10));
  85.   ucg.print(value);
  86.   ucg.setCursor((cx+15),(cy-10));
  87.   ucg.print("C");
  88.   
  89.   //仪表外圆加粗5像素
  90.   for(int i=0;i<=4;i++)
  91.   {
  92.     ucg.drawCircle(cx,cy,(cr-i),CYAN);
  93.   }
  94. }

  95. void setup()
  96. {
  97.   pinMode(DHT11PIN,OUTPUT);  
  98.   ucg.begin(0x9341); //ILI9341
  99.   ucg.setRotation(3); //屏幕旋转270度
  100.   ucg.fillRect(0,0,320,240,BLACK);  //填充屏幕背景颜色
  101. }

  102. void loop()
  103. {
  104.   int chk = DHT11.read(DHT11PIN); //将读取到的值赋给chk
  105.   int tem=(float)DHT11.temperature; //将温度值赋值给tem
  106.   int hum=(float)DHT11.humidity;   //将湿度值赋值给tem
  107.   ucg.fillCircle(160,120,119,BLACK);  //局部清屏
  108.   draw2(tem);
  109.   draw(hum);
  110.   delay(2000);  //2秒刷新一次
  111. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 1家元 +20 收起 理由
200birds + 20

查看全部打赏

回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-29 16:04:15 | 显示全部楼层
  1. #include <dht11.h>
  2. #define DHT11PIN 13 //DHT11 data接13引脚
  3. dht11 DHT11;
  4. #include "Adafruit_GFX.h"// Hardware-specific library
  5. #include <MCUFRIEND_kbv.h>

  6. #define LCD_CS A3 // Chip Select goes to Analog 3
  7. #define LCD_CD A2 // Command/Data goes to Analog 2
  8. #define LCD_WR A1 // LCD Write goes to Analog 1
  9. #define LCD_RD A0 // LCD Read goes to Analog 0
  10. #define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin

  11. MCUFRIEND_kbv ucg;

  12. #define BLACK   0x0000
  13. #define BLUE    0x001F
  14. #define RED     0xF800
  15. #define GREEN   0x07E0
  16. #define CYAN    0x07FF
  17. #define MAGENTA 0xF81F
  18. #define YELLOW  0xFFE0
  19. #define WHITE   0xFFFF

  20. //左边仪表
  21. void draw(int value) {
  22.   int cx = 77;  //圆心x
  23.   int cy = 120;  //圆心y
  24.   int cr = 75;  //圆半径r
  25.   float angle;  //数值转换指针偏转角度
  26.   float rad;  //指针偏转角度转换弧度
  27.   
  28.   //仪表刻度
  29.   for(int i=0;i<=100;i+=2){
  30.     angle = 150+i*2.4;  
  31.     rad = angle/180*PI;     
  32.     if(i==0 ||i==20 ||i==40 ||i==60 ||i==80 ||i==100)
  33.     {
  34.       //刻度线
  35.       ucg.drawLine(cx+(cr-13)*cos(rad),cy+(cr-13)*sin(rad),cx+(cr-3)*cos(rad),cy+(cr-3)*sin(rad),WHITE);
  36.       //刻度数值
  37.       ucg.setTextSize(2);
  38.       ucg.setTextColor(WHITE);
  39.       ucg.setCursor((cx-10)+(cr-33)*cos(rad),(cy-8)+(cr-33)*sin(rad));
  40.       ucg.print(int(i));
  41.     }
  42.     else if(i==10 ||i==30 ||i==50 ||i==70 ||i==90)
  43.     {
  44.       //刻度线
  45.       ucg.drawLine(cx+(cr-13)*cos(rad),cy+(cr-13)*sin(rad),cx+(cr-3)*cos(rad),cy+(cr-3)*sin(rad),WHITE);
  46.     }
  47.     else
  48.     {
  49.       //刻度线
  50.       ucg.drawLine(cx+(cr-8)*cos(rad),cy+(cr-8)*sin(rad),cx+(cr-3)*cos(rad),cy+(cr-3)*sin(rad),WHITE);      
  51.     }
  52.   }
  53.   
  54.   //仪表外圆
  55.   ucg.drawCircle(cx,cy,cr,BLUE);
  56.   ucg.drawCircle(cx,cy,(cr-1),BLUE);
  57.   ucg.drawCircle(cx,cy,(cr-2),BLUE);

  58.   //仪表指针及轨迹
  59.   for(float i=0;i<=value;i+=0.25)
  60.   {
  61.     angle = 150+i*2.4;  
  62.     rad = angle/180*PI;     
  63.     if(i<value)
  64.     {
  65.       ucg.drawLine(cx+(cr-8)*cos(rad),cy+(cr-8)*sin(rad),cx+(cr-3)*cos(rad),cy+(cr-3)*sin(rad),WHITE);
  66.     }
  67.     else
  68.     {
  69.       ucg.drawLine(cx+(cr-60)*cos(rad),cy+(cr-60)*sin(rad),cx+(cr-3)*cos(rad),cy+(cr-3)*sin(rad),BLUE);     
  70.     }
  71.   }

  72.   //仪表中心小圆
  73.   ucg.fillCircle(cx,cy,(cr-60),BLUE);

  74.   //中心小圆符号
  75.   ucg.setTextSize(2);
  76.   ucg.setTextColor(WHITE);
  77.   ucg.setCursor((cx-5),(cy-7));
  78.   ucg.print("H");
  79. }

  80. //右边仪表
  81. void draw2(int value) {
  82.   int cx = 243;  //圆心x
  83.   int cy = 120;  //圆心y
  84.   int cr = 75;  //圆半径r
  85.   float angle;  //数值转换指针偏转角度
  86.   float rad;  //指针偏转角度转换弧度
  87.   
  88.   //仪表刻度
  89.   for(int i=0;i<=50;i+=1){
  90.     angle = i*4.8+150;
  91.     rad = angle/180*PI;
  92.     if(i==0 ||i==10 ||i==20 ||i==30 ||i==40 ||i==50)
  93.     {
  94.       //刻度线
  95.       ucg.drawLine(cx+(cr-18)*cos(rad),cy+(cr-18)*sin(rad),cx+(cr-3)*cos(rad),cy+(cr-3)*sin(rad),WHITE);
  96.       //刻度数值
  97.       ucg.setTextSize(2);
  98.       ucg.setTextColor(WHITE);
  99.       ucg.setCursor((cx-10)+(cr-33)*cos(rad),(cy-8)+(cr-33)*sin(rad));
  100.       ucg.print(i);
  101.     }
  102.     else if(i==5 ||i==15 ||i==25 ||i==35 ||i==45)
  103.     {
  104.       //刻度线
  105.       ucg.drawLine(cx+(cr-13)*cos(rad),cy+(cr-13)*sin(rad),cx+(cr-3)*cos(rad),cy+(cr-3)*sin(rad),WHITE);
  106.     }
  107.     else
  108.     {
  109.       //刻度线
  110.       ucg.drawLine(cx+(cr-8)*cos(rad),cy+(cr-8)*sin(rad),cx+(cr-3)*cos(rad),cy+(cr-3)*sin(rad),WHITE);      
  111.     }
  112.   }
  113.   
  114.   //仪表外圆
  115.   ucg.drawCircle(cx,cy,cr,RED);
  116.   ucg.drawCircle(cx,cy,(cr-1),RED);
  117.   ucg.drawCircle(cx,cy,(cr-2),RED);
  118.    
  119.   //仪表指针及轨迹
  120.   for(float i=0;i<=value;i+=0.25)
  121.   {
  122.     angle = 150+i*4.8;  
  123.     rad = angle/180*PI;     
  124.     if(i<value)
  125.     {
  126.       ucg.drawLine(cx+(cr-8)*cos(rad),cy+(cr-8)*sin(rad),cx+(cr-3)*cos(rad),cy+(cr-3)*sin(rad),WHITE);
  127.     }
  128.     else
  129.     {
  130.       ucg.drawLine(cx+(cr-60)*cos(rad),cy+(cr-60)*sin(rad),cx+(cr-3)*cos(rad),cy+(cr-3)*sin(rad),RED);
  131.     }
  132.   }

  133.   //仪表中心小圆
  134.   ucg.fillCircle(cx,cy,(cr-60),RED);

  135.   //中心小圆符号
  136.   ucg.setTextSize(2);
  137.   ucg.setTextColor(WHITE);
  138.   ucg.setCursor((cx-5),(cy-7));
  139.   ucg.print("T");
  140. }

  141. void setup()
  142. {
  143.   pinMode(DHT11PIN,OUTPUT);  
  144.   ucg.begin(0x9341); //ILI9341
  145.   ucg.setRotation(3); //屏幕旋转270度
  146. }

  147. void loop()
  148. {
  149.   int chk = DHT11.read(DHT11PIN); //将读取到的值赋给chk
  150.   int tem=(float)DHT11.temperature; //将温度值赋值给tem
  151.   int hum=(float)DHT11.humidity;   //将湿度值赋值给tem
  152.   ucg.fillScreen(BLACK);  //清屏
  153.   draw(hum);
  154.   draw2(tem);
  155.   delay(5000); //5秒刷新一次
  156. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2019-8-29 16:30:53 | 显示全部楼层
表盘还能嵌套挺好看的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-29 16:48:15 来自手机浏览器 | 显示全部楼层
chenlei1910 发表于 2019-8-29 16:30
表盘还能嵌套挺好看的

这个是模仿一些汽车的全液晶仪表盘
可惜刷新率太低了只能几秒刷新一次
回复 支持 反对

使用道具 举报

发表于 2020-4-5 22:09:13 | 显示全部楼层
w我也搞了一个这玩意真他妈难弄,一直没点亮,下去找找库,楼主给个建议吧
回复 支持 反对

使用道具 举报

发表于 2020-4-5 23:10:14 | 显示全部楼层
我咋编译错误啊???
回复 支持 反对

使用道具 举报

发表于 2020-4-5 23:17:19 | 显示全部楼层
wei27311 发表于 2019-8-29 16:48
这个是模仿一些汽车的全液晶仪表盘
可惜刷新率太低了只能几秒刷新一次

SPI驱动彩屏不慢才怪
回复 支持 反对

使用道具 举报

发表于 2020-4-8 11:56:21 | 显示全部楼层
zxy882266 发表于 2020-4-5 22:09
w我也搞了一个这玩意真他妈难弄,一直没点亮,下去找找库,楼主给个建议吧 ...

先弄画点和画线吧,库有时编译一堆错误,需要一点一点排错
回复 支持 反对

使用道具 举报

发表于 2020-4-9 08:40:00 | 显示全部楼层
595953427@qq 发表于 2020-4-5 23:17
SPI驱动彩屏不慢才怪

看来你是没i用过SPI啊,惭愧
回复 支持 反对

使用道具 举报

发表于 2020-4-9 08:42:46 | 显示全部楼层
我一直没搞懂这玩意到底用的是啥IC?卖家说9225,我看到好多人说是9431,更还有别的说法,手里的屏都搞定了,就这个一直不行
回复 支持 反对

使用道具 举报

发表于 2020-4-9 08:44:52 | 显示全部楼层
这是国外搜到的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2020-4-9 09:11:04 | 显示全部楼层
zxy882266 发表于 2020-4-9 08:40
看来你是没i用过SPI啊,惭愧

天天在用,驱动单色屏,FLASH,TF卡用SPI,彩屏用并口
回复 支持 反对

使用道具 举报

发表于 2020-4-9 10:20:44 | 显示全部楼层
看看我的SPI,这速度慢了就没有快的屏了,过去的老东西就不要提了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2020-4-23 08:28:22 | 显示全部楼层
并口屏到MCU之间,有接口片子,用到RT8875,或者SSD1963,还是什么其他的方案

我有个RGB接口的裸屏,想点亮
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-2 13:10:50 | 显示全部楼层
zxy882266 发表于 2020-4-5 22:09
w我也搞了一个这玩意真他妈难弄,一直没点亮,下去找找库,楼主给个建议吧 ...

确定屏幕是好的话应该是复位的问题,有些库不包含复位脚的操作。最好认真阅读下屏幕的手册。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-6 08:32 , Processed in 0.280801 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表