SumProject/my_pro/README.md
2024-08-16 01:35:19 +08:00

180 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 红外遥控贪吃蛇/显示+上传温度等数据到云平台
**梁浚超** 导师:**李镇鸿**
![简略教程封面](/my_picture/简略教程封面.jpg)
[成果展示视频链接(new)(https://www.bilibili.com/video/BV1VqeceTEts) ](https://www.bilibili.com/video/BV1VqeceTEts)
[简略教程视频链接(https://www.bilibili.com/video/BV15uYqeME6t)](https://www.bilibili.com/video/BV15uYqeME6t)
[成果展示视频链接(https://www.bilibili.com/video/BV1x3YSesEcw)](https://www.bilibili.com/video/BV1x3YSesEcw)
## 主要内容
- [红外遥控贪吃蛇/显示+上传温度等数据到云平台](#红外遥控贪吃蛇显示上传温度等数据到云平台)
- [主要内容](#主要内容)
- [1. LCD显示温湿度等数据](#1-lcd显示温湿度等数据)
- [1.1 LCD显示字符串](#11-lcd显示字符串)
- [1.2 屏幕圆角](#12-屏幕圆角)
- [2. LCD贪吃蛇小游戏](#2-lcd贪吃蛇小游戏)
- [2.1 循环队列储存蛇身的坐标](#21-循环队列储存蛇身的坐标)
- [2.2 放弃使用bool记录地图](#22-放弃使用bool记录地图)
- [2.3 随机运动](#23-随机运动)
- [2.4 引入按键](#24-引入按键)
- [2.5 红外遥控](#25-红外遥控)
- [3. 红外遥控](#3-红外遥控)
- [3.1 填好对应的pin](#31-填好对应的pin)
- [3.2 找到合适的遥控器](#32-找到合适的遥控器)
- [3.3 基本操作](#33-基本操作)
- [3.4 导致LCD闪烁](#34-导致lcd闪烁)
- [4. 时间获取,显示](#4-时间获取显示)
- [5. 菜单切换](#5-菜单切换)
- [6. MQTT上传温湿度等数据到云平台](#6-mqtt上传温湿度等数据到云平台)
- [6.1 简单修改](#61-简单修改)
- [6.2 连接WiFi](#62-连接wifi)
- [6.3 阿里云平台查看数据](#63-阿里云平台查看数据)
- [光照强度](#光照强度)
- [接近感应](#接近感应)
- [蛇长](#蛇长)
- [湿度](#湿度)
- [温度](#温度)
- [6.4 开启关闭MQTT](#64-开启关闭mqtt)
- [展望](#展望)
- [感谢](#感谢)
## 1. LCD显示温湿度等数据
[成果展示视频链接1:10(new)(https://www.bilibili.com/video/BV1VqeceTEts) ](https://www.bilibili.com/video/BV1VqeceTEts)
![LCD显示](../my_picture/LCD数据.jpg)
### 1.1 LCD显示字符串
左上角是00 →x↓y
``` c
void easy_show_lcd(char *title, float Temp)
{
lcd_show_string(10, plus_lcd_y(24), 24, title);
rt_sprintf(tmp, "%f", Temp);
lcd_show_string(10, plus_lcd_y(32), 32, tmp);
}
```
### 1.2 屏幕圆角
勾股定理、⚪的公式
``` c
if ((newi * newi + newj * newj) > (r * r))
{
lcd_black(i, j);
}
```
## 2. LCD贪吃蛇小游戏
[视频展示](https://www.bilibili.com/video/BV1WHafe1EBh/?spm_id_from=333.999.0.0&vd_source=4ac343050490681bfc3be821b46a4a18)
### 2.1 循环队列储存蛇身的坐标
``` c
int snake_head = 2, snake_tail = 0; // 蛇头,蛇尾
new_head_x = (snake_list[snake_head][0] + snake_direction[now_direction][0] + SNAKE_MAX) % (SNAKE_MAX);
```
### 2.2 放弃使用bool记录地图
内存不够
### 2.3 随机运动
``` c
int snake_direction[4][2] = {{0, -1}, {-1, 0}, {0, 1}, {1, 0}}; // 上,左,下,右
```
![alt text](../my_picture/防止反向.jpg)
``` c
// 50%的概率保持当前方向
if (rand() % 100 < 50)
{
new_direction = rand() % 3;
now_direction = (now_direction + 3 + new_direction) % 4; // 防止反向、走回头路
}
```
### 2.4 引入按键
修改`now_direction`就可以了
### 2.5 红外遥控
## 3. 红外遥控
### 3.1 填好对应的pin
### 3.2 找到合适的遥控器
| 编号key| 功能 |
| :----: | :----: |
| 0x30| 上 |
| 0xE8 | 左 |
| 0xB0 | 下 |
| 0x68 | 右 |
| 0xFF | OK |
| 0x38 | 电源键 |
| 0xA8 | 静音 |
| 0x88 | 菜单 |
| 0x28 | 退出 |
### 3.3 基本操作
``` c
ir_select_decoder("nec");
infrared_read("nec", &infrared_data);
snake_compare(infrared_data.data.nec.key, infrared_data.data.nec.repeat);
rt_sprintf(tmp, "%02X", key);
```
### 3.4 导致LCD闪烁
[闪烁展示](https://www.bilibili.com/video/BV1frakeoEbc/?spm_id_from=333.999.0.0)
[问题解决](https://club.rt-thread.org/ask/article/23706daa8b2e9e55.html)
## 4. 时间获取,显示
![显示时间.jpg](../my_picture/显示时间.jpg)
[参考(https://blog.csdn.net/toopoo/article/details/113665077)](https://blog.csdn.net/toopoo/article/details/113665077)
``` c
void greattime()
{
time_t cur_time;
struct tm *info;
cur_time = ntp_get_time(RT_NULL);
info=localtime(&cur_time);
strftime(tmp, 80, "%Y-%m-%d", info);
lcd_show_string(40, 240/2-32-24, 32, tmp);
strftime(tmp, 80, "%H:%M:%S", info);
lcd_show_string(50, 240/2+24, 32, tmp);
if (cur_time)
{
rt_kprintf("NTP Server Time: %s", ctime((const time_t *)&cur_time));
}
}
```
## 5. 菜单切换
``` c
// 菜单(切换页面)
if (repeat == 0 && (rt_strcmp(tmp, "88") == 0 || rt_strcmp(tmp, "11") == 0))
{
page_chosen = (page_chosen % PAGE_MAX) + 1;
page_first = 1;
}
```
[展示1:51](https://www.bilibili.com/video/BV1VqeceTEts/?spm_id_from=333.999.0.0&vd_source=4ac343050490681bfc3be821b46a4a18)
## 6. MQTT上传温湿度等数据到云平台
### 6.1 简单修改
``` c
char tmp[];
rt_sprintf(tmp, "{\"params\":{\"temperature\":%.2f,\"humidity\":%.2f,\"LightLux\":%.2f,\"Psdata\":%d,\"Snakelen\":%d}}", Temp, Humi, brightness, ps_data, snake_len);
const char *fmt = "/sys/%s/%s/thing/event/property/post";
char *payload = tmp;
```
### 6.2 连接WiFi
``` c
rt_wlan_config_autoreconnect(RT_TRUE);
rt_wlan_connect("Dong", "abcd07691234");
system("myproject");
```
### 6.3 阿里云平台查看数据
#### 光照强度
![alt text](../my_picture/光照强度.png)
#### 接近感应
![alt text](../my_picture/接近感应.png)
#### 蛇长
![alt text](../my_picture/蛇长.png)
#### 湿度
![alt text](../my_picture/湿度.png)
#### 温度
![alt text](../my_picture/温度.png)
### 6.4 开启关闭MQTT
![开启mqtt图](../my_picture/成果展示封面.png)
``` c
IOT_MQTT_Destroy(&pclient);
```
#### 展望
LVGL,网页/小程序展示操作
## 感谢
RT-Thread和各位导师的指导