Arduino入门指南
经过几年对Arduino的实验,我决定是时候分享我所学到的知识了。所以我来这里,这是一本Arduino的指南,为初学者提供了一些基本的知识,也为那些稍微熟悉电子设备的人提供了一些更高级的解释。
每一步都包括一个详细的解释,然后是一个总结,然后是一个更先进的方法。
如果你是一个初学者,我建议先阅读说明,然后再总结。你(几乎可以肯定)会有一些不明白的解释。不要担心,这是绝对正常的,在阅读下一步的其他例子之后,它会变得清晰,只是不要灰心!
我将提供一些链接到ARDUIO参考页面,维基百科,以及其他一些有趣的来源。如果你想更多地了解某个主题,这些是很好的起点。同样,如果你不理解这些链接的一个字,不要担心,这绝对不是这个指导性的必要,尤其是对初学者来说,他们可能会非常混乱甚至令人失望。如果是这样的话,最好现在就跳过。但不要放弃!
虽然这样的教程可能非常有用,但你将主要通过实验自己来学习。用这个讲义作为起点,作为参考,但是做你自己的项目,修改给定的例子,尝试新事物,搜索互联网,可能性是无穷的!
Step 1: What Is Arduino?
经过几年对Arduino的实验,我决定是时候分享我所学到的知识了。所以我来这里,这是一本Arduino的指南,为初学者提供了一些基本的知识,也为那些稍微熟悉电子设备的人提供了一些更高级的解释。
每一步都包括一个详细的解释,然后是一个总结,然后是一个更先进的方法。
如果你是一个初学者,我建议先阅读说明,然后再总结。你(几乎可以肯定)会有一些不明白的解释。不要担心,这是绝对正常的,在阅读下一步的其他例子之后,它会变得清晰,只是不要灰心!
我将提供一些链接到ARDUIO参考页面,维基百科,以及其他一些有趣的来源。如果你想更多地了解某个主题,这些是很好的起点。同样,如果你不理解这些链接,不要担心,尤其是对初学者来说,他们可能会非常混乱甚至令人失望。如果是这样的话,最好现在就跳过。但不要放弃!
虽然这样的教程可能非常有用,但你将主要通过实验自己来学习。用这个讲义作为起点,作为参考,但是做你自己的项目,修改给定的例子,尝试新事物,搜索互联网。
Step 2: Before You Begin...
在你开始把东西插入新的Arduino之前,最好知道什么会损坏电路板,了解这些知识后,方便您后面的学习。
1、从输出引脚引出超过40毫安的电流。
Arduino只能为每个输出管脚提供40毫安,因此您不能直接驱动电机或扬声器,例如,您不能直接连接LED(没有电阻器)。在本课程中,我将解释你应该做什么。
将输出短路到+5V、+3.3V或接地引脚,也会杀死您的电路板:例如,如果输出引脚为5V,并且您将其连接到地上,它会吸引大量电流,并几乎立即杀死您的Arduino。
管脚穿过电路板,因此请确保不要将Arduino放置在导电(金属)表面,因为它会使管脚短路。
2、从所有输出管脚中抽出超过200毫安的电流。
你的ARDUINO上的ATmega芯片只能提供200万毫安,所以每次驱动超过10个LED @ 20Ma,最终会损坏你的板。
3、向输入引脚提供大于5V(3.3V)的电压。
在任何引脚上提供超过Arduino工作电压的电源都是非常危险的。一些在3.3V下运行的Arduinos有5V的耐受管脚,但就是这样。这也适用于其他设备,如传感器或无线芯片:始终检查电压:如果将5V Arduino的输出连接到3.3V芯片,则可能会杀死它。
4、为5V引脚提供超过5V的电压。
ARDUINO板的5V直接进入ATmega芯片,其额定绝对值为6V。
5、引脚提供超过12伏的电压。板上有一个5V的电压调节器,如果你给它的电压超过12V,它就会过热并损坏。
6、从5V引脚引出大于500mA的电流(当外部电源断开时)。
车载5V电压调节器只能提供500mA的电流。5VUSB有一个多保险丝,可将电流限制在500毫安。
7、从3.3V引脚引出50MA以上。
车载3.3V电压调节器只能提供50MA的电流。这意味着您不能将耗电3.3V设备(如ESP8266或NRF24L01)直接连接到Arduino:您需要一个外部3.3V电压调节器。
8、反转电源的极性。如果你把5V或车辆识别码换成GND,你几乎会立刻杀死电路板。桶形插孔有一个二极管来防止反极性。
9、使用USB电源时将负载连接到车辆识别码(vin)引脚。
如果您将一个负载连接到车辆识别码引脚,而5伏到Arduino的电压来自USB连接,则电流将反向流过电压调节器,从而损坏电压调节器。
10、静电,虽然大多数芯片都有钳位二极管作为保护ESDs(静电放电),它可能是明智的,我们一个防静电腕带,或删除地毯下你的书桌。
Step 3: Software
ARDUNO IDE:
窗户:
1.转到站点,转到下载,然后选择Windows安装程序。
2、如果你想支持这个项目,可以考虑捐钱,然后点击下载。
3、点击下载的文件运行。
4、授予管理员权限。
5、同意许可协议。
6、选择合适的框,您将需要Arduino7、软件和USB驱动程序,其他三个都是可选的。
8、接受默认安装文件夹,或选择另一个。然后单击“安装”。
9.当系统提示您是否要安装Arduino USB驱动程序(设备软件)时,单击“安装”。
10.等待安装程序完成,然后启动Arduino IDE。
(完整的安装指南也可以在Arduino网站上找到。)
Ubuntu:
1、Go to the site, go to Download, and select the right Linux version.
2、Consider donating some money, if you want to support the project, and click download.
3、Open a terminal window (CTRL+ALT+T), and run these commands, changing the filename appropriately
4、cd Downloads
5、tar xf arduino-1.6.11-linux64.tar.xz
6、sudo mv arduino-1.6.11/ /opt/arduino-1.6.11/
7、/opt/arduino-1.6.11/install.sh
8、sudo usermod -a -G dialout $USER
这将转到downloads文件夹,解压下载的文件,将其移动到/opt/文件夹,然后运行安装脚本。这个安装脚本将创建一个桌面文件,以及一个MIME类型来将.IO文件与ARDUINO IDE关联起来。最后,必须将用户添加到“拨号”组(-g)中(-a=append),才能访问串行端口。($user是当前用户的系统变量)如果现在打开arduino ide,您将看到tools>port选项变灰。当您的用户添加到拨号组时,请注销并重新登录。Arduino的串行端口现在应该可以在IDE中使用了。
Step 4: Hardware & Electronics
在我们开始之前,我将解释一些基本的电子元件。如果你只是从电子开始,这是给你的!
有时我会用一些物理来解释某个组件是如何工作的,这只是一个侧面的说明,如果你还不明白,那就没关系了。这需要一些时间才能习惯。
然而,如果你想进一步研究电子学,你会发现电子学只是应用物理学。
我还提供了一些YouTube视频的链接,帮助我了解了不同组件的基本原理。
基础物理学
电是电荷载流子的流动:电子(在大多数情况下)。
电子是带负电荷的粒子,围绕原子的带正电的核(核、复数、核)旋转。
电子很容易通过金属,如铜、银、金…我们称这些材料为导体。
这些材料有自由移动的电子。
像塑料,木头,玻璃,空气…导电性不好。它们被称为绝缘体。
它们没有移动的电子或其他电荷载流子。
负电荷(电子)比正电荷(带正质子的原子核)多的一块材料是带负电荷的。
负电荷比正电荷少的一块材料是正电荷的。
(注意,只有电子可以移动,正原子核被困在一个网格中。)
正像磁铁一样,相反的电荷相互吸引:当一块材料中有更多的电子,而另一块材料中有更少的电子时,负片中的电子就会被正片所吸引。如果这些碎片之间有一个导体,这些电子将“流动”到正的部分:这就是电流。
电流表示每单位时间流经导体的电荷量。它的单位是AMPS(AMP),被定义为C/S,其中C是库伦(电荷),S是秒(时间)。它的符号是I。
电池的负极电子较多,正极电子较少。就像我之前说的,电子会试图到达正极,但它们不能通过电池本身的内部电路。这给出了电子势能。这是作为灯泡中的光和热释放的能量,如马达中的运动(动能)…正电荷和负电荷的势能之差称为电压。单位是伏特,定义为J/C,其中J是焦耳(国际单位能量),C是库仑(国际单位电荷)。这表示一个电荷(读作:一定数量的电子)释放出多少能量。
伏特的符号是v或u(来自德语单词“unterschied”,difference,表示电位差)。
功率是每单位时间释放的能量量。国际单位是瓦特,定义为J/S,其中J是焦耳,S是秒。如果你把电流乘以电压(C/S j/C),C就会抵消,所以你得到j/s。这意味着电压乘以电流给你瓦数。
在大多数示意图中,使用的是传统的电流:箭头从正方向画到负方向。但实际上,只有电子才能移动,所以电流的实际流向是从负向正。
电阻器
电阻是具有电阻的元件,顾名思义就是电阻,换句话说,它们限制电子的流动,所以经常被用来限制电流。
电阻的国际单位是欧姆,通常写为希腊字母欧米茄(Ω)。它们通常与单位前缀kilo(k)和mega(m)一起使用。例如1.2MΩ=1M2Ω=1200 KΩ=1200000Ω=1200 000 0E=1200 000 0R(注意,在单元前缀之后写入一个数字与在小数点之后写入相同)。此外,在一些示意图中,使用e或r代替Ω)。
电阻器的值由4(或5)个色带表示,使用电阻器色码:
前2(或3)个频带是值的2(或3)个第一位数,第3(或第4)个频带是该2(或3)个数字之后的10的幂。这也被称为乘数,它只是你必须加上的零的数目。最后一个波段是公差,主要是银或金。
例如,红-红-金=22×100Ω=2200Ω=22×10Ω=2K2Ω=2.2KΩ,容限为5%;绿蓝黑棕红=560×10Ω=5600Ω=5k6Ω=5.6KΩ,容限2%。
电阻、电压和电流之间的关系可以用欧姆定律来计算。
I=V/R
其中i是电流(安培),v是电压(伏特),r是电阻(欧姆)。
这是一个非常,如果不是最重要的公式在电子,所以试着记住它!
Step 5: Blink: Digital Outputs
闪烁:第一个Arduino代码
当你第一次插入你的ARDUNO时,你会看到一个绿灯(旁边写着‘ON’——这是电源LED)和一个闪烁的橙色灯(旁边写着‘L’)。这是默认的“闪烁”程序,它先打开内部LED一秒钟,然后关闭一秒钟,一直重复。
让我们看一看代码:打开ArduinoIDE并转到file>examples>01.basics>blink。
你会注意到的第一件事,是前14行比其他行轻。所有文本放在*/*符号之间,是一个注释。这是一个多行注释。在第17行,还有一些注释,它们使用//运算符,该行的所有内容都在//后面,这是一个注释。下一行又是普通代码,与多行注释不同,您不必关闭此单行注释。
注释用于使代码更可读,因此强烈建议您在自己的程序中使用这些代码。在像blink这样的小程序中,这并不是真正必要的,但是当你编写超过1000行的代码时,如果你添加了一些注释,你会非常感谢,以帮助你理解一段特定的代码是什么,以及它是如何工作的。
您还可以使用注释运算符(临时)禁用一段代码,而不必永久删除它。这很有效,因为评论不会上传到Arduino。(它们被编译器忽略,该软件将在ARDUINO IDE中编写的代码转换为ARDUINO能够理解的命令)。这也意味着它们不占用ARDUINO(有限)内存中的任何空间,只在计算机的硬盘上。
Arduino参考:评论
我们遇到的下一位代码是“void setup(){”
这是安装程序,每次运行ARDUNO时只运行一次。(void是一种数据类型,这意味着安装程序不会返回任何信息,稍后将对此进行详细说明。每个函数都使用两个括号来传递数据;安装程序不需要任何数据,因此括号为空。如果您还不明白这一点,不用担心,我们将在函数一步中详细介绍。)
“void setup()”后面的两个大括号或大括号之间的所有内容都是在安装过程中执行的代码。一定要关闭括号,否则会出现奇怪的错误。如果您选择了另一个括号,IDE将通过突出显示另一个括号来帮助您实现这一点。
Arduino reference: void
Arduino reference: setup
Arduino reference: curly braces
第一个真正的命令是'pinmode(13,output);'。正如您可能已经猜到的,这与Arduino上的两行管脚有关:这些管脚既可以用作输入,也可以用作输出。第一个数字是我们想用作输出的管脚,在本例中是13,因为所有Arduino板都有一个连接到管脚13的板载LED。pinmode函数的第二个参数output是一个常量。这是一个由软件本身定义的值,并被赋予了一个简单的名称。常数将为蓝色。
(输出值是1,这有点违反直觉,因为它的o看起来像0,而输入常量的i看起来像1。PIMMODE(13,输出)与PIMMODE(13,1)完全相同
默认情况下,Arduino的管脚被设置为输入,但是通过使用管脚模式功能,我们现在将管脚13设置为输出。我们还没有告诉它我们想要输出什么值,所以它只是0。这意味着,在芯片内部,引脚13连接到0V,这是接地。如果现在将5V引脚连接到引脚13,则会造成短路!小心!
Arduino reference: pinMode
Arduino tutorials: Digital Pins
在ARDUNO IDE和其他类似C语言的编程语言中,每个语句用分号(;)结束,正如您在这个眨眼示例中所看到的。当您在尝试上载时遇到神秘错误时,首先要检查的是分号。大多数情况下,你会得到这样的错误:眨眼:16:错误:预期的“,”或“…”之前…
16不是缺少分号的行,而是带有下一个命令/语句的行。
Summary:
-
In the setup, that only runs once when the program is started, we set pin 13 as an output.
-
In the loop, we make the output of the led HIGH (5v), wait 1,000ms, make it LOW (0v) and wait for another second. This loop will be repeated forever (at least until you restart the Arduino, or upload another program)
-
/*this is a comment */ this is not
-
this is not a comment // this is a comment
-
every statement ends with a semicolon ;
-
void setup(){ } is the function that runs once, when the Arduino starts up
-
void loop(){ } is the function that repeats forever, after the setup has run
-
pinMode(pin,OUTPUT); or pinMode(pin,1); sets the given pin as an output
-
digitalWrite(pin, state); sets a given pin high (5v) or low (0v). State can be HIGH or LOW, 1 or 0, true or false.
-
delay(time); waits for a given amount of time, in milliseconds.
Step 6: Uploading a Program to the Arduino
作为一个例子,我们将把blink示例上传到arduino,但是由于默认情况下已经安装了它,所以将delay函数的值改为500而不是1000,否则我们看不到任何差异。
现在把你的Arduino连接到你的电脑上,如果你还没有。等待计算机识别新的USB设备,然后转到Arduino IDE中的工具>板菜单,然后选择板。然后在“工具>端口”中,选择正确的端口。在windows中,这可能是一个com端口。如果有多个端口可用,拔掉你的ARDUINO,然后把它插回去,看看哪个端口消失并重新出现,知道你的ARDUNO的端口。
在Linux上,可能是/dev/ttyacm0(/dev/ttys0是主板上的串行端口,所以这不是正确的端口。如果你是一个老阿杜伊诺或廉价的中国克隆,它可以列为/DEV/TTYSHB0)。
在右下角,您现在应该看到您的板的名称,以及它所连接的端口。
现在点击左上角的右箭头将闪烁上传到板上。您也可以使用快捷键ctrl+u。
如果一切顺利,它应该开始编译,然后上传。当它上传时,TX和RX灯应该闪烁。
完成后,引脚13上的LED现在应该闪烁两倍的速度。
编译意味着你所写的人类可读代码被转换为ARDUINO能理解的一系列二进制数。然后,这个二进制文件在上传过程中复制到ARDUINO的内存中。
Step 7: Driving More LEDs
好吧,让我们直面现实:闪烁一个小LED不是那么令人印象深刻…在这一步中,我将展示如何驱动更多的led。
计算led的电阻值
在您开始之前,我们将不得不计算电阻与我们的LED串联使用。如果你把LED直接连接到Arduino上,它会吸引过多的电流,导致LED被炸掉,甚至被炸掉。
我们需要的公式是欧姆定律:r=v/i
但问题是我们还不知道电阻的电压和电流…让我们找到它!
我们把电阻和LED串联起来,我们知道Arduino的输出引脚的电压是5V,所以如果我们把LED的电压加到电阻的电压上,应该等于5V。因此:vr+vl=5V,vr=5V-vl。
由于它们是串联的,这也意味着所有通过LED的电子也将通过电阻器。由于电流被定义为每单位时间的电子量,所以我们知道通过电阻器的电流等于通过LED的电流。因此:Ir=Il。
现在我们可以用欧姆定律来计算电阻:r=vr/ir=(5v-vl)/il
(图像1)
请注意,如果电流以毫安(MA)给出,则必须将其除以1000,得到电流的SI单位AMPS。否则,你就得不到欧姆(而是千欧姆)的答案。这适用于每一个物理公式:如果你用各自的国际单位来输入你的值,你总是会得到一个国际单位的答案。
如果你使用的是3.3V的Arduino,你可以用3.3V代替5V。这只是电源电压,它可以是任何东西。
VL和IL的值可以在你的LED数据表中找到,或者你可以使用下面的表格。
IL应该小于20毫安,否则,你会杀死你的LED。
VL是LED的正向压降。(发光二极管发出较低能量的光,波长较长,如红色和红外线,其电压降比能量较高的光子(如蓝色或紫外线)的光要低得多。)
Color | Forward voltage (VL) |
Red | 1.7v - 2.2v |
Orange | 2.0v |
Yellow | 2.1v |
Green | 2.2v |
Blue | 3.2v - 3.8v |
White |
3.2v - 3.8v |
这只是一个近似值,但是,对于每个LED,它都不成立。
你可能不会有一个电阻的确切值你刚刚计算,所以四舍五入到下一个值在E-12系列。这个系列的值只有1.0,1.2,1.5,1.8,2.2,27,3.3,3.9,4.7,5.6,6.8,8.2,这些值乘以10的幂,比如10,100,1000,10000等等。
例如,我的结果是65Ω,所以我取了一个68Ω的电阻。
最好带一个更高的电阻,这样你就不会弄坏你的LED。
将LED连接到Arduino
就像我之前解释的,LED基本上是一个二极管,所以它只让电流朝一个方向通过。如果我们把LED接反了,什么事都不会发生。
LED具有阴极和阳极:在示意图中,箭头的方向是传统的电流流向,因此指向负极:阴极。
当你仔细看一个LED时,你会发现一面是平的,另一面是圆的。另外,一条腿比另一条腿短:扁平的一侧,较短的一侧是阴极,我们将这一侧连接到Arduino的负极或接地。
不管你把电阻放在哪里,只要它和LED串联,你就可以把它连接到阴极或阳极。
如果我们知道只有一个LED将同时在,我们可以使用一个电阻器为我们所有的LED。
看一看图像2-3-4,然后连接电阻到地面和一个水平轨道的你的面包板,和一个LED与短腿进入同一轨道,长腿在引脚12在阿杜伊诺。
请注意,您必须计算LED的特定电阻。你可以使用上面的公式,或者使用在线工具,或者应用程序(我使用这个工具和这个应用程序)。如果你点击字段旁边的问号,这个工具会给你一些额外的信息,并且应用程序有一个下拉菜单来选择颜色。
如果你有疑问,或者-像我一样-只是懒得去查找并找到正确的电阻,你可以使用220Ω到330Ω之间的任何电阻。只有当你和5V的Arduino一起使用时,这才是正确的!270Ω和330Ω对于3V3 Arduino来说有点高,在这种情况下,使用100Ω和220Ω之间的值。如果你想用更高电压的LED,你需要计算一下。
将LED和电阻器连接到Arduino后,可以将闪烁示例中的引脚13替换为12。您可以使用快捷键ctrl+f:在“查找”字段中,输入13,在“替换为”字段中,输入12,然后单击“全部替换”。现在上传草图到你的Arduino:你所连接的LED现在应该闪烁。
还是没印象?不?你说得对…
但现在你已经有了基本知识,我们可以做一些更壮观的事情…
更多发光二极管
连接5个额外的LED,以引脚2, 4, 6,8和10与他们的长腿,并连接他们的短腿到相同的轨道上的底板上的LED引脚12和电阻器。
现在打开步骤3中下载的.zip文件中的示例blink6-a。
如果你还记得blink的例子,那么预测这个程序的功能就不难了。上传到你的Arduino,检查你的假设是否正确!
优化代码
如果你仔细看看,你会发现一些代码只是6次相同的命令,只是一个不同的PIN号码…好吧,有一种方法可以解决这个问题:我们称之为for循环。
从.zip文件中打开blink6-b草图。当你把它上传到ARDUINO时,你会发现它与BLIK66A完全一样,但是它的代码行要少得多。
这都要感谢使用的两个for循环。
但是在我解释for循环之前,我首先要解释变量是如何工作的:
在第一行,有一个新的表达式“int延迟时间=200”,这就是所谓的变量“延迟时间”的声明。变量只是一块内存,在那里你可以存储任何你喜欢的东西。变量有一个数据类型、一个名称和一个值:在本例中,数据类型是“int”:一个整数、一个整数,可以是正数或负数。名称是'delaytime',这只是一个你给变量的任意名称,它可以有字母和数字,还有一些符号,比如下划线。如果名称由多个单词组成,则每个新词都使用大写字母,因为不能使用空格。为变量选择合适的名称会极大地影响代码的可读性。使用“int延迟时间”,变量被正确声明,但没有值。将初始值赋值给变量称为初始化。在这种情况下,我们将变量延迟时间初始化为200。现在,每当我们在代码中使用“延迟时间”时,它将被数字200所取代。如果你读一个变量而不首先初始化它,它只会给你0个,在最好的情况下,但可能只是一个随机值,恰好出现在内存的那个地方,可能在你的PR中造成错误。
Arduino reference: variables
Arduino reference: int
Arduino reference: variable scope
变量的另一个有用之处是,您可以在代码运行时更改它们。这正是for循环中发生的事情。括号之间的第一部分只是对某个变量“i”的声明,我们将其初始化为2。下一部分是“i<=12”,这意味着只要i小于或等于12,for循环就会重复。第三个也是最后一个部分‘i=i+2’意味着每当循环被重复时,i的值将增加2。
这意味着它将首先执行括号内的代码,值为2代表i,将pin 2设置为输出。现在它已经到了代码的末尾,所以2被添加到i→i现在等于4,代码再次运行,i的新值为:pin 4被设置为输出。2被再次添加,我现在等于6,代码被再次运行,2被添加…等等。直到我12岁。当i=12执行循环时,一切正常,但当它现在到达代码末尾,并且再次添加2时,我不满足条件“i≤12”(我现在是14)。程序退出for循环。
现在,每个带有LED的管脚都被设置为输出,只有两行代码,而不是六行代码。
Arduino参考:for循环
Sumary:
找到合适的led电阻
查找LED数据表中的正向电压,或在上面的表中。这是VL
在LED数据表中查找正向电流,或者使用2到20mA之间的东西,并将该数字转换为AMPS。这是IL
找到你的电源电压,5V或3.3V的大多数微控制器,如阿杜伊诺。这就是VS
现在使用这个公式来计算电阻值:r=(vs-vl)/il
把这个值四舍五入到你拥有的最接近的电阻。你总是可以使用一个比你计算的电阻值高的值,但是如果你使用一个较低的电阻,这将大大缩短你的LED的寿命。如果电阻过高,LED将非常暗。
LED的圆形侧,具有较长的腿,是阳极,并且是正侧。
LED扁平的一面,较短的支脚,是阴极,是负极。
ctrl+f打开Arduino IDE中的“搜索/查找/替换”窗口
It DelayTimes;这是数据类型int的变量的声明,称为“DelayTimes”。
It DelayTime= 200;这是数据类型int的变量的声明,称为“DelayTimes”,其初始化为200的值。
全局变量可以在程序中到处访问,局部变量仅在它们声明的范围内。
for(int i=0;i<10;i=i+1){}是一个for循环,该变量将变量i初始化为0的值,每次重复时将i加1,并且只要i<10(10次)重复。
额外:计算电阻器的功耗
如果你使用5V电源,就像Arduino上的电源一样,一个正常的1/4瓦电阻就足够了,但是当你使用更高的电源电压,或者一个能吸收更多电流的LED时,电阻中的功耗会太高,并且会烧掉。
因此,我们需要计算电阻的功耗是多少。
(图像6)
计算功率的公式是P= V i。因此,我们可以计算电阻两端的电压:电源电压减去LED两端的电压:VR= VS- VL。
通过电阻器的电流与通过LED的电流相同:Ir=IL。
因此:pr=(vs-vl)∙il
在图6所示的示例中,电阻器中的功耗非常低,因此1/4瓦的电阻器就足够了,但如果计算值更高,则需要一个更强大(=更厚)的电阻器。
然而,这些值只是一个理论假设。
如果你真的想知道电阻耗散的实际功率,你必须测量它的电流或电压,或者最好的情况下。
在你可以测量电流和电压(情况A)的情况下,你可以使用相同的公式。
但是,如果你只能测量其中一个值,你可以用欧姆定律来代替功率公式中的电压或电流。(案例B&C)
只有案例A给你真正的功耗,在B&C的情况下,你需要的电阻值。写在电阻上的值有一定的公差,所以你的瓦数也会有一些偏差。
Step 8: Even More Blinking LEDs
led序列的编程
打开示例blink7。
在第3行,您将看到一个新的结构:我们称之为数组。数组基本上是一个变量列表,在本例中,它是一个int类型的变量列表。我们使用方括号来表示它是一个数组。为了初始化数组,我们使用曲线括号,并用逗号分隔这些值。
当我们想使用数组中的值时,我们需要指定在数组中需要值的位置。以blink7中的数组为例:
int数组[]={1,2,3,4,5,6,5,4,3,2};
如果我们想得到数组的第一个值,我们使用
array[0]注意10是元素的数目,而最后一个元素是数组[9]!
如果你在同一行上初始化,就像在BLIK7中一样,ARDUINO IDE会为你计算元素,而你不必在括号之间指定任何东西。
如果想知道数组中元素的数目,可以使用sizeof(array)函数。此函数返回数组的大小,以字节为单位(1字节=8位)。但是,这不是元素的数量,在blink7中,sizeof(array)将返回20。这是因为每个元素都是一个int,一个int有2个字节长。所以元素的总数是20/2=10。
当我们读取整个数组时,我们使用它来退出for循环:只要索引小于元素的数量,我们就可以安全地读取数组。我们从i=0开始,因为第一个元素有索引0。这次我们只增加了1。符号“i++”与写“i=i+1”完全一样,只是短一些。另一种写法是“i+=1”。
由于led 1连接到管脚2,led 2连接到管脚4,3连接到6等,我们将led数乘以2得到管脚数。
Arduino reference: Array
Arduino reference: Sizeof
Arduino reference: Increment
Arduino reference: Compound Addition
您可以更改数组中的值以生成自己的序列,甚至可以添加或删除元素,因为我们使用sizeof()函数使程序独立于数组的长度。
总结:
数组是值(或字符或其他数组)的列表,并使用方括号[]
这是数组的声明:“int数组[10 ];
这是一个数组的声明和初始化:“int数组[]= {1,1,2,3,4,5,6,5,4,3,2};
数组索引是基于零的,这意味着第一个元素的索引是0
size of(array)返回数组的字节大小
size of(数据类型)返回数据类型的字节大小
SIZEOF(数组)/siZOF(数组的数据类型)给您数组中的元素数
额外:二维数组(矩阵)
在数组中,元素不仅可以是数据类型(如int),还可以是其他数组。这允许您拥有所谓的二维数组,可以与矩阵进行比较。
这在示例blink8中使用:现在您可以设置阵列中的led编号和延迟。
int array[][2] = {{1, 600},
{2, 100},
{3, 100},
{4, 100},
{5, 100},
{6, 600},
{5, 100},
{4, 100},
{3, 100},
{2, 100}
};
注意,在声明多维数组时,我们必须指定除方括号之间的第一个维度之外的所有维度。
从数组中获取值的语法是
array[row][column]打开示例矩阵求和。这个例子不会做任何事情,如果你上传它,它没有任何输出,它只是为了学习的目的。
它创建4个矩阵(2d数组),其中两个具有值。然后它只计算两个矩阵的和,第一个矩阵的转置矩阵。
这是通过使用嵌套for循环来完成的。你可以按照上面图片的解释。
数字是for循环遍历它们的顺序。我用于行,j用于列。它们在矩阵符号的第一列和第一行(1,1)开始,对于数组符号,[0 ] [0 ],然后列递增(1,2)或[1 ] [0 ],当再次递增J时,列再次递增(1,3)或[2 ] [0 ],J环退出,因为J不再小于三。i递增,j重置为零:(2,1)或[0][1],j递增:(2,2)或[1][1],然后(2,3)或[2][1]。i递增,j重置为零:(3,1)或[2][0],然后是(3,2)或[2][1],最后是(3,3)或[2,2]。现在J退出了,我也退出了。
转置矩阵的计算是类似的,它只是交换列和行:
转置矩阵[i][j]=矩阵[j][i];
在这些数组中,可以使用更多的数组,基本上可以创建多维空间。理论上,维数是无限的,但是一旦使用超过三个维度,它就变得非常复杂,因此其他方法是优选的。
--end--
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com