这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » Let'sDo第2期任务+《贪吃蛇》过程1+贪吃蛇按键采集

共6条 1/1 1 跳转至

Let'sDo第2期任务+《贪吃蛇》过程1+贪吃蛇按键采集

助工
2024-07-31 14:13:37     打赏

1.简介

      贪吃蛇游戏设计中需要根据PIM580(320X240 2.0")上的按键动作来操纵蛇的位置移动,我们可以使用PIM580模块的A/B/X/Y 按键来操纵蛇的移动方向,从PIM580的硬件原理图可以看出四个物理按键的连接关系如下:


image.png

按键PICO 连接端口
SWAP12
SWBP13
SWXP14
SWYP15


2.基于rt-thread按键采集

本次活动的已经提供了基于keil 的pico 工程模板,可以直接使用,个人开发比较喜欢在rtos 的环境下进行开发,查看rt-thread 的master 代码已经支持了pico 的bsp,本次开发计划基于rt-thread 在此基础上将keil工程的lcd 驱动代码移植到rt-thread 系统上再次基础上来继续开发贪吃蛇的游戏。

2.1 rt-thread 的适配

从rt-thread(https://github.com/RT-Thread/rt-thread) 拉取master 代码,在/master/bsp/raspberry-pico 目录下执行“pkgs --update” 拉取pico sdk 软件包,然后执行menuconfig 配置串口console 用于和系统交互,配置时应确保和PIM580的针脚避免冲突,默认使用的GP0/GP1 UART0 的端口配置,和PIM580 的连接不发生冲突。

image.png

image.png

根据上述配置,通过scons 命令即可完成系统的编译,生成以下的uf2的下载镜像。

image.png

下载后系统可以正常启动,看到了熟悉的启动log

image.png

2.2 按键采集

在上述系统的main task 的入口添加如下代码采集按键状态并打印。

/*
 * Copyright (c) 2006-2021, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author         Notes
 * 2021-01-28     flybreak       first version
 */

#include <rtthread.h>
#include <rtdevice.h>

#define LED_PIN 6
#define PM580_SWA_PIN 12
#define PM580_SWB_PIN 13
#define PM580_SWX_PIN 14
#define PM580_SWY_PIN 15

int main(void)
{
    rt_uint8_t swa;
    rt_uint8_t swb;
    rt_uint8_t swx;
    rt_uint8_t swy;

    rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT);
    rt_pin_mode(PM580_SWA_PIN, PIN_MODE_INPUT_PULLUP);
    rt_pin_mode(PM580_SWB_PIN, PIN_MODE_INPUT_PULLUP);
    rt_pin_mode(PM580_SWX_PIN, PIN_MODE_INPUT_PULLUP);
    rt_pin_mode(PM580_SWY_PIN, PIN_MODE_INPUT_PULLUP);

    swa = rt_pin_read(PM580_SWA_PIN);
    swb = rt_pin_read(PM580_SWB_PIN);
    swx = rt_pin_read(PM580_SWX_PIN);
    swy = rt_pin_read(PM580_SWY_PIN);

    while (1)
    {

        if(rt_pin_read(PM580_SWA_PIN) != swa)
        {
            rt_thread_mdelay(100);
            if(rt_pin_read(PM580_SWA_PIN) != swa)
            {
                swa = rt_pin_read(PM580_SWA_PIN);
                rt_kprintf("swa %sn",(swa == 0) ? "Down" : "UP");
            }
        }

        if(rt_pin_read(PM580_SWB_PIN) != swb)
        {
            rt_thread_mdelay(100);
            if(rt_pin_read(PM580_SWB_PIN) != swb)
            {
                swb = rt_pin_read(PM580_SWB_PIN);
                rt_kprintf("swb %sn",(swb == 0) ? "Down" : "UP");
            }
        }

        if(rt_pin_read(PM580_SWX_PIN) != swx)
        {
            rt_thread_mdelay(100);
            if(rt_pin_read(PM580_SWX_PIN) != swx)
            {
                swx = rt_pin_read(PM580_SWX_PIN);
                rt_kprintf("swx %sn",(swx == 0) ? "Down" : "UP");
            }
        }

        if(rt_pin_read(PM580_SWY_PIN) != swy)
        {
            rt_thread_mdelay(100);
            if(rt_pin_read(PM580_SWY_PIN) != swy)
            {
                swy = rt_pin_read(PM580_SWY_PIN);
                rt_kprintf("swy %sn",(swy == 0) ? "Down" : "UP");
            }
        }

        rt_thread_mdelay(10);
    }
}

从以下的 PIM 580 的四组按键已经可以按照预期的采集到按下抬起的事件了,下一步计划移植适配LCD显示的驱动。

image.png



专家
2024-07-31 21:01:17     打赏
2楼

感谢分享


专家
2024-08-01 20:04:54     打赏
3楼

谢谢分享


专家
2024-08-04 09:24:26     打赏
4楼

谢谢分享


助工
2024-08-05 14:58:46     打赏
5楼

用RTT搞,着实方便多了,比起keil还没加系统,只能单任务跑,多任务的方式可玩性高太多了


工程师
2024-08-06 09:13:19     打赏
6楼

谢谢分享。


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]