当前位置: 首页 > news >正文

arduino程序-MC猜数字5、6(基础知识)

arduino程序-MC猜数字5、6(基础知识)

  • 1-23 MC猜数字-5 自定义函数
    • 自定义函数
    • 自定义清理显示内容函数displayClear()
    • 带参数函数displayNumber
    • 带参数、返回值的函数
  • 1-24 MC猜数字-6 完成制作
    • 显示0~9数字函数改造
    • 产生随机数字函数改造范围(0~10)
    • 升级getRandomNumber
    • 上传程序
    • 串口监视器
    • RandomSeed()
    • 意念控制办法解密
    • 最终程序

1-23 MC猜数字-5 自定义函数

在这里插入图片描述

上节课 random函数产生随机数字,再使用switch case语句将数字显示到LED数码管上

自定义函数

目前写的代码调用函数,都是arduino工程人员开发好了

如重复的输出高低电平

在这里插入图片描述

重复的程序代码,使用自己的函数让arduino重复工作

自定义清理显示内容函数displayClear()

在loop(){}函数外面定义(这里在最下方定义了,也没有在最上方函数声明,就可以直接调用)

如下所示(无参数、无返回值的函数):
在这里插入图片描述

调用函数,在loop函数中调用
如下所示:
在这里插入图片描述

Void 表示空的返回值,()无参数,和下方类似
在这里插入图片描述

带参数函数displayNumber

将loop函数中的switch语句用函数表示:
在这里插入图片描述

在loop(){}函数外面定义

输入参数int类型,如下
在这里插入图片描述

在loop函数中调用
在这里插入图片描述

在这里插入图片描述

带参数、返回值的函数

输入两个int类型参数
返回int类型的参数

随机函数产生最小数字和最大数字之间的数值

返回给定的两个参数之间的随机数,此用来学习自定义函数
在这里插入图片描述

在loop中调用
在这里插入图片描述

若下方return为空,返回的默认数值为0
在这里插入图片描述

1-24 MC猜数字-6 完成制作

在这里插入图片描述

最后一节课,如何通过意念控制显示数字

回顾上一节,三个函数
在这里插入图片描述

分析工作内容,分成各个模块,每个模块实现功能,结构性更好

升级改造猜数字

显示0~9数字函数改造

在这里插入图片描述

产生随机数字函数改造范围(0~10)

在这里插入图片描述

升级getRandomNumber

串口监视器显示数字,用于调试
在这里插入图片描述

上传程序

上传程序后,串口监视器的文字内容显示

Print和println不同(后面会换行)
在这里插入图片描述

可以让运行的程序各个变量运行更方便看

字符串简单了解

在这里插入图片描述

再次升级程序
在这里插入图片描述

延时先改成5秒,方便调试
在这里插入图片描述

编译上传,先随机

在这里插入图片描述

此处如何通过串口监视器,了解程序运行状况

同时观察到程序运行状况

其他语言的IDE有断点调试

而arduino IDE只能串口监视器了解程序运行中的状态

看程序

在这里插入图片描述
在这里插入图片描述

增加变量i,作为while循环判断条件,每次增加1,循环5次跳出循环

程序运行到while循环结束后

调用函数
在这里插入图片描述

串口监视器

其他语言的IDE有断点调试

而arduino IDE只能串口监视器了解程序运行中的状态

一般是先上传程序,再点击串口监视器观察程序状态
每次点击串口监视器的按钮,arduino都会复位操作,从程序的最开始的地方重新运行
在这里插入图片描述

每次启动串口监视器,看着里面随机数字,但是其为顺序不变的一排
在这里插入图片描述

每次点击串口监视器,复位后,都是一样的7,9.。。

RandomSeed()

如何破除每次复位都是同一组数字的,让每次arduino复位后不会产生相同排列的随机数字
在这里插入图片描述

再次上传,点击关闭,点击串口监视器就不一样了

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

AnalogRead(A0) A0做模拟输入的一个引脚

读取AO引脚模拟输入的一个数值

再次更改程序
2号引脚解按键开关,输入上拉模式

在这里插入图片描述

在这里插入图片描述

意念控制办法解密

在arduino中加入了一段代码可以在产生数字前就能判断下一个数字是什么数字

每次按下按键都会在最后显示数字之前产生一个符号,其将高速下一个产生的数字是几
在这里插入图片描述

这个符号是怎么写进去的,怎么实现进去的,可以看官网实际案例

最终程序

http://www.taichi-maker.com/homepage/arduino-basic-tutorial-index/arduino-basic-tutorial-24/

/** MC猜数字 (Ver. 1.0)* * 本程序用于太极创客制作的《零基础入门学用Arduino教程》中* MC猜数字小制作。通过学习和搭建这个小装置,我们希望您能够* 学会以下内容:* *  - LED数码管的原理和使用*  - if...else if的概念和应用*  - while循环的概念和应用*  - switch case控制语句*  - random函数的使用*  - 建立和使用自定义函数(三种形式:无参数无返回值,有参数无返回值,有参数有返回值)*  - 通过串口监视器观察调试程序运行状况*  *  电路连接:*  有关本制作的详细电路连接资料,请参阅太极创客网站的《零基础入门学用Arduino教程》相关网页。*  *  *  太极创客网站地址:*  www.taichi-maker.com*  *  如您对我们有任何建议或意见,请发邮件至:*  taichimaker@163.com*  *  同时您也可以通过我们的微信公众号以及微博获得更多太极创客的最新信息。*  *  This example code is in the public domain.*  *  2017-04-23**  注:*  目前科学技术尚无法实现意念控制。*  科技可以改变世界,但也有心怀不轨的人会利用科技制作*  我们不宜察觉的装置。而这些装置会被用于赌博或诈骗。*  我们一定要远离赌博,相信科学。:)
*/int thisResult;  //存储按键按下以后显示在数码管的数字。
int nextResult;  //存储作弊数字,也就是下一次按键按下后即将显示的数字。void setup() {pinMode(2, INPUT_PULLUP); //2号引脚上连接有按键开关,将2号引脚设置为输入上拉模式int pinNumber = 3;        //设置3-9号引脚为输出模式while(pinNumber <= 9){pinMode(pinNumber, OUTPUT);pinNumber = pinNumber + 1;}randomSeed(analogRead(A0)); //为了每一次复位或断电后产生不同顺序的随机数字
}// the loop function runs over and over again forever
void loop() {if (!digitalRead(2)){      //读取2号引脚电平状态getRandomNumber(0,10);   //用户按下按键后,开始新一次猜数字游戏}displayNumber(thisResult); //将猜数字游戏"结果"显示在数码管中
}/*
用户在每一次按下按键后,随机产生的数字将存储于nextResult变量中。
而实际显示在数码管上的数字是thisResult变量。
当thisResult即将显示在数码管前,程序会将下一次显示的数字通过
图形暗示的形式显示在数码管上。具体程序如何显示暗示图形,
请参阅displayCheat()函数说明。
*/
void getRandomNumber(int minNumber, int maxNumber){thisResult = nextResult; int i; while(i < 15){i = i + 1;nextResult = random(0, 10);displayRandom();         //显示随机图案,混淆注意力delay(50 + i * 10);      //让随机图案显示时间由快到慢,增加混淆displayClear();}displayCheat(nextResult);  //显示作弊图案,用户可通过此函数所显示的图案//获知下次按键后将要出现在LED数码管上的数字。  //此图案是在用户每次按下按键后显示新的数字//前的最后一次图案显示delay(500);displayClear();
}//根据参数数值在LED数码管上显示数字
void displayNumber(int ledNumber){     switch(ledNumber){case 1:  //显示1digitalWrite(4, HIGH);digitalWrite(7, HIGH); break;   case 2:  //显示2digitalWrite(3, HIGH);digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(8, HIGH); digitalWrite(9, HIGH); break;   case 3:   //显示3digitalWrite(3, HIGH);digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(7, HIGH); digitalWrite(8, HIGH); break;   case 4:  //显示4digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(7, HIGH); break;  case 5:  //显示5digitalWrite(3, HIGH);digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(7, HIGH); digitalWrite(8, HIGH); break;case 6:  //显示6digitalWrite(3, HIGH);digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(7, HIGH); digitalWrite(8, HIGH); digitalWrite(9, HIGH); break;    case 7:  //显示7digitalWrite(3, HIGH);digitalWrite(4, HIGH); digitalWrite(7, HIGH);  break;case 8:  //显示8digitalWrite(3, HIGH);digitalWrite(4, HIGH);digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(7, HIGH); digitalWrite(8, HIGH); digitalWrite(9, HIGH); break;case 9:  //显示9digitalWrite(3, HIGH);digitalWrite(4, HIGH);digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(7, HIGH); digitalWrite(8, HIGH); break;case 0:  //显示默认digitalWrite(3, HIGH);digitalWrite(4, HIGH);digitalWrite(6, HIGH); digitalWrite(7, HIGH); digitalWrite(8, HIGH); digitalWrite(9, HIGH); break;default:digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(7, HIGH); digitalWrite(8, HIGH);  digitalWrite(9, HIGH);   }
}//清理显示内容
void displayClear(){digitalWrite(3, LOW);digitalWrite(4, LOW);digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(9, LOW); 
}//显示随机图案以混淆注意力
//使作弊图案显示时不易察觉。
void displayRandom(){int randomPin = random(3,9);digitalWrite(randomPin, HIGH);  
}//显示作弊图案。
void displayCheat(int number){switch(number){case 1:  // 显示数字1作弊图案digitalWrite(3, HIGH);break;   case 2:  // 显示数字2作弊图案digitalWrite(6, HIGH); break;   case 3:  // 显示数字3作弊图案digitalWrite(4, HIGH); ;break;   case 4:  // 显示数字4作弊图案digitalWrite(5, HIGH); break;  case 5:  // 显示数字5作弊图案digitalWrite(9, HIGH); break;case 6:  // 显示数字6作弊图案digitalWrite(7, HIGH);   break;    case 7: // 显示数字7作弊图案digitalWrite(8, HIGH);break;case 8: // 显示数字8作弊图案digitalWrite(6, HIGH);digitalWrite(4, HIGH);break;case 9: // 显示数字9作弊图案digitalWrite(9, HIGH);digitalWrite(7, HIGH);break;case 0: // 显示数字0作弊图案digitalWrite(3, HIGH);digitalWrite(8, HIGH); break;}
}

相关文章:

arduino程序-MC猜数字5、6(基础知识)

arduino程序-MC猜数字5、6&#xff08;基础知识&#xff09; 1-23 MC猜数字-5 自定义函数自定义函数自定义清理显示内容函数displayClear&#xff08;&#xff09;带参数函数displayNumber带参数、返回值的函数 1-24 MC猜数字-6 完成制作显示0~9数字函数改造产生随机数字函数改…...

【笔记】如何在ps里调整贴图

如图我想要在ps里把角上半部分画成绿色 1.打开ps&#xff0c;拖进贴图 2.把所有图层全选复制&#xff0c;除了实体、选择、背景和uv图层 3.把这些图层合并 4.自己手动选上半部分角 按shift加选 alt减选 5. 这里可以调整饱和度、色相、明度 6. 选好之后用羽化之后边缘会…...

【C++11】深度解析--异步操作(什么是异步?异步有那些操作?异步操作有什么用呢?)

目录 一、前言 二、什么是异步操作呢&#xff1f; &#x1f525;异步的概念&#x1f525; &#x1f525;异步的生活案例说明&#x1f525; 三、异步有那些操作呢&#xff1f; &#x1f525;std::future&#x1f525; &#x1f4a2;std::future 的概念&#x1f4a2; &a…...

PHP苹果 V X iPhone微商i o s多分开V X语音转发密友朋友圈一键跟圈软件

苹果VX神器&#xff01;iPhone微商必备&#xff1a;ios多开、VX语音转发、密友朋友圈一键跟圈软件大揭秘&#xff01; 一、iOS多开新境界&#xff0c;工作生活两不误&#xff01; 你是不是也烦恼过&#xff0c;想要在工作号和生活号之间自由切换&#xff0c;却因为iPhone的限制…...

LDR6020 iPad皮套一体式键盘充电方案解析

在移动办公与学习的浪潮中&#xff0c;iPad凭借其强大的性能与便携性&#xff0c;成为了越来越多人的首选设备。然而&#xff0c;随着工作与学习任务的日益复杂&#xff0c;单一的触控操作已难以满足高效、精准的需求。因此&#xff0c;搭配一款优秀的键盘成为了提升iPad使用体…...

一款功能强大且免费的跨平台图片批量处理工具

XnConvert是一款功能强大且免费的跨平台图片批量处理工具&#xff0c;广泛应用于个人用户、教育机构和非营利组织。它支持超过500种图片格式&#xff0c;包括常见的JPEG、PNG、TIFF、GIF、WebP、PSD、JPEG2000等&#xff0c;并能够导出为大约70种不同的文件格式。 该软件的主要…...

用Python打造精彩动画与视频,4.2 特效和滤镜的使用

第四章&#xff1a;深入MoviePy 4.2 特效和滤镜的使用 在视频制作和编辑过程中&#xff0c;特效和滤镜是不可或缺的元素。它们不仅能增强视觉效果&#xff0c;还能赋予视频独特的风格和情感。MoviePy 作为一个功能强大的视频编辑库&#xff0c;提供了多种内置的特效和滤镜&…...

在 iOS 系统中,如何设置才能更好地保护个人隐私?

在iOS系统中&#xff0c;有一些设置和功能可以帮助您更好地保护个人隐私。以下是一些建议&#xff1a; 使用设备锁&#xff1a;设置一个强密码、Touch ID或Face ID来锁定您的设备。这可以防止其他人访问您的设备和个人信息。 更新软件&#xff1a;及时更新您的iOS系统和应用程…...

Charles抓包工具系列文章(七)-- Rewrite工具的应用示例

一、背景 客户端通过域名访问后端服务,在api网关层,会判断path的前缀,默认/api开头的请求都转发至后端服务A。 当前缀是/assist/api开头,请求将转发至后端服务B(部署在192.168.80.226,便于测试对比) 在不改动kong网关配置的情况下,现需要把后者的请求转发至192.168.…...

国内SSL证书颁发机构哪家服务更优质?

SSL证书作为保障网站数据传输安全的关键工具&#xff0c;其重要性不言而喻。选择一个可靠的SSL证书代理商&#xff0c;不仅能够提供多样化的证书类型&#xff0c;而且能在众多品牌中进行比较&#xff0c;选择最适合自己的、性价比更高的产品。此外&#xff0c;优质的代理商还能…...

鸿蒙系统开发【设备安全服务-应用设备状态检测】安全

设备安全服务-应用设备状态检测 介绍 本示例向您介绍如何在应用中获取DeviceToken用于对应用的设备状态进行检测。 需要使用设备安全服务接口 kit.DeviceSecurityKit。 效果预览 Sample工程的配置与使用 在DevEco中配置Sample工程的步骤如下 [创建项目]及[应用]。打开Sam…...

19个运维工程师面试集锦

第一部分&#xff1a;Linux基础 题目1&#xff1a; 有一百个图片文件&#xff0c;它们的地址都是 http://down.xiaomi.com/img/1.png http://down.xiaomi.com/img/2.png … 一直到 http://down.xiaomi.com/img/100.png 如何批量下载这100个图片文件&#xff0c;并找出其中大…...

一芯解锁「看家」新体验,航芯高性价比猫眼智能锁方案,让安全看得见!

随着智能门锁市场规模逐年递增&#xff0c;行业“内卷”也持续激烈。伴随着一路加码的功能卖点&#xff0c;智能门锁制造商正面临着产品功能芯片增多和成本优化的双重挑战。消费者不仅追求易用性、智能化和美观性&#xff0c;更期待产品具有良好的性价比。 而在智能门锁的众多…...

IPv4 vs IPv6:了解这两大协议的关键差异

我发现&#xff0c;很多找代理IP的朋友在后台问我的问题都很相似&#xff01;都被配置IP的最后一步&#xff1a;选择IPv4还是IPv6&#xff1f;给难住了。昨晚我一晚没睡&#xff0c;终于整理出对IPv4和IPv6的对比总结&#xff0c;从概念阐述到特点对比&#xff0c;再解答IPv6总…...

C#知识|XML文件操作

哈喽,你好啊,我是雷工! 之前有朋友在群里聊XML文件操作的问题,今天正好学习相关内容, 以下为学习笔记。 01 XML介绍 ①:XML是eXtensible Markup Language的缩写,即扩展标记语言。 ②:XML是一种可以用来创建自定义的标记语言,由W3C(万维网协会)创建,用来克服HTML的局…...

TCP 和 UDP 之间的区别?

从 连接&#xff0c;可靠性&#xff0c;传输方式等方面&#xff1a; TCP 是面向连接的协议&#xff0c;在发送数据的时候需要先通过 TCP 的三次握手&#xff0c;而 UDP 是无连接的协议&#xff0c;可以直接传输数据TCP 通过超时重传&#xff0c;流量控制和拥塞控制等方法保障了…...

共用体、枚举类型、typedef定义,位运算

共用体 union 共用体名 { 数据类型1 成员变量1; 数据类型2 成员变量2; 数据类型3 成员变量3; ... }; 共用体所有成员变量&#xff0c;所占空间重叠&#xff0c;占共同的空间。 枚举 将变量的值一一列举出来。 enum 枚举类型名…...

【运维】Linux如何批量解压文件夹下的很多个`.tar.gz`文件

要在Linux中批量解压这些.tar.gz文件&#xff0c;你可以使用tar命令配合find或者bash的通配符功能。这里是一个简单的步骤来解压所有这些.tar.gz文件&#xff1a; 方法 1: 使用 find 命令 find . -type f -name "*.tar.gz" -exec tar -xzvf {} \;这个命令的意思是从…...

centos9安装jumpserver并导入域用户

jumpserver是使用最广泛的开源堡垒机&#xff0c;依赖 mysql/mariadb、postgresql、redis 3个数据库。 当前版本为 4.0.1&#xff0c;安装包&#xff1a; jumpserver-ce-v4.0.1-x86_64.tar.gz 0、安装centos9&#xff0c;安装docker 1、解压安装包 cd /opt tar -xf jumpser…...

将一批 csv 的第一行抄进 Excel

某目录下有一批结构相同的 csv 文件&#xff1a; stock_301500.csvstock_320688.csv CODE,DT,OP,CL 301500,2023-06-02,71,67.8 301500,2023-06-05,79.35,72.61 301500,2023-06-06,75.8,77.65 CODE,DT,OP,CL 320688,2023-06-02,33,32 320688,2023-06-05,28.37,30.23 320688,2…...

从零实现一个高性能C++线性代数库:挑战Eigen的80%性能只用1000行代码

前言 线性代数库是科学计算、机器学习、图形学和机器人领域的基石。当提到C线性代数库时&#xff0c;Eigen几乎是无可争议的王者——15年开发历史、百万行代码、工业级稳定性。但你有没有想过&#xff0c;用1000行代码能实现Eigen多少功能&#xff1f;性能又能达到什么水平&am…...

实战部署:基于PVE与Ceph构建高可用超融合集群的完整测试记录

1. 环境准备与硬件规划 这次我用三台二手服务器搭建PVECeph超融合集群&#xff0c;硬件配置特意模拟了中小企业常见场景。每台机器都是16核CPU64G内存&#xff0c;存储方面做了分层设计&#xff1a;256G固态做系统盘&#xff0c;1T机械硬盘和500G固态用于Ceph OSD。网络方面虽然…...

信号完整性(SIPI)实战解析:高速设计中的串扰抑制策略

1. 串扰的本质与高速设计的挑战 当你把两根电线靠得太近时&#xff0c;总会听到"滋滋"的干扰声——这就是生活中最常见的串扰现象。在高速PCB设计中&#xff0c;这种干扰被放大了无数倍。我最近调试一块DDR5内存板时就深有体会&#xff1a;当数据速率冲到6400Mbps时&…...

深入解析nn.Linear():二维与三维张量的高效处理

1. 揭开nn.Linear()的神秘面纱 第一次接触PyTorch的nn.Linear()时&#xff0c;我完全被这个看似简单的函数搞懵了。官方文档只说它是"对输入数据做线性变换"&#xff0c;但具体怎么变换、能处理哪些数据却语焉不详。直到在实际项目中踩了几个坑&#xff0c;我才真正理…...

DeepSeek-OCR-2保姆级教程:Docker Compose编排OCR+PostgreSQL元数据服务

DeepSeek-OCR-2保姆级教程&#xff1a;Docker Compose编排OCRPostgreSQL元数据服务 1. 教程概述 1.1 学习目标 通过本教程&#xff0c;你将学会如何使用Docker Compose一键部署DeepSeek-OCR-2完整服务&#xff0c;包括OCR识别引擎、vLLM推理加速、Gradio前端界面以及Postgre…...

PCB为何普遍采用偶数层设计?揭秘制造、热应力与SMT适配性根源

1. PCB多层板为何普遍采用偶数层设计&#xff1f;在高密度互连电路板的设计实践中&#xff0c;工程师常观察到一个显著现象&#xff1a;四层、六层、八层等偶数层PCB占据绝对主流&#xff0c;而三层、五层、七层等奇数层结构极为罕见。这种设计倾向并非源于电气性能的先天限制—…...

安卓机型基带修复与串码修改实战指南:从端口开启到QCN写入

1. 安卓基带丢失的常见原因与初步排查 遇到手机突然没信号、IMEI显示未知&#xff1f;这大概率是基带丢失了。我修过上百台这类故障机&#xff0c;80%都是刷机或系统升级导致的。上周刚接手一台红米Note 9 Pro&#xff0c;机主刷了第三方ROM后直接"无服务"&#xff0…...

5分钟部署DeepSeek-R1-Distill-Qwen-7B:轻松玩转AI文本生成

5分钟部署DeepSeek-R1-Distill-Qwen-7B&#xff1a;轻松玩转AI文本生成 1. 模型简介 DeepSeek-R1-Distill-Qwen-7B是基于DeepSeek-R1模型蒸馏而来的轻量级文本生成模型。作为DeepSeek系列的一员&#xff0c;它继承了原模型在数学、代码和推理任务上的优秀表现&#xff0c;同时…...

从WAV到蜂鸣器:手把手教你用STM32F103 DAC播放自定义音频片段(基于HAL库)

从WAV到蜂鸣器&#xff1a;STM32F103 DAC音频播放全流程实战指南 在嵌入式开发中&#xff0c;实现自定义音频播放是一个既实用又有趣的项目。无论是产品开机提示音、报警音效&#xff0c;还是简单的音乐片段播放&#xff0c;掌握DAC音频输出技术都能为你的项目增添独特个性。本…...

Python脚本自动化清理低清视频:用OpenCV批量检测并删除720p以下文件

Python自动化视频管家&#xff1a;用OpenCV智能清理低分辨率视频 每次打开硬盘看到那些模糊不清的老视频&#xff0c;就像面对一柜子舍不得扔的旧衣服。它们占据着宝贵的存储空间&#xff0c;却很少被使用。作为影视爱好者或内容创作者&#xff0c;我们需要的不是简单的批量删除…...