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

news/2024/10/10 10:26:05

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.接线方式

蓝牙模块 RXD TXD GND VCC
Arduino uno pin7 pin6 5v GND
ST7735S模块 BLK CS DC RST SDA SCL VDD VCC
Arduino uno 3.3v pin10 pin9 pin8 pin11 pin13 未接 GND

3.话不多说上代码

点击查看代码
#include <SoftwareSerial.h>
#include <SPI.h>
#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.回顾(复习看)
头文件:<SoftwareSerial.h>、 <Ucglib.h> 、<stdio.h>

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.ryyt.cn/news/27752.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

.NET 8 的openEuler 容器镜像

目前.NET 8的容器镜像已经支持openEuler,以openEuler为基础镜像的应用镜像:dotnet-deps、dotnet-runtime 和 dotnet-aspnet。基础镜像简介这里存放着由openEuler官方提供的容器镜像,包含openEuler基础镜像、应用镜像。在这里,你可以参考对应镜像的介绍,部署你需要的镜像容…

Adobe Photoshop 2024 v25.7 (macOS, Windows) - 照片和设计软件

Adobe Photoshop 2024 v25.7 (macOS, Windows) - 照片和设计软件Adobe Photoshop 2024 v25.7 (macOS, Windows) - 照片和设计软件 Acrobat、After Effects、Animate、Audition、Bridge、Character Animator、Dimension、Dreamweaver、Illustrator、InCopy、InDesign、Lightroo…

LLM2Vec介绍和将Llama 3转换为嵌入模型代码示例

嵌入模型是大型语言模型检索增强生成(RAG)的关键组成部分。它们对知识库和用户编写的查询进行编码。 使用与LLM相同领域的训练或微调的嵌入模型可以显著改进RAG系统。然而,寻找或训练这样的嵌入模型往往是一项困难的任务,因为领域内的数据通常是稀缺的。 但是这篇论文LLM2Vec…

使用-PHP-和-jQuery-构建游戏化-Web-站点(全)

使用 PHP 和 jQuery 构建游戏化 Web 站点(全)原文:zh.annas-archive.org/md5/a9c92181e14a72b81ed3a8d14d6790a1 译者:飞龙 协议:CC BY-NC-SA 4.0前言 几年前,如果你对某人说“游戏化”,你会得到一个奇怪的表情,好像你在编造一些新东西。也许你会得到一个快速的跟进问题…

搭建自己的博客

基于github和Hexo 搭建自己的博客 【摘要】该教程基于个人的虚拟机和个人的GitHub,过程会详细注明对应的安装包的版本。 1、搭建hexo环境 环境配置 本地虚拟机:ubuntu 20.4(也可以基于对应的服务器) Hexo搭建步骤 1. 安装nodejs和npm 由于Ubuntu20通过apt安装nodejs默认只能…

activiti

目录api挂起流程 api 挂起流程

PHP-数据对象学习手册(全)

PHP 数据对象学习手册(全)原文:zh.annas-archive.org/md5/33ff31751d56930c46ef1daf9ca0ebcb 译者:飞龙 协议:CC BY-NC-SA 4.0前言 本书将向您介绍 PHP 5.0 版本开始提供的最重要的扩展之一——PHP 数据对象,通常称为 PDO。 PHP 由于其简单性和易用性而成为非常流行的 We…

PHP-入门指南(全)

PHP 入门指南(全)原文:zh.annas-archive.org/md5/d36bde355b2574844946c8150420db7b 译者:飞龙 协议:CC BY-NC-SA 4.0前言 开发网站是当今的优先事项,以便您的业务在互联网上有所存在。设计和开发是任何网站的基础步骤。PHP 通常用于网站和 Web 应用程序开发。PHP 是一种…