在这个项目教程中,我们将构建一个超级简单的Arduino骰子电路。这是一个很好的学习项目,也是很多arduino或微控制器新手喜欢做的第一个项目,因为它很容易理解。我们已经添加了一个巧妙的扭转我们的骰子电路,使它更令人兴奋。

Arduino骰子电路

在这个项目中,我们将使用7个led来组成我们的骰子脸,以及一个简单的按钮来激活随机选择和置换我们的数字。我将使用一些非常酷的清晰的蓝色led。当然,我们还需要一些电阻、面包板和电线。

您可以轻松地将此项目带到下一个级别(我们可能会在未来的项目中这样做)通过使多个骰子制作并将其放入3D印刷品案件中!

此项目的零件清单

和往常一样,这里是这个项目的快速部件列表:

数量 部分/链接
1 x Arduino Uno.
1 x USB型B电缆
1 x 无焊料的电路试验板
1 x 跳线电线套件
1 x 领导的工具包
1 x 电阻器套件(220欧姆)

其中一些链接是附属公司。如果你用它们,它就没有成本,但我们得到一个小佣金,这有助于我们为您提供内容!

获得一个极客酒吧Uno!

连接Arduino骰子电路

接线Arduino骰子电路并不比我们更复杂红绿灯项目.我们只是从3个led变成7个,并添加一个简单的按钮来开始这个过程。

我们为这个项目组合了一个超级简单的接线图,使它尽可能简单易懂。以下是你需要做的:

一些更先进的Arduino Hobbyist将立即认识到有更简单的接线方式来减少电线和杂乱。您可能会注意到我们为此项目发布的代码中的类似问题。这是因为我们希望概念尽可能简单地理解。但随时留下评论,告诉我们你改变的是什么让这个更好!

要理解的主要事情是,每个LED需要一个100欧姆的限流电阻,以保持LED从弹出。此外,按钮(或瞬时开关)也需要10K欧姆电阻,以拉起电路,使它不是“浮动”。Arduino需要电路一直处于高电平或低电平。

在上面的接线图中,我们已经安排了led在模具表面的形状。但是,为了使图更容易理解,我们将它们彼此分开了很多。在我们的实际构建中(正如你在图片中看到的),我们压缩了它们,使它们更接近,就像一个骰子!

Arduino骰子电路代码

现在是时候编制Arduino并使我们的骰子电路实际上做点什么!该计划需要做两个非常基本的东西。第一个是随机选择1和6之间的数字。第二是在LED上显示该号码,仿佛它们是模具。

关于生成随机数

要在Arduino上生成随机数,我们需要使用随机数生成器。重要的是要了解计算机世界中的随机数永远不会真正随机(有些人甚至认为现实世界中没有随机数量的东西!)。因为每次Arduino草图都执行它会创建一个长数字,并且该数字始终相同。

要解决这个问题,我们将使用随机()函数。这个函数读取一个没有被使用的模拟引脚的值。它将是“浮动的”,它的值将基于许多未知的东西,如环境中的湿度、温度等。之后我们会用到随机()使用该种子生成一个数字的功能。没有随机(),每次重新启动草图时,我们都会使用随机()不会是非常随机的。

所以让我们开始编码我们的Arduino骰子电路!

首先,让我们使用变量定义所有的组件。这并不是必须的,但是它确实使代码更容易理解。

int triggerbutton = 2;int blogleleftled = 3;int middleelefted = 4;int upperLeftLED = 5;int middleed = 6;int bottomRightLED = 7;int midlerightled = 8;int upperRight = 9;

接下来,我们将创建一个变量,该变量将包含随机数的值,并最终包含骰子的值。

长randomDiceNumber;

在Setup()函数中,我们将定义所有引脚,以便Arduino知道我们的LED是输出引脚,按钮是输入引脚。此外,这是我们填充随机()的地方。我们将使用模拟引脚0为此。

void setup(){//设置所有LED引脚输出pinMode(bottomlefled, OUTPUT);pinMode (middleLeftLED、输出);pinMode (upperLeftLED、输出);pinMode (middleLED、输出);pinMode (bottomRightLED、输出);pinMode (middleRightLED、输出);pinMode (upperRight、输出);//设置按钮为INPUT pinMode(triggerButton, INPUT);//创建随机数的种子randomSeed(analogRead(0));}

在这个项目中添加一点天赋,使它在向他人展示时更有趣和令人兴奋,我们在那里添加了一个小闪烁序列。这是代码可以更紧凑的另一个部分。如果你知道的话,请在下面留下评论(可能只有两行)。但我们希望初学者能够理解它!基本上,它在每个数字上快速循环(5次),然后在选择和显示实际数字之前等待300毫秒。这给人的印象是Arduino骰子电路在“思考”。这部分代码我们纯粹是可选的!

后面是in if语句来检查按钮的状态,然后是if语句来表示数字。

for(int i = 0; i <= 5; i ++){perseone();延迟(60);clearDice ();MakeTwo ();延迟(60);clearDice ();MakeThree ();延迟(60);clearDice ();MakeFour (); delay(60); clearDice(); MakeFive(); delay(60); clearDice(); MakeSix(); delay(60); clearDice(); delay(60); } delay(300);

最后,您将看到一个函数,用于显示每个模数,以及清除数字的功能。

void makefour(){digitalwrite(upperleftled,高);digitalWrite (bottomLeftLED、高);digitalWrite (upperRight、高);digitalWrite (bottomRightLED、高);} void cleardice(){digitalwrite(botfectleftled,low);digitalWrite (middleLeftLED、低);digitalWrite (upperLeftLED、低);digitalWrite (middleLED、低);digitalWrite (bottomRightLED、低);digitalWrite (middleRightLED、低); digitalWrite(upperRight, LOW); }

完整的Arduino骰子代码

下面是已完成的代码清单,您可以将其剪切并粘贴到Arduino IDE中,作为您的项目的草图!

//我们需要为我们的骰子定义一个触发器按钮int triggmanbext登录页erButton = 2; //我们需要为我们的骰子定义一个触发器按钮int triggerButton = 2;//骰子led int bottomlefted = 3;int middleelefted = 4;int upperLeftLED = 5;int middleed = 6;int bottomRightLED = 7;int midlerightled = 8;int upperRight = 9;长randomDiceNumber;void setup(){//设置所有LED引脚输出pinMode(bottomlefled, OUTPUT); pinMode(middleLeftLED, OUTPUT); pinMode(upperLeftLED, OUTPUT); pinMode(middleLED, OUTPUT); pinMode(bottomRightLED, OUTPUT); pinMode(middleRightLED, OUTPUT); pinMode(upperRight, OUTPUT); // set the button to INPUT pinMode(triggerButton, INPUT); // enable the serial console for troubleshooting (optional) Serial.begin(9600); // create a seed for our random numbers randomSeed(analogRead(0)); } void loop(){ //Read our triggerButton if high then run dice if (digitalRead(triggerButton) == HIGH){ // give the impression the dice is "thinking" by cycling numbers 5 times quickly // (yes, this routing could be written in two lines, but I left it this way to make it simple to undestand) for (int i=0; i <= 5; i++){ MakeOne(); delay(60); clearDice(); MakeTwo(); delay(60); clearDice(); MakeThree(); delay(60); clearDice(); MakeFour(); delay(60); clearDice(); MakeFive(); delay(60); clearDice(); MakeSix(); delay(60); clearDice(); delay(60); } // pause 300ms blank before selecting and showing the number delay(300); randomDiceNumber = random(1, 7); delay(100); Serial.println(randomDiceNumber); if (randomDiceNumber == 6){ MakeSix(); } if (randomDiceNumber == 5){ MakeFive(); } if (randomDiceNumber == 4){ MakeFour(); } if (randomDiceNumber == 3){ MakeThree(); } if (randomDiceNumber == 2){ MakeTwo(); } if (randomDiceNumber == 1){ MakeOne(); } delay(5000); clearDice(); } } // Thes functions create our dice // make a six void MakeSix() { digitalWrite(bottomLeftLED, HIGH); digitalWrite(middleLeftLED, HIGH); digitalWrite(upperLeftLED, HIGH); digitalWrite(bottomRightLED, HIGH); digitalWrite(middleRightLED, HIGH); digitalWrite(upperRight, HIGH); } // make a five void MakeFive() { digitalWrite(upperLeftLED, HIGH); digitalWrite(bottomLeftLED, HIGH); digitalWrite(middleLED, HIGH); digitalWrite(upperRight, HIGH); digitalWrite(bottomRightLED, HIGH); } // make a four void MakeFour() { digitalWrite(upperLeftLED, HIGH); digitalWrite(bottomLeftLED, HIGH); digitalWrite(upperRight, HIGH); digitalWrite(bottomRightLED, HIGH); } //make a three void MakeThree() { digitalWrite(upperLeftLED, HIGH); digitalWrite(middleLED, HIGH); digitalWrite(bottomRightLED, HIGH); } // make a two void MakeTwo() { digitalWrite(bottomRightLED, HIGH); digitalWrite(upperLeftLED, HIGH); } // make a one void MakeOne(){ digitalWrite(middleLED, HIGH); } // This routine clears the dice back to zero void clearDice(){ digitalWrite(bottomLeftLED, LOW); digitalWrite(middleLeftLED, LOW); digitalWrite(upperLeftLED, LOW); digitalWrite(middleLED,LOW); digitalWrite(bottomRightLED, LOW); digitalWrite(middleRightLED, LOW); digitalWrite(upperRight, LOW); }

我们希望您喜欢这个项目!第一次是第一次arduino开发商是一个很好的学习项目。留下下面的评论,让我们知道这是如何为您的以及您制作的任何变化!

下一步

现在您已经完成了本教程,您可以继续下一个教程或回到索引。