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

news2024/11/15 21:37:35

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:  //显示1
      digitalWrite(4, HIGH);
      digitalWrite(7, HIGH); 
      break;   
    case 2:  //显示2
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH); 
      digitalWrite(5, HIGH); 
      digitalWrite(8, HIGH); 
      digitalWrite(9, HIGH); 
      break;   
    case 3:   //显示3
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH); 
      digitalWrite(5, HIGH); 
      digitalWrite(7, HIGH); 
      digitalWrite(8, HIGH); 
      break;   
    case 4:  //显示4
      digitalWrite(4, HIGH); 
      digitalWrite(5, HIGH); 
      digitalWrite(6, HIGH); 
      digitalWrite(7, HIGH); 
      break;  
    case 5:  //显示5
      digitalWrite(3, HIGH);
      digitalWrite(5, HIGH); 
      digitalWrite(6, HIGH); 
      digitalWrite(7, HIGH); 
      digitalWrite(8, HIGH); 
      break;
    case 6:  //显示6
      digitalWrite(3, HIGH);
      digitalWrite(5, HIGH); 
      digitalWrite(6, HIGH); 
      digitalWrite(7, HIGH); 
      digitalWrite(8, HIGH); 
      digitalWrite(9, HIGH); 
      break;    
    case 7:  //显示7
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH); 
      digitalWrite(7, HIGH);  
      break;
    case 8:  //显示8
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH);
      digitalWrite(5, HIGH); 
      digitalWrite(6, HIGH); 
      digitalWrite(7, HIGH); 
      digitalWrite(8, HIGH); 
      digitalWrite(9, HIGH); 
      break;
    case 9:  //显示9
      digitalWrite(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;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1971568.html

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

相关文章

嵌入式人工智能(42-基于树莓派4B的红外遥控)

1、简介 红外遥控想必对大家来说都不陌生&#xff0c;红外也属于无线通信的一种&#xff0c;只要是无线通信&#xff0c;必然要用电磁波&#xff0c;要理解无线通信的本质和原理&#xff0c;不管用哪个频段都要学习电磁场与电磁波&#xff0c;这是一个难度很大的课&#xff0c…

IT事件经理在数字企业中的角色和责任

什么是IT事件经理&#xff1f; IT事件经理有时也被称为事件指挥官&#xff0c;他们承担着管理组织事件响应的总体责任&#xff0c;从委派各种事件响应任务到与每个利益相关者进行沟通和协调。 示例&#xff1a;当一个全球性的电子商务平台在一次销售活动中流量激增&#xff0c…

George Danezis谈Mysticeti的共识性能

Sui的新共识引擎Mysticeti已经在主网上开始分阶段推出。Mysten Labs联合创始人兼首席科学家George Danezis在采访中&#xff0c;讨论了其低延迟如何通过高性能应用程序提升用户体验。 采访视频&#xff1a; https://youtu.be/WHvtPQUa2Q0 中文译文&#xff1a;延迟和吞吐量对…

LSTM与GNN强强结合!全新架构带来10倍推理速度提升

今天来推荐一个深度学习领域很有创新性的研究方向&#xff1a;LSTM结合GNN。 GNN擅长处理图数据关系和特征&#xff0c;而LSTM擅长处理时间序列数据及长期依赖关系。通过将两者结合&#xff0c;我们可以有效提升时间序列预测的准确性和效率&#xff0c;尤其是在处理空间和时间…

手搓交换排序、归并排序、计数排序

文章目录 交换排序冒泡排序快速排序hoare版本挖坑法lomuto前后指针 非递归快速排序 归并排序实现计数实现排序代码测试排序算法性能 交换排序 冒泡排序 void BubbleSort(int* arr, int n) {for (int i 0; i < n; i){int flag 0;for (int j 0; j < n - i - 1; j){if …

day13 Java基础——逻辑运算符,位运算符及面试题

day13 Java基础——逻辑运算符&#xff0c;位运算符及面试题 1. 逻辑运算符&#xff1a;与&#xff0c;或&#xff0c;非 package operator;public class Demo07 {public static void main(String[] args) {boolean a true;boolean b false;System.out.println("a &…

【网络问题】网络诊断:远程计算机或设备将不接受连接的解决办法/DNS服务器可能不可用

当网络出现问题时&#xff0c;一定要点击“请尝试运行Windows网络诊断”来获取具体的网络问题&#xff0c; 今天碰到且得以解决的两个问题&#xff1a; 一、远程计算机或设备将不接受连接的解决办法 打开控制面板——点击“网络和Internet”——点击“Internet选项”&#xf…

电脑自动重启是什么原因?重启原因排查和解决办法!

当你的电脑突然毫无预警地自动重启&#xff0c;不仅打断了工作流程&#xff0c;还可能导致未保存的数据丢失&#xff0c;这无疑令人很懊恼&#xff0c;那么&#xff0c;电脑自动重启是什么原因呢&#xff1f;有什么方法可以解决呢&#xff1f;别担心&#xff0c;在大多数情况下…

《从零开始:使用Python构建简单Web爬虫》

前言 随着互联网信息的爆炸性增长&#xff0c;如何高效地获取和处理这些数据变得越来越重要。Web爬虫作为一种自动化工具&#xff0c;可以帮助我们快速抓取所需的网页内容。本文将介绍如何使用Python编写一个简单的Web爬虫&#xff0c;并通过实例演示其基本用法。 准备工作 …

创建互动照片墙:HTML、CSS 和 JavaScript 实战

在这个数字化时代&#xff0c;照片已经成为我们生活中不可或缺的一部分。无论是记录重要时刻&#xff0c;还是分享日常生活&#xff0c;我们都离不开照片。今天&#xff0c;我们将一起探索如何使用 HTML、CSS 和 JavaScript 创建一个互动的照片墙程序&#xff0c;让您可以轻松展…

四步构建App跨渠道归因分析方法

通常来讲&#xff0c;在互联网场景中&#xff0c;最简单也最常用的App归因模型就是基于最后一次点击来源进行归因转化&#xff0c;因为越靠近决策环节的时刻通常影响就越大。 不过有机构对营销测量的研究发现&#xff0c;只有11%的营销人员对他们的归因模型的准确性感到“非常…

大语言模型(LLM)快速理解

自2022年&#xff0c;ChatGPT发布之后&#xff0c;大语言模型&#xff08;Large Language Model&#xff09;&#xff0c;简称LLM掀起了一波狂潮。作为学习理解LLM的开始&#xff0c;先来整体理解一下大语言模型。 一、发展历史 大语言模型的发展历史可以追溯到早期的语言模型…

视频孪生:如何有效利用智慧机房里的视频监控系统?

机房是存储设备和数据的重要场所。常见的机房安全隐患有电源不稳定、设备温度异常、空调及新风系统故障、机房漏水等&#xff0c;因此需要管理人员全天轮班值守巡检。传统机房运维工作繁琐且效率低下&#xff0c;对监控设备的利用率不高&#xff0c;而视频孪生技术能很好地解决…

02 pip指令的使用

pip 是一个现代的&#xff0c;通用的 Python 包管理工具 。提供了对Python 包的查找、下载、安装、卸载的功能。 1. 在安装好的python环境下&#xff0c;进入以下目录可以查看到pip命令。 同样在windows命令窗口进行测试&#xff0c;pip命令是否可用。WindowsR键&#xff0c;使…

“职场中,不要和上司作对”,真的很重要吗?你认同这句话吗?

在职场上&#xff0c;领导对下属的期望永远都只有两个字&#xff0c;不是忠诚&#xff0c;也不是能力&#xff0c;而是省心。 领导对下属的要求就是别让我操心。 在职场中&#xff0c;通常面临的首要问题就是如何与领导相处。 把职场中的前辈当作老师来尊重&#xff0c;你尊…

基础复习(多线程)

线程创建方式 1.继承Thread类 2.实现Runable接口 3.Callable接口实现有返回值的线程 &#xff08;1&#xff09;第一种 提供了一个类叫做Thread&#xff0c;此类的对象用来表示线程。创建线程并执行线程的步骤如下 1.定义一个子类继承Thread类&#xff0c;并重写run方法 2.创建…

无密码sudo

文件路径&#xff1a;/etc/sudoers 修改sudoers文件 进去root 权限&#xff1a;sudo su 加入sudoers 写权限&#xff1a;chmod w sudoers 修改sudoers文件&#xff1a;vim sudoers 根据下面图片修改 wq退出编辑

华为LTC流程体系详解

LTC&#xff0c;全称Lead to Cash&#xff0c;中文翻译为从线索到现金&#xff0c;是一种企业运营管理思想&#xff0c;也是一个集成的业务流程。它涵盖了企业从接触客户到收到客户回款的整个流程&#xff0c;通过科学化管理&#xff0c;实现更高效地将线索客户转化为付费客户。…

学习web前端三大件之HTML篇

HTML的全称为超文本标记语言&#xff0c;是一种标记语言。它包括一系列标签&#xff0c;通过这些标签可以将网络上的文档格式统一&#xff0c;使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本&#xff0c;HTML命令可以说明文字&#xff0c;图形…

每日一面系列之美团面试拷打:ConcurrentHashMap 为何不能插入 null?HashMap 为何可以

ConcurrentHashMap 为什么 key 和 value 不能为 null&#xff1f; ConcurrentHashMap 的 key 和 value 不能为 null 主要是为了避免二义性。null 是一个特殊的值&#xff0c;表示没有对象或没有引用。如果你用 null 作为键&#xff0c;那么你就无法区分这个键是否存在于 Concu…