arduino uno+LCD12864(ST7735S)+蓝牙模块实现贪吃蛇

devtools/2024/9/19 7:44:06/ 标签: python

1.前言:
1.1本实验实现的贪吃蛇能穿越边界,结束游戏的唯一条件是贪吃蛇到达指定长度
1.2本实验所用LCD可能不是LCD12864,LCD12864所用库为u8glib,笔者在词库中并没有找到型号为ST77355的初始化函数,而是在ucglib中找到,其方法为
Ucglib_ST7735_18x128x160_SWSPI ucg(/*sclk=*/13, /*data=*/11, /*cd=*/9, /*cs=*/10, /*reset=*/8);
1.3代码由学长LCD1602修改而来
2.接线方式

蓝牙模块RXDTXDGNDVCC
Arduino unopin7pin65vGND
ST7735S模块BLKCSDCRSTSDASCLVDDVCC
Arduino uno3.3vpin10pin9pin8pin11pin13未接GND

3.话不多说上代码

点击查看代码

#include 
#include 
#include "Ucglib.h"
#define maxlength 4 //蛇最大长度
Ucglib\_ST7735\_18x128x160\_SWSPI ucg(/*sclk=*/13, /*data=*/11, /*cd=*/9, /*cs=*/10, /*reset=*/8);
SoftwareSerial BT(6, 7);
char val;//蓝牙接收字符
int snake_length = 1;//蛇目前长度
int snake_x[maxlength], snake_y[maxlength];
int direction = 6;//方向判断和闪屏控制
int x = 10;
int y = 10;//记录变化的位置
int food_x;
int food_y;//食物
int gameOver = 0;//结束条件
void setup(void) {//delay(1000);ucg.begin(UCG_FONT_MODE_TRANSPARENT);//ucg.begin(UCG\_FONT\_MODE\_SOLID);ucg.clearScreen();BT.begin(9600);snake_x[0] = 10;snake_y[0] = 10;food_x = 10 + 10 * random(0, 9);food_y = 10 + 10 * random(0, 9);
}void loop(void) {if (direction == 6) {//欢迎界面ucg.setFont(ucg_font_ncenR12_tr);//字体设置ucg.setPrintPos(40, 80);//设定显示坐标ucg.print("welcome");} elseucg.drawFrame(10, 10, 100, 100);//游戏区域,有没有无所谓if (BT.available()) {val = BT.read();if (val == 'w' && direction != 2) direction = 0;if (val == 's' && direction != 0) direction = 2;if (val == 'a' && direction != 1) direction = 3;if (val == 'd' && direction != 3) direction = 1;}if (direction == 0) y -= 10;  //wif (direction == 1) x += 10;  //dif (direction == 2) y += 10;  //sif (direction == 3) x -= 10;  //aif (x < 10) x = 100;if (x > 100) x = 10;if (y < 10) y = 100;if (y > 100) y = 10;//到达边界后穿过边界if (x == food_x && y == food_y) {//行动后吃到食物snake_length++;while (1) {int flag = 1;//跳出循环标志food_x = 10 + 10 * random(0, 9);food_y = 10 + 10 * random(0, 9);//重新生成一个食物for (int i = snake_length - 1; i >= 0; i--) {//遍历蛇身看食物是否生成在身上if ((food_x == snake_x[i]) && (food_y == snake_y[i]) || ((food_x == x) && (food_y == y))) {flag = 0;break;}}if (snake_length == maxlength) {//游戏结束条件gameOver = 1;direction=5;//结束后显示gameover时的闪屏控制break;}if (flag) break;}}if (direction != 6) {for (int i = snake_length - 1; i > 0; i--) {snake_x[i] = snake_x[i - 1];snake_y[i] = snake_y[i - 1];}snake_x[0] = x;snake_y[0] = y;if (gameOver) {if(direction==5){ucg.clearScreen();direction=1;}else{ucg.setFont(ucg_font_ncenR12_tr);ucg.setPrintPos(40, 80);ucg.print("gameover");}}if (!gameOver) {ucg.clearScreen();for (int i = 0; i < snake_length; i++) {ucg.drawFrame(snake_x[i], snake_y[i], 10, 10);}ucg.drawFrame(food_x, food_y, 10, 10);}}
}

4.来人上图
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

再上
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

还上
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
使用手机app蓝牙串口调试,发送wasd,对应上左下右

5.回顾(复习看)
头文件:、 、

5.1LCD相关函数
LCD初始化
Ucglib_ST7735_18x128x160_SWSPI ucg(/*sclk=*/13, /*data=*/11, /*cd=*/9, /*cs=*/10, /*reset=*/8);
显示矩形,其左上角坐标为(snake_x[i], snake_y[i]),长度和宽度为10
ucg.drawFrame(snake_x[i], snake_y[i], 10, 10);
显示像素点,其坐标坐标为(x,y)
ucg.drawPixel(x,y)
清屏
ucg.clearScreen();
初始化,两者区别不知道
ucg.begin(UCG_FONT_MODE_TRANSPARENT); //ucg.begin(UCG_FONT_MODE_SOLID);
字体、显示坐标、显示函数
ucg.setFont(ucg_font_ncenR12_tr); ucg.setPrintPos(40, 80); ucg.print("welcome");

5.2蓝牙相关函数
SoftwareSerial BT(6, 7);
读app发来的信息
if (BT.available()) char val = BT.read();

6.说明
如有同道中人,请删去注释


http://www.ppmy.cn/devtools/34390.html

相关文章

ComfyUI 完全入门:安装部署

在AI绘画领域&#xff0c;Stable Diffusion 因其开源特性而受到广泛的关注和支持&#xff0c;背后聚拢了一大批的应用开发者和艺术创作者&#xff0c;是AI绘画领域当之无愧的王者。 目前使用 Stable Diffusion 进行创作的工具主要有两个&#xff1a;Stable Diffusion WebUI 和…

Linux常见指令(三)

Linux下的基本指令大全 下面将Linux指令分成9种不同的主要类别&#xff1a; 文件管理指令&#xff1a;这些指令用于文件和目录的创建、编辑、复制、移动和删除。例如&#xff1a;ls&#xff08;列出目录内容&#xff09;&#xff0c;cp&#xff08;复制文件或目录&#xff09;…

python(简单制作注册登录系统)

制作一个注册登录模块 注册&#xff1a;将用户填入的账户和密码保存到一个文件(users.bin) 登陆&#xff1a;将用户填入账户密码和users.bin中保存的账户密码进行比对,如果账户和密码完全相同 那么登录成功&#xff0c;否则登录失败。 分析&#xff1a; 注册部分--主要涉及到的…

php 常见的判断语句和用法

在 PHP 中&#xff0c;常见的判断语句主要使用 if、else、elseif&#xff08;或 else if&#xff09;、switch 和 case。这些语句用于根据条件执行不同的代码块。以下是这些判断语句的详细用法&#xff1a; 1. if 语句 if 语句用于在条件为真时执行代码块。 if (条件) {// 如…

解锁WSL下Docker使用

简介&#xff1a;Windows Subsystem for Linux&#xff08;简称WSL&#xff09;是一个在Windows 10上能够运行原生Linux二进制可执行文件&#xff08;ELF格式&#xff09;的兼容层。正常情况下&#xff0c;WSL安装完成后直接使用docker会抛出以下报错&#xff1a; Cannot conn…

【数据结构(邓俊辉)学习笔记】列表03——有序列表

文章目录 0. 概述1. 唯一化2. 查找2.1 实现2.2 顺序查找2.3 复杂度 0. 概述 介绍下有序列表。 若列表中所有节点的逻辑次序与其大小次序完全一致&#xff0c;则称作有序列表&#xff08;sorted list&#xff09;。为保证节点之间可以定义次序&#xff0c;依然假定元素类型T直接…

综合性练习(后端代码练习4)——图书管理系统

目录 一、准备工作 二、约定前后端交互接口 1、需求分析 2、接口定义 &#xff08;1&#xff09;登录接口 &#xff08;2&#xff09;图书列表接口 三、服务器代码 &#xff08;1&#xff09;创建一个UserController类&#xff0c;实现登录验证接口 &#xff…

Bookends for Mac:文献管理工具

Bookends for Mac&#xff0c;一款专为学术、研究和写作领域设计的文献管理工具&#xff0c;以其强大而高效的功能深受用户喜爱。这款软件支持多种文件格式&#xff0c;如PDF、DOC、RTF等&#xff0c;能够自动提取文献的关键信息&#xff0c;如作者、标题、出版社等&#xff0c…

ASP.NET网上书店

摘要 本设计尝试用ASP.NET在网络上架构一个电子书城&#xff0c;以使每一位顾客不用出门在家里就能够通过上网来轻松购书。本文从理论和实践两个角度出发&#xff0c;对一个具有数据挖掘功能电子书城进行设计与实现分析。论文首先较为详尽地介绍了面向对象分析与设计的有关概念…

全栈开发之路——前端篇(1)介绍、框架确定、ide设置与项目创建

文章目录 前言一、前端框架React和VueReactVue 二、编译器选择和配置1.传统的下载和使用2.你可能遇到的问题1.ERR&#xff01; syscall mkdir2.vue : File C:\nodejs\node_global\vue.ps1 cannot be loaded because running scripts is disabled on3.出现乱码问题 3.运行Vue 三…

MySQL-存储引擎

将 连接管理&#xff0c;查询缓存&#xff0c;查询优化 等不影响真实数据存储的功能划分为MySQL Server 功能将真实存取数据的功能划分为 存储引擎&#xff0c;存储引擎即表的类型。 1、查看存储引擎 mysql> show engines; ---------------------------------------------…

代码随想录算法训练营第四十三天

今日事争取今日毕&#xff01;还一天就上班啦&#xff0c;陪产假结束&#xff0c;坚持坚持&#xff01; 1049. 最后一块石头的重量 II 思路主要是分成两个差不多大的两堆&#xff0c;所以需要用尽可能一半去减另一半即可。思路很重要啊&#xff0c;第一次确实想不明白。 clas…

Windows平台通过MobaXterm远程登录安装在VMware上的Linux系统(CentOS)

MobaXterm是一个功能强大的远程计算工具&#xff0c;它提供了一个综合的远程终端和图形化的X11服务器。MobaXterm旨在简化远程计算任务&#xff0c;提供了许多有用的功能&#xff0c;使远程访问和管理远程服务器变得更加方便&#xff0c;它提供了一个强大的终端模拟器&#xff…

【Python项目】基于opencv的的【疲劳检测系统】

技术简介&#xff1a;使用Python技术、OpenCV图像处理库、MYSQL数据库等实现。 系统简介&#xff1a;用户可以通过登录系统平台实现实时的人脸照片的拍摄和上传&#xff0c;结合上传图像的内容进行后台的图像预处理和运算分析&#xff0c;用户可以通过照片分析界面查看到当前检…

蓝桥杯练习系统(算法训练)ALGO-946 Q神的足球赛

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 足球赛上&#xff0c;只见Q神如闪电般的速度带球时而左&#xff0c;时而右&#xff0c;时而前&#xff0c;时而后&#xff…

数据库查询语言SQL介绍及基础命令[查看数据库/数据表,创建数据库/数据表,使用数据库/数据表,删除数据库/数据表,如何注释]

SQL介绍 SQL&#xff08;Structured Query Language&#xff09;是一种标准化的数据库查询语言&#xff0c;用于管理和操作关系数据库。SQL的主要作用包括数据查询、数据操作、数据定义和数据访问控制。它是与数据库交互的通用语言&#xff0c;被广泛应用于数据管理和分析。 …

Matlab|考虑极端天气线路脆弱性的配电网分布式电源和储能优化配置模型

1主要内容 程序主要参考《考虑极端天气线路脆弱性的配电网分布式电源配置优化模型-马宇帆》&#xff0c;针对极端天气严重威胁配电网安全稳定运行的问题。基于微气象、微地形对配电网的线路脆弱性进行分析&#xff0c;然后进行分布式电源接入位置与极端天气的关联性分析&#…

代码随想录算法训练营第四十五天| 卡码网57.爬楼梯、LeetCode322.零钱兑换、LeetCode279.完全平方数

卡码网 57 爬楼梯 题目链接&#xff1a;57. 爬楼梯&#xff08;第八期模拟笔试&#xff09; (kamacoder.com) 【解题思路】 1.确定dp数组下标及其含义&#xff1a; dp[j]表示爬到有j个台阶的楼顶&#xff0c;有dp[j]种方法 2.确定递推公式 dp[j]dp[j-i] i代表一步走i个台阶 …

macOS DOSBox 汇编环境搭建

正文 一、安装DOSBox 首先前往DOSBox的官网下载并安装最新版本的DOSBox。 二、下载必备的工具包 在用户目录下新建一个文件夹&#xff0c;比如 dosbox: mkdir dosbox然后下载一些常用的工具。下载好了后&#xff0c;将这些工具解压&#xff0c;重新放在 dosbox 这个文件夹…

【Python函数和类6/6】类与对象

目录 目标 类与对象 类的定义 栗子 实例化对象 属性和方法的调用 特殊的self参数 类方法的其它参数 函数与方法的区别 总结 目标 在前面的博客当中&#xff0c;我们已经接触了一部分封装。比如&#xff1a;将数据扔进列表中&#xff0c;这就是一个简单…