SumProject/my_pro
james 3a9b9ab4f2 note 2024-08-16 01:35:19 +08:00
..
AHT10.c 调整文件夹,调整md 2024-08-05 21:13:20 +08:00
README.md note 2024-08-16 01:35:19 +08:00
SConscript 调整文件夹,调整md 2024-08-05 21:13:20 +08:00
icm_20608_sample.c 调整文件夹,调整md 2024-08-05 21:13:20 +08:00
my_func.c 可以遥控开启关闭MQTT 2024-08-11 15:39:46 +08:00
my_func.h 一些注释 2024-08-12 22:40:38 +08:00
myinfrared.c 可以遥控开启关闭MQTT 2024-08-11 15:39:46 +08:00
myproject.c strlen 的rt替换 2024-08-11 16:10:16 +08:00
mysnake.c note 2024-08-16 01:35:19 +08:00
mysnake.h 调整文件夹,调整md 2024-08-05 21:13:20 +08:00
pin_irq_example.c 调整文件夹,调整md 2024-08-05 21:13:20 +08:00
test_drv_example.c 调整文件夹,调整md 2024-08-05 21:13:20 +08:00

README.md

红外遥控贪吃蛇/显示+上传温度等数据到云平台

梁浚超 导师:李镇鸿 简略教程封面
成果展示视频链接(new)(https://www.bilibili.com/video/BV1VqeceTEts)
简略教程视频链接(https://www.bilibili.com/video/BV15uYqeME6t)
成果展示视频链接(https://www.bilibili.com/video/BV1x3YSesEcw)

主要内容

1. LCD显示温湿度等数据

成果展示视频链接1:10(new)(https://www.bilibili.com/video/BV1VqeceTEts) LCD显示

1.1 LCD显示字符串

左上角是00 →x↓y

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 屏幕圆角

勾股定理、的公式

if ((newi * newi + newj * newj) > (r * r))
{
    lcd_black(i, j);
}

2. LCD贪吃蛇小游戏

视频展示

2.1 循环队列储存蛇身的坐标

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 随机运动

int snake_direction[4][2] = {{0, -1}, {-1, 0}, {0, 1}, {1, 0}}; // 上,左,下,右

alt text

// 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 基本操作

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闪烁

闪烁展示 问题解决

4. 时间获取,显示

显示时间.jpg 参考(https://blog.csdn.net/toopoo/article/details/113665077)

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. 菜单切换

// 菜单(切换页面)
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

6. MQTT上传温湿度等数据到云平台

6.1 简单修改

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

rt_wlan_config_autoreconnect(RT_TRUE);
rt_wlan_connect("Dong", "abcd07691234");
system("myproject");

6.3 阿里云平台查看数据

光照强度

alt text

接近感应

alt text

蛇长

alt text

湿度

alt text

温度

alt text

6.4 开启关闭MQTT

开启mqtt图

IOT_MQTT_Destroy(&pclient);

展望

LVGL,网页/小程序展示操作

感谢

RT-Thread和各位导师的指导