【雕爷学编程】Arduino 手册之随机数 random()

本文介绍了Arduino——一个开源的电子原型平台,其应用范围广泛,包括传感器控制、灯光和设备操控。重点讲解了random()随机数函数及其在游戏开发、模拟实验和数据分析中的应用。
摘要由CSDN通过智能技术生成

在这里插入图片描述
在这里插入图片描述
什么是Arduino?
Arduino 是一款开源的电子原型平台,它可以让你用简单的硬件和软件来创建各种创意的项目。无论你是初学者还是专家,Arduino 都能为你提供无限的可能性。你可以用 Arduino 来控制传感器、灯光、马达、机器人、物联网设备等等,只要你能想到的,Arduino 都能帮你实现。

如果你想了解更多关于 Arduino 的信息,你可以访问 Arduino 的官方网站,那里有丰富的资源和教程供你参考。你也可以加入 Arduino 的社区,和来自世界各地的爱好者、学生、设计师和工程师交流心得和经验。此外,你还可以使用 Arduino 的在线编程工具,在云端编写代码并上传到你的开发板上。

Arduino 是一个不断发展和创新的平台,它有着广泛的应用领域和潜力。这里希望本手册能激发你对 Arduino 的兴趣和热情,让你享受 Arduino 带来的创造力和乐趣

在这里插入图片描述

维基百科的定义
Arduino 是一个开源嵌入式硬件平台,用来供用户制作可交互式的嵌入式项目。此外 Arduino 作为一个开源硬件和开源软件的公司,同时兼有项目和用户社群。该公司负责设计和制造Arduino电路板及相关附件。这些产品按照GNU宽通用公共许可证(LGPL)或GNU通用公共许可证(GPL)许可的开源硬件和软件分发的,Arduino 允许任何人制造 Arduino 板和软件分发。 Arduino 板可以以预装的形式商业销售,也可以作为 DIY 套件购买。

Arduino 2005 年时面世,作为意大利伊夫雷亚地区伊夫雷亚互动设计研究所的学生设计,目的是为新手和专业人员提供一种低成本且简单的方法,以建立使用传感器与环境相互作用的装置。初学者和爱好者可用Arduino制造传感器、简单机器人、恒温器和运动检测器等装置。

Arduino 这个名字来自意大利伊夫雷亚的一家酒吧,该项目的一些创始人过去常常会去这家酒吧。 酒吧以伊夫雷亚的 Arduin(Arduin of Ivrea)命名,他是伊夫雷亚边疆伯爵,也是 1002 年至 1014 年期间的意大利国王。

在这里插入图片描述

十九、Arduino随机数 random()
random() 是 Arduino 随机数库中的一个函数,它的作用是生成一个随机数。随机数是一个无序的、不可预测的数,可以用于实现一些不确定性或者变化性的功能。random() 函数有两种语法,分别是 random(max) 和 random(min, max)。其中 max 是一个无符号的长整数,表示随机数的最大值(不包含);min 是一个无符号的长整数,表示随机数的最小值(包含)。random() 函数返回一个 long 类型的数,表示生成的随机数。

当涉及到Arduino的随机数函数random()时,它用于生成随机数。random()函数常用于需要随机性的应用中,例如游戏、模拟和随机操作等。

在Arduino中,random()函数的用法如下:

long random(long max);
long random(long min, long max);

这个函数可以有两种方式使用:

当只传入一个参数max时,函数将返回0到max-1之间的一个随机数。
当传入两个参数min和max时,函数将返回min到max-1之间的一个随机数。

random() 函数的适用范围主要是在需要使用随机数来实现一些不确定性或者变化性的功能时。例如,如果需要让一个 LED 灯以随机的颜色闪烁,可以使用 random() 函数来生成 0 到 255 之间的随机数,然后使用 analogWrite() 函数来控制 LED 灯的颜色;如果需要让一个蜂鸣器以随机的频率发出声音,可以使用 random() 函数来生成 100 到 1000 赫兹之间的随机数,然后使用 tone() 函数来控制蜂鸣器的声音。

应用场景:
1)游戏开发:在游戏开发中,随机数经常被用于创建随机的游戏场景、敌人的行为、道具的出现等。通过使用random()函数生成随机数,可以增加游戏的变化性和挑战性。
2)模拟实验:模拟实验需要模拟真实世界的随机性和变化性。例如,在飞行模拟器中,可以使用随机数生成不同的风向和强度,以模拟不同的飞行条件。random()函数可以用于生成这样的随机数。
3)随机操作:在某些情况下,需要进行随机操作,例如随机选择一个选项、随机排序数据等。random()函数可以用于生成随机的索引、位置或顺序,从而实现这些随机操作。

random() 函数的注意事项有以下几点:
1)random() 函数只能用于无符号的长整数类型,即 unsigned long。如果用于其他类型,会导致编译错误或者不正确的结果。
2)random() 函数不会改变原始数的值和类型,只会返回一个新的 long 类型的数。
3)random() 函数不会检查原始数是否有效,即是否为 NaN 或者无穷大。如果需要检查这些情况,可以使用其他函数,如 isnan() 和 isinf()。
4)random() 函数不需要引入 Arduino 随机数库 random.h 才能使用,因为它是 Arduino 核心库中的一部分。
5)random() 函数在没有设置随机数生成器的种子时会产生相同的随机数序列。这意味着如果每次都没有设置种子,那么每次得到的随机数都是一样的。为了避免这种情况,可以使用 randomSeed() 函数来设置随机数生成器的种子,或者使用一些变化的值作为种子,如模拟引脚上的噪声或者 millis() 函数返回的毫秒数。

random() 函数的三个实际运用程序案例如下:
案例一:让一个 LED 灯以随机的颜色闪烁。可以使用 random() 函数来生成 0 到 255 之间的随机数,然后使用 analogWrite() 函数来控制 LED 灯的颜色。

// 定义三个变量表示 LED 灯连接的模拟引脚
int redPin = A0;
int greenPin = A1;
int bluePin = A2;

// 在 setup() 函数中设置模拟引脚为输出模式,并使用模拟引脚 A3 上的噪声作为随机数生成器的种子
void setup() {
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  // 读取模拟引脚 A3 上的噪声值
  int noise = analogRead(A3);
  // 使用噪声值作为随机数生成器的种子
  randomSeed(noise);
}

// 在 loop() 函数中生成随机颜色,并让 LED 灯以该颜色闪烁
void loop() {
  // 生成 0 到 255 之间的随机红色分量
  int red = random(0, 256);
  // 生成 0 到 255 之间的随机绿色分量
  int green = random(0, 256);
  // 生成 0 到 255 之间的随机蓝色分量
  int blue = random(0, 256);
  // 将红色分量写入到模拟引脚上
  analogWrite(redPin, red);
  // 将绿色分量写入到模拟引脚上
  analogWrite(greenPin, green);
  // 将蓝色分量写入到模拟引脚上
  analogWrite(bluePin, blue);
  // 延时 500 毫秒
  delay(500);
}

案例二:让一个蜂鸣器以随机的频率发出声音。可以使用 random() 函数来生成 100 到 1000 赫兹之间的随机数,然后使用 tone() 函数来控制蜂鸣器的声音。

// 定义一个变量表示蜂鸣器连接的数字引脚
int pin = 8;

// 在 setup() 函数中设置数字引脚为输出模式,并使用 millis() 函数返回的毫秒数作为随机数生成器的种子
void setup() {
  pinMode(pin, OUTPUT);
  // 获取当前时间,单位为毫秒
  unsigned long time = millis();
  // 使用时间作为随机数生成器的种子
  randomSeed(time);
}

// 在 loop() 函数中生成随机频率,并让蜂鸣器以该频率发出声音
void loop() {
  // 生成 100 到 1000 赫兹之间的随机频率
  int frequency = random(100, 1000);
  // 让蜂鸣器以 frequency 赫兹的频率发出声音
  tone(pin, frequency);
  // 延时 500 毫秒
  delay(500);
}

案例三:实现一个浮点数的随机波发生器。可以使用 random() 函数来生成 -1 到 1 之间的随机浮点数,然后输出到模拟引脚 A0 上。

// 定义一个变量表示输出的模拟引脚
int pin = A0;

// 在 setup() 函数中设置模拟引脚为输出模式,并使用模拟引脚 A0 上的噪声作为随机数生成器的种子
void setup() {
  pinMode(pin, OUTPUT);
  // 读取模拟引脚 A0 上的噪声值
  int noise = analogRead(A0);
  // 使用噪声值作为随机数生成器的种子
  randomSeed(noise);
}

// 在 loop() 函数中生成随机浮点数,并输出到模拟引脚上
void loop() {
  // 生成 -1 到 1 之间的随机浮点数
  float value = random(-1000, 1000) / 1000.0;
  // 将浮点数映射到 0 到 255 的范围,用于模拟输出
  int output = map(value, -1, 1, 0, 255);
  // 将输出值写入到模拟引脚上
  analogWrite(pin, output);
}

案例四:游戏开发

void setup() {
  randomSeed(analogRead(A0));  // 设置随机数生成器种子

  // 进行其他初始化操作
  // ...
}

void loop() {
  // 生成随机的游戏场景
  int randomScene = random(1, 4);  // 生成1到3之间的随机数

  // 根据随机场景进行游戏逻辑处理
  switch (randomScene) {
    case 1:
      // 处理第一个场景
      break;
    case 2:
      // 处理第二个场景
      break;
    case 3:
      // 处理第三个场景
      break;
    default:
      // 处理默认情况
      break;
  }

  // 进行其他游戏操作
  // ...
}

案例五:模拟实验

void setup() {
  randomSeed(analogRead(A0));  // 设置随机数生成器种子

  // 进行其他初始化操作
  // ...
}

void loop() {
  // 模拟飞行条件
  int windDirection = random(0, 360);  // 生成0到359之间的随机数
  float windIntensity = random(0, 20) / 10.0;  // 生成0.0到2.0之间的随机数

  // 使用随机风向和风力进行飞行模拟
  // ...
}

案例六:随机操作

void setup() {
  randomSeed(analogRead(A0));  // 设置随机数生成器种子

  // 进行其他初始化操作
  // ...
}

void loop() {
  // 随机选择一个选项
  int randomOption = random(1, 4);  // 生成1到3之间的随机数

  // 根据随机选项进行相应操作
  switch (randomOption) {
    case 1:
      // 执行选项1的操作
      break;
    case 2:
      // 执行选项2的操作
      break;
    case 3:
      // 执行选项3的操作
      break;
    default:
      // 处理默认情况
      break;
  }

  // 进行其他随机操作
  // ...
}

案例七:游戏开发:

void setup() {
  // ...
}

void loop() {
  int randomEnemyPositionX = random(0, 128); // 生成0到127之间的随机整数
  int randomEnemyPositionY = random(0, 64);  // 生成0到63之间的随机整数

  // 在指定位置生成敌人
  // ...
}

在这个案例中,通过调用random()函数生成指定范围内的随机整数,用于生成敌人在游戏中的随机位置。

案例八:模拟和实验:

void setup() {
  // ...
}

void loop() {
  float randomSensorValue = random(0, 1000) / 1000.0; // 生成0到0.999之间的随机浮点数

  // 模拟传感器读数
  // ...
}

在这个案例中,通过调用random()函数生成指定范围内的随机整数,并除以1000.0将其转换为0到0.999之间的随机浮点数,用于模拟传感器的随机读数。

案例九:数据分析和统计:

void setup() {
  // ...
}

void loop() {
  int randomSample = random(1, 7); // 生成1到6之间的随机整数,模拟骰子的随机投掷

  // 统计随机样本
  // ...
}

在这个案例中,通过调用random()函数生成指定范围内的随机整数,用于模拟骰子的随机投掷,并进行随机样本的统计。

这些案例展示了random()函数在Arduino中的应用,包括游戏开发、模拟和实验以及数据分析和统计。但需要注意的是,在使用random()函数时需要确randomSeed()函数是Arduino中的一个函数,用于设置随机数生成器的种子。它接受一个整数参数作为种子值,在生成随机数之前,将该种子值作为起点来生成随机序列。

在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
雕爷学编程Arduino动手做寻迹的实验可以使用TCRT5000红外反射光电开关寻迹传感器模块。这个传感器模块可以通过检测周围的光反射来进行寻迹操作。你可以将这个模块连接到mBot的主控板mCore V1.5的RJ25接口上,因为mBot的主控板兼容Arduino系统,所以你可以使用Arduino编程语言来控制mBot进行寻迹操作。请参考【Arduino】168种传感器模块系列实验中的实验六十六,该实验详细介绍了如何使用TCRT5000红外反射光电开关寻迹传感器模块进行寻迹。祝你成功完成实验!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【雕爷学编程Arduino动手做(194)---makeblock mbot 主控板2](https://blog.csdn.net/weixin_41659040/article/details/132141677)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [【雕爷学编程Arduino动手做(65)---红外寻迹传感器](https://blog.csdn.net/weixin_41659040/article/details/106604080)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值