Arduino基础入门篇15—随机骰子

上一篇介绍了数码管的使用,一位数码管可显示数字0到9。本篇使用random()函数产生随机数并在数码管上进行显示,制作一个随机骰子。

在Arduino中,random()函数用来产生伪随机数,可以传入一个区间,产生此区间内的随机数。通常情况下,在使用random()函数之前,需要使用randomSeed()来初始化随机数生成器,指定一个随机数种子。

1. 实验材料

  • Uno R3开发板
  • 配套USB数据线
  • 面包板及配套连接线
  • 共阴极数码管
  • 1个220Ω限流电阻

2. 实验步骤

1. 根据原理图搭建电路。

数码管的A,B,C,D,E,F,G,DP引脚分别接入开发板的数字管脚7,6,5,10,11,8,9,4。数码管公共端接限流电阻,电阻另一端接GND。

实验原理图如下图所示:

实验原理图

实物连接图如下图所示:

实物连接图

2. 新建sketch,拷贝如下代码替换自动生成的代码并进行保存。

/*
   Random
   通过Random随机显示0到9的数字
*/

//设置控制各段的数字IO脚,具体几号引脚对应哪一段,来源为数码管官方引脚图。
int pin_a = 7;
int pin_b = 6;
int pin_c = 5;
int pin_d = 10;
int pin_e = 11;
int pin_f = 8;
int pin_g = 9;
int pin_p = 4;

int num;

//根据共阴极数码管段码表定义0~9显示的各段开关状态
int numTable[10][8] = {
  //1为点亮,0为关闭
  //a  b  c  d  e  f  g  dp
  {1, 1, 1, 1, 1, 1, 0, 0},     //0
  {0, 1, 1, 0, 0, 0, 0, 0},     //1
  {1, 1, 0, 1, 1, 0, 1, 0},     //2
  {1, 1, 1, 1, 0, 0, 1, 0},     //3
  {0, 1, 1, 0, 0, 1, 1, 0},     //4
  {1, 0, 1, 1, 0, 1, 1, 0},     //5
  {1, 0, 1, 1, 1, 1, 1, 0},     //6
  {1, 1, 1, 0, 0, 0, 0, 0},     //7
  {1, 1, 1, 1, 1, 1, 1, 0},     //8
  {1, 1, 1, 1, 0, 1, 1, 0},     //9
};


void setup()
{
  for (int i = 4; i <= 11; i++)
  {
    pinMode(i, OUTPUT); //设置4~11引脚为输出模式
  }

  randomSeed(analogRead(0));
}

//根据索引显示数字
void showNum(int index)
{
  digitalWrite(pin_a, numTable[index][0]); //设置a 引脚的电平
  digitalWrite(pin_b, numTable[index][1]); //设置b 引脚的电平
  digitalWrite(pin_c, numTable[index][2]); //设置c 引脚的电平
  digitalWrite(pin_d, numTable[index][3]); //设置d 引脚的电平
  digitalWrite(pin_e, numTable[index][4]); //设置e 引脚的电平
  digitalWrite(pin_f, numTable[index][5]); //设置f 引脚的电平
  digitalWrite(pin_g, numTable[index][6]); //设置g 引脚的电平
  digitalWrite(pin_p, numTable[index][7]); //设置dp引脚的电平

}

void loop()
{
  num = random(10); //产生随机数
  showNum(num); //显示随机数
  delay(500);
}

3. 连接开发板,设置好对应端口号和开发板类型,进行程序下载。

程序下载

3. 实验现象

随机显示0到9之间的数字。

实验现象

4. 函数介绍

random()

  • 描述:生成伪随机数。
  • 函数原型:
    • random(max)
    • random(min,max)
  • 参数:
    • min: 随机数区间下限值,且包括在内。此参数可选,省略则从0开始。
    • max: 随机数区间上限值,且不包括在内。
  • 返回值:min和max-1之间的随机数。

randomSeed()

  • 描述:初始化随机数生成器。
  • 函数原型:randomSeed(seed)
  • 参数:用于初始化伪随机序列的数字,随机数种子。
  • 返回值:没有。

5. 实验分析

程序中通过randomSeed()函数来初始化随机数生成器。当模拟管脚0悬空时,使用analogRead(0)读取到的是不确定的模拟噪声,用它来做随机种子,可获取到更加理想的随机数。在使用random()函数时,参数中区间上限是不包括在内的。比如想生成[10,20]之间的随机数,则应该这样写:random(10,21)。

更多内容,欢迎关注我的公众号。 微信扫一扫下方二维码即可关注:
扫码加入微信公众号:TonyCode

<think>好的,用户想学习Arduino基础入门知识,特别是第30篇教程。但根据提供的引用资料,目前只有上篇和基础知识篇,分别是引用1和引用2。看起来用户提到的第30篇教程可能不存在于现有资料中,或者还未被索引。 首先,我需要确认用户的需求。他们可能误以为有第30篇教程,或者在其他地方听说过这个编号。需要礼貌地指出当前资料的限制,并提供现有的资源。同时,根据引用1和引用2,可以提取相关信息来帮助用户入门。 接下来,需要按照用户的要求组织回答结构,确保清晰,分步骤解决问题。引用现有的两篇教程,特别是基础知识篇,里面提到了serial.begin、pinMode等函数,这些是Arduino编程的基础。 用户可能刚接触Arduino,所以需要解释基本概念,比如Arduino是什么,如何安装开发环境,以及基本的函数和电路连接。示例代码会很有帮助,比如点亮LED和读取按钮输入,这些都是入门的关键步骤。 最后,生成相关问题,引导用户深入学习,比如开发环境安装、函数使用、常见问题等。确保问题与基础入门相关,并基于现有引用内容。</think>根据当前可查资料,站内暂未收录完整的《Arduino基础入门教程》第30篇内容,但可基于现有资源为您梳理核心知识点并提供学习路径。以下是基础入门关键内容整理: --- ### **一、Arduino基础框架与核心函数** 1. **程序结构** ```arduino void setup() { // 初始化设置(仅执行一次) pinMode(13, OUTPUT); // 设置13号引脚为输出模式[^2] } void loop() { // 主循环(重复执行) digitalWrite(13, HIGH); // 点亮LED delay(1000); // 延时1秒 digitalWrite(13, LOW); // 关闭LED delay(1000); } ``` 2. **常用函数** - `pinMode(pin, mode)`:设置引脚模式(输入`INPUT`/输出`OUTPUT`) - `digitalWrite(pin, value)`:输出数字信号(`HIGH`/`LOW`) - `digitalRead(pin)`:读取数字输入信号 - `Serial.begin(9600)`:初始化串口通信(波特率9600)[^2] - `Serial.println(data)`:通过串口输出数据 --- ### **二、硬件连接基础** 1. **LED控制电路** - 连接方式:LED正极→电阻→Arduino引脚,负极→GND - 示例代码:通过按钮控制LED ```arduino int buttonPin = 2; int ledPin = 13; void setup() { pinMode(buttonPin, INPUT_PULLUP); pinMode(ledPin, OUTPUT); } void loop() { if (digitalRead(buttonPin) == LOW) { digitalWrite(ledPin, HIGH); // 按下按钮时点亮LED } else { digitalWrite(ledPin, LOW); } } ``` --- ### **三、学习建议** 1. **实践步骤** - 安装Arduino IDE(开发环境) - 从基础电路(LED、按钮)开始尝试 - 逐步学习模拟信号(`analogRead()`/`analogWrite()`) 2. **参考教程** - 《Arduino极速入门教程(上)》:快速上手开发流程[^1] - 《零基础入门学Arduino基础知识篇》:掌握引脚操作与串口通信 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值