iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >如何实现温度传感器和OLED
  • 146
分享到

如何实现温度传感器和OLED

2024-04-02 19:04:59 146人浏览 八月长安
摘要

本篇内容主要讲解“如何实现温度传感器和OLED”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何实现温度传感器和OLED”吧!1. OLED驱动2. 温湿度传感

本篇内容主要讲解“如何实现温度传感器和OLED”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何实现温度传感器和OLED”吧!

1. OLED驱动

2. 温湿度传感器AHT20驱动

3. 画表盘

由于表盘是半个圆,而且一般是从9点钟方向开始,顺指针旋转,与实际的温度值相对应,9点钟对应最小值,3点钟对应最大值,

因此我们画表盘的时候最好从9点钟对应的角度为0, 12点钟对应的角度90度,3点钟对应的角度为180度。

画表盘就是设置好圆心(x,y)和半径r,然后计算圆周上的两个点,将相邻的两个点调用画直线函数连接起来。

  void ssd1306_DrawArc_from9(uint8_t x, uint8_t y, uint8_t radius, uint16_t start_angle, uint16_t sweep, SSD1306_COLOR color) {  float approx_degree;  uint32_t approx_segments;  uint8_t xp1,xp2;  uint8_t yp1,yp2;  uint32_t count = 0;  uint32_t loc_sweep = 0;  float rad;  loc_sweep = ssd1306_NORMalizeTo0_360(sweep);  count = (ssd1306_NormalizeTo0_360(start_angle));  approx_segments = loc_sweep;  approx_degree = 1;  while(count < approx_segments)  {  rad = ssd1306_DegToRad(count*approx_degree);  xp1 = x - (int8_t)(cos(rad)*radius);  yp1 = y - (int8_t)(sin(rad)*radius);  count++;  if(count != approx_segments)  {  rad = ssd1306_DegToRad(count*approx_degree);  }  else  {  rad = ssd1306_DegToRad(loc_sweep);  }  xp2 = x - (int8_t)(cos(rad)*radius);  yp2 = y - (int8_t)(sin(rad)*radius);  ssd1306_DrawLine(xp1,yp1,xp2,yp2,color);  }  return;  }

4.画指针

画指针比较简单,就是在圆周上找一个点,将这个点和圆心连接,就变成了一个指针,改变半径的大小,就可以实现指针的长短。

难点是如何将指针的角度和实际的温度值对应起来。假设温度的范围为-15摄氏度到45摄氏度,共60摄氏度,则每一个角度对应的温度值为60/180;

如果当前温度是20度,则对应的角度为20*60/180度。

  void ssd1306_draw_line_of_arc(uint8_t x, uint8_t y, uint8_t radius, uint16_t angle,SSD1306_COLOR color)  {  float approx_degree;  uint8_t xp1;  uint8_t yp1;  uint32_t count = 0;  float rad;  count = (ssd1306_NormalizeTo0_360(angle));  approx_degree = 1;  rad = ssd1306_DegToRad(count*approx_degree);  xp1 = x - (int8_t)(cos(rad)*radius);  yp1 = y - (int8_t)(sin(rad)*radius);  ssd1306_DrawLine(x, y, xp1, yp1, color);  }

5. 画刻度

画刻度的方法,可以参考上面画指针的方法,从同一个角度画出的直线,与两个同圆心不同半径的圆的交点,将这两个交点连接起来就是刻度

  void ssd1306_draw_line_of_kedu(uint8_t x, uint8_t y, uint8_t radius, uint16_t angle,SSD1306_COLOR color)  {  float approx_degree;  uint8_t xp1,xp2;  uint8_t yp1,yp2;  uint32_t count = 0;  float rad;  count = (ssd1306_NormalizeTo0_360(angle));  approx_degree = 1;  rad = ssd1306_DegToRad(count*approx_degree);  xp1 = x - (int8_t)(cos(rad)*radius);  yp1 = y - (int8_t)(sin(rad)*radius);  xp2 = x - (int8_t)(cos(rad)*(radius-4));//刻度线的长度为4  yp2 = y - (int8_t)(sin(rad)*(radius-4));  ssd1306_DrawLine(xp1, yp1, xp2, yp2, color);  }

6. 使用上面几个函数,画出我们设计的温度表

//更新温度和湿度  void ssd1306_update_temper(float temp, float humi)  {  int angle = 0;  char buf[100] = {0};  ssd1306_Fill(Black);  uint8_t x,y,r;  //温度表盘,半圆形  x=30;  y=28;  r=28;  ssd1306_DrawCircle(x,y,2,White);  ssd1306_SetCursor(x-r, y);  ssd1306_DrawString("-15", Font_6x8, White);  ssd1306_SetCursor(x+r-6, y);  ssd1306_DrawString("45", Font_6x8, White);  ssd1306_SetCursor(x-6, y-r+6);  ssd1306_DrawString("15", Font_6x8, White);  ssd1306_DrawArc_from9(x, y, r, 0, 180, White);  //ssd1306_DrawArc_from9(x, y, r-1, 0, 180, White);  ssd1306_draw_line_of_kedu(x,y,r,45,White);  ssd1306_draw_line_of_kedu(x,y,r,90,White);  ssd1306_draw_line_of_kedu(x,y,r,135,White);  angle = (int)((temp + 15 )*180/60);  ssd1306_draw_line_of_arc(x, y, r-2,angle, White);  ssd1306_SetCursor(x+r+6, y-r/2);  sprintf(buf, "%.1fC", temp);  ssd1306_DrawString(buf, Font_7x10, White);  //湿度表盘,半圆形  x=30;  y=55;  r=22;  ssd1306_DrawCircle(x,y,2,White);  ssd1306_SetCursor(x-r-4, y);  ssd1306_DrawString("20", Font_6x8, White);  ssd1306_SetCursor(x+r-6, y);  ssd1306_DrawString("100", Font_6x8, White);  ssd1306_SetCursor(x-6, y-r+6);  ssd1306_DrawString("60", Font_6x8, White);  ssd1306_DrawArc_from9(x, y, r, 0, 180, White);  //ssd1306_DrawArc_from9(x, y, r-1, 0, 180, White);  ssd1306_draw_line_of_kedu(x,y,r,45,White);  ssd1306_draw_line_of_kedu(x,y,r,90,White);  ssd1306_draw_line_of_kedu(x,y,r,135,White);  angle = (int)((humi - 20 )*180/80);  ssd1306_draw_line_of_arc(x, y, r-2,angle, White);  ssd1306_SetCursor(x+r+6, y-r/2);  sprintf(buf, "%%%.1f", humi);  ssd1306_DrawString(buf, Font_7x10, White);  //ssd1306_TestArc();  ssd1306_UpdateScreen();  }

7. I2C管脚的初始化和任务初始化

void Ssd1306TestTask(void* arg)  {  (void) arg;  uint32_t retval = 0;  GpioInit();  iOSetFunc(WIFI_IOT_IO_NAME_GPIO_13, WIFI_IOT_IO_FUNC_GPIO_13_I2C0_SDA);  IoSetFunc(WIFI_IOT_IO_NAME_GPIO_14, WIFI_IOT_IO_FUNC_GPIO_14_I2C0_SCL);  I2cInit(WIFI_IOT_I2C_IDX_0, OLED_I2C_BAUDRATE);  WatchDogDisable();  usleep(20*1000);  ssd1306_Init();  ssd1306_Fill(Black);  ssd1306_SetCursor(0, 0);  ssd1306_DrawString("Hello HarmonyOS!", Font_7x10, White);  uint32_t start = HAL_GetTick();  ssd1306_UpdateScreen();  uint32_t end = HAL_GetTick();  printf("ssd1306_UpdateScreen time cost: %d ms.\r\n", end - start);  //  retval = AHT20_Calibrate();  printf("AHT20_Calibrate: %d\r\n", retval);  TestGetTick();  while (1) {  float temp = 0.0, humi = 0.0;  //retval = AHT20_StartMeasure();  //printf("AHT20_StartMeasure: %d\r\n", retval);  retval = AHT20_GetTemperHumi(&temp, &humi);  printf("AHT20_GetMeasureResult: %d, temp = %.2f, humi = %.2f\r\n", retval, temp, humi);  ssd1306_update_temper(temp, humi);  sleep(1);  //ssd1306_TestAll();  }  }

到此,相信大家对“如何实现温度传感器和OLED”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 如何实现温度传感器和OLED

本文链接: https://www.lsjlt.com/news/84167.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何实现温度传感器和OLED
    本篇内容主要讲解“如何实现温度传感器和OLED”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何实现温度传感器和OLED”吧!1. OLED驱动2. 温湿度传感...
    99+
    2024-04-02
  • python如何实现华氏温度和摄氏温度转换
    目录华氏温度和摄氏温度转换输出华氏-摄氏温度转换表题目描述划重点( ̄︶ ̄)↗ 华氏温度和摄氏温度转换 TempStr=input("请输入带有符号的温度值,C/c表示摄氏度、F/f...
    99+
    2022-11-13
    python华氏温度 python摄氏温度 华氏温度转摄氏温度
  • 如何使用php实现华氏温度转换摄氏温度
    这篇文章给大家分享的是有关如何使用php实现华氏温度转换摄氏温度的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php实现华氏温度转换摄氏温度的方法:1、创建一个PHP示例文件;2、通过摄氏温度与华氏温度的换算式“...
    99+
    2023-06-26
  • Android如何使用加速度传感器实现摇一摇功能
    这篇文章将为大家详细讲解有关Android如何使用加速度传感器实现摇一摇功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下:目前很多应用已经实现了摇一摇功能,这里通过讲解该功能的原理及实现回顾一下...
    99+
    2023-05-30
    android
  • Android如何利用Sensor实现传感器功能
    小编给大家分享一下Android如何利用Sensor实现传感器功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体内容如下一、传感器的使用1、传感器的类型:方向传感器::Sensor.TYPE_ORIENTATION加速...
    99+
    2023-06-25
  • Android实现传感器功能
    Android传感器概述:动作传感器、环境传感器、位置传感器等,如方向传感器(电子罗盘)、重力传感器(横纵切换)。Android SDK支持的传感器并不是每一部Android手机均支...
    99+
    2024-04-02
  • win10如何查看cpu和gpu温度
    要查看Windows 10中的CPU和GPU温度,可以使用以下几种方法:1. 使用内置的任务管理器:按下Ctrl + Shift +...
    99+
    2023-09-04
    win10
  • C++ Cartographer源码中关于传感器的数据传递如何实现
    今天小编给大家分享一下C++ Cartographer源码中关于传感器的数据传递如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我...
    99+
    2023-07-05
  • Linux系统下如何监控和调整机器温度
    这篇文章主要介绍“Linux系统下如何监控和调整机器温度”,在日常操作中,相信很多人在Linux系统下如何监控和调整机器温度问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux系统下如何监控和调整机器温度...
    99+
    2023-06-10
  • Android利用Sensor实现传感器功能
    本文实例为大家分享了Android利用Sensor实现传感器的具体代码,供大家参考,具体内容如下 一、传感器的使用 1、传感器的类型: 方向传感器::Sensor.TYPE_ORIE...
    99+
    2024-04-02
  • JavaScript如何实现监控上传和下载进度
    本篇内容主要讲解“JavaScript如何实现监控上传和下载进度”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript如何实现监控上传和下载进度”吧!一、写在前面网路的不稳定性,网速...
    99+
    2023-06-30
  • Android应用中实现如何获取所有传感器数据的
    这篇文章给大家介绍Android应用中实现如何获取所有传感器数据的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。main.xml<&#63;xml version="1.0" enco...
    99+
    2023-05-31
    android roi
  • Netdata如何查看系统温度和风扇转速
    要查看系统温度和风扇转速,您可以使用Netdata的内置插件来监控这些指标。以下是如何在Netdata中查看系统温度和风扇转速的步骤...
    99+
    2024-04-02
  • Android中如何使用光线传感器
    Android中如何使用光线传感器,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。获得感应器服务Android开发中要使用光线传感器,需要先获得系统传感器服务Context....
    99+
    2023-05-30
    android
  • PHP中如何进行智能控制和传感器网络?
    近年来,随着智能化和物联网的兴起,越来越多的企业和开发人员开始涌入智能控制和传感器网络领域。其中,PHP作为一种广泛应用于Web开发的服务器端脚本语言,也已经应用于智能控制和传感器网络的开发中。本文将重点介绍PHP中如何进行智能控制和传感器...
    99+
    2023-05-22
    PHP 智能控制 传感器网络
  • C++ Cartographer源码中关于传感器的数据传递实现
    目录激光雷达,超声雷达与点云数据处理与传递里程计与IMU数据的走向GPS与landmark数据走向总结上一节我们看了添加轨迹的相关处理,发现在此调用了LaunchSubscriber...
    99+
    2023-05-13
    C++ Cartographer数据传递 C++数据传递 C++ Cartographer
  • Android开发如何获取传感器数据
    这篇文章主要介绍了Android开发如何获取传感器数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。本文实例讲述了Android开发获取传感器数据的方法。分享给大家供大家参考...
    99+
    2023-05-30
    android
  • 如何实现无感刷新token
    目录1、需求方法一方法二方法三2、实现3、问题解决问题一:如何防止多次刷新token问题二:同时发起两个或者两个以上的请求时,其他接口怎么解决前言: 最近在做需求的时候,涉及到登录t...
    99+
    2024-04-02
  • python如何实现感知器学习算法
    这篇文章主要介绍python如何实现感知器学习算法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!我们将研究一种判别式分类方法,其中直接学习评估 g(x)所需的 w 参数。我们将使用感知器学习算法。感知器学习算法很容易...
    99+
    2023-06-29
  • 如何在传感器中使用onAccuracyChanged函数
    在传感器中使用onAccuracyChanged函数需要以下步骤:1. 创建一个SensorEventListener对象,并实现o...
    99+
    2023-09-26
    函数
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作