<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Arduino on 云雾海的博客</title><link>https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/</link><description>Recent content in Arduino on 云雾海的博客</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Tue, 02 Feb 2021 15:17:03 +0800</lastBuildDate><atom:link href="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/index.xml" rel="self" type="application/rss+xml"/><item><title>Arduino极速入门教程——两篇文章让你会用Arduino（下）</title><link>https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/</link><pubDate>Tue, 02 Feb 2021 15:17:03 +0800</pubDate><guid>https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/</guid><description>&lt;img src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/cover.jpg" alt="Featured image of post Arduino极速入门教程——两篇文章让你会用Arduino（下）" /&gt;&lt;p&gt;&lt;em&gt;接&lt;a class="link" href="[Arduino%e6%9e%81%e9%80%9f%e5%85%a5%e9%97%a8%e6%95%99%e7%a8%8b%e2%80%94%e2%80%94%e4%b8%a4%e7%af%87%e6%96%87%e7%ab%a0%e8%ae%a9%e4%bd%a0%e4%bc%9a%e7%94%a8Arduino%ef%bc%88%e4%b8%8a%ef%bc%89.md]%28/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/%29" &gt;上篇&lt;/a&gt;关于Arduino基础环境配置、界面介绍和C语言基础，这一篇的内容为具体如何在Arduino中进行编程。&lt;/em&gt;&lt;/p&gt;&#10;&lt;h2 id="在vscode上配置arduino"&gt;&lt;a href="#%e5%9c%a8vscode%e4%b8%8a%e9%85%8d%e7%bd%aearduino" class="header-anchor"&gt;&lt;/a&gt;在VSCode上配置Arduino&#10;&lt;/h2&gt;&lt;h3 id="什么是vscode"&gt;&lt;a href="#%e4%bb%80%e4%b9%88%e6%98%afvscode" class="header-anchor"&gt;&lt;/a&gt;什么是VSCode&#10;&lt;/h3&gt;&lt;p&gt;VSCode，即Visual Studio Code，是微软制作的一个开源免费编辑器，当今始接最热门的主流代码编辑器之一。百度vscode或者点我给出的这个&lt;a class="link" href="https://code.visualstudio.com/" target="_blank" rel="noopener"&#10; &gt;链接&lt;/a&gt;，可以进到官网下载。编辑器与IDE（集成开发环境）不同，VSCode更加像一个可以加载插件的记事本，不过如果配置得当，VSCode也可以用来当作一个简陋的IDE使用。&lt;/p&gt;&#10;&lt;h3 id="为什么用vscode"&gt;&lt;a href="#%e4%b8%ba%e4%bb%80%e4%b9%88%e7%94%a8vscode" class="header-anchor"&gt;&lt;/a&gt;为什么用VSCode&#10;&lt;/h3&gt;&lt;p&gt;Arduino IDE本身其实只是一个非常简陋的IDE，没有代码补全、丰富的高亮、代码跳转重构等功能，而这些我们都可以在VSCode上进行实现，这可以是不必要的（如果你能力足够强用记事本直接写代码也是可行的），但是作为初学者或者开发者使用这些功能能够让你快速学习或者实现你想要实现的功能。&lt;/p&gt;&#10;&lt;h3 id="怎么配置"&gt;&lt;a href="#%e6%80%8e%e4%b9%88%e9%85%8d%e7%bd%ae" class="header-anchor"&gt;&lt;/a&gt;怎么配置&#10;&lt;/h3&gt;&lt;p&gt;先下载并安装VSCode。&lt;/p&gt;&#10;&lt;p&gt;接着下载插件，在最左边选择扩展按钮，然后搜索并安装我标出的这几个插件，你就能有一个可以装Arduino的中文VSCode了（我的VSCode与你们的应该样式不同，因为我安装了样式的插件）：&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="788" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/img/c7fc4b5633e0fc1458fc5acd5d2860b2.webp" width="1400"&gt;&lt;p&gt;然后打开安装好的VSCode，左上角选择：文件-打开文件夹，然后选择一个你以后专门保存Arduino代码的文件夹打开。&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="112px" data-flex-grow="46" height="546" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/img/52016e4852c6b62c2703dc61160c1321.webp" width="256"&gt;&lt;p&gt;在左上角文件选项中选择首选项-设置。&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="192px" data-flex-grow="80" height="644" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/img/106e1e65d5a45b502d2f482a5a21e34c.webp" width="516"&gt;&lt;p&gt;然后设置界面的右上角，选择打开设置（json）&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="731px" data-flex-grow="304" height="453" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/img/f37302a0a933a2447a87ac01aba3df89.webp" width="1380"&gt;&lt;p&gt;然后我们就进入到了一个JSON文件界面，在原本的文件开头如下内容，不过需要&lt;strong&gt;注意：下面第一行的path为你安装Arduino的位置，我安装在D:/Software/Arduino文件夹里的，如果设置自己的地址也请按照我这种双斜杠的格式来写。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;arduino.path&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;D:\\Software\\Arduino&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;C_Cpp.intelliSenseEngine&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Tag Parser&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;editor.insertSpaces&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;files.autoGuessEncoding&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;arduino.logLevel&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;info&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;explorer.confirmDelete&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;editor.detectIndentation&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;点击Ctrl+s保存JSON文件，然后重启VSCode，现在你的VSCode环境就配置好了。&lt;/p&gt;&#10;&lt;h2 id="arduino的程序内容"&gt;&lt;a href="#arduino%e7%9a%84%e7%a8%8b%e5%ba%8f%e5%86%85%e5%ae%b9" class="header-anchor"&gt;&lt;/a&gt;Arduino的程序内容&#10;&lt;/h2&gt;&lt;h3 id="打开例程"&gt;&lt;a href="#%e6%89%93%e5%bc%80%e4%be%8b%e7%a8%8b" class="header-anchor"&gt;&lt;/a&gt;打开例程&#10;&lt;/h3&gt;&lt;p&gt;现在我们先来打开一个官方例程，首先打开Arduino IDE，选择文件-示例-Basic-Blink，这是Arduino官方提供的一个灯光闪烁程序。&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="213px" data-flex-grow="88" height="1080" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/img/09daac37204e1034f935706c1892f310.webp" width="960"&gt;&lt;p&gt;点开后按Ctrl+S，IDE会告诉你该文件处于只读状态，需要将项目保存在其它位置，点击确定，然后将文件保存在我们前面设置的VSCode工作文件夹里，然后我们就可以退出并通过VSCode打开它了。&lt;/p&gt;&#10;&lt;p&gt;例程将会是我们很好的学习资源，这些例程有些来自于开发板，有些来自于函数库，有些来自于官方，但是我们如果已经安装好的东西，找例程并且想要在VSCode中进行修改测试或者仅仅是查看，都可以通过这种方式来。&lt;/p&gt;&#10;&lt;h3 id="程序结构"&gt;&lt;a href="#%e7%a8%8b%e5%ba%8f%e7%bb%93%e6%9e%84" class="header-anchor"&gt;&lt;/a&gt;程序结构&#10;&lt;/h3&gt;&lt;p&gt;我们现在可以发现其实这个Blink中有两个函数setup和loop，它们的功能我在下图中标示了：&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="213px" data-flex-grow="88" height="1080" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/img/f5df60433d2ca2d95e1e3134913dece1.webp" width="960"&gt;&lt;p&gt;setup和loop是Arduino的逻辑核心，普通的Arduino程序都是基于这两个函数进行运行的，一般我们在setup中初始化环境，然后在loop区域写我们需要实现的功能。&lt;/p&gt;&#10;&lt;p&gt;如果想知道这两个函数是怎么实现的，可以查看&lt;code&gt;{你的Arduino安装地址}\hardware\arduino\avr\cores\arduino&lt;/code&gt;中main.cpp和Arduino.h文件，大概意思就是我们在程序中实现的setup和loop函数将会通过Arduino.h被引用，然后在main.cpp中被执行，Arduino.h只是一个引用传递文件，这里我们重点关注main.cpp：&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="277px" data-flex-grow="115" height="622" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/img/931b69a6a1a66f5302b28401b63b14df.webp" width="718"&gt;&lt;h3 id="功能函数"&gt;&lt;a href="#%e5%8a%9f%e8%83%bd%e5%87%bd%e6%95%b0" class="header-anchor"&gt;&lt;/a&gt;功能函数&#10;&lt;/h3&gt;&lt;p&gt;现在我们再来看看Blink文件：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// the setup function runs once when you press reset or power the board&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setup&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// initialize digital pin LED_BUILTIN as an output.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;pinMode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LED_BUILTIN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;OUTPUT&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// the loop function runs over and over again forever&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;digitalWrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LED_BUILTIN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HIGH&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// turn the LED on (HIGH is the voltage level)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// wait for a second&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;digitalWrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LED_BUILTIN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LOW&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// turn the LED off by making the voltage LOW&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// wait for a second&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;前面那一堆介绍注释我就不复制了，有兴趣自己看，我们现在关注程序中出现的功能函数：&lt;code&gt;pinMode()&lt;/code&gt;、&lt;code&gt;digitalWrite()&lt;/code&gt;、&lt;code&gt;delay()&lt;/code&gt;。&lt;/p&gt;&#10;&lt;p&gt;根据注释其实我们可以知道它们的功能分别为初始化引脚功能，引脚电平改变，时间延迟，如果在VSCode中，我们可以按住Ctrl键然后鼠标单击该函数，即可进入该函数的定义界面。不过我们现在暂时不需要点击去知道这些功能，等以后你想自己实现一个Arduino的时候可以再尝试去看。&lt;/p&gt;&#10;&lt;p&gt;然后我们再看参数部分，OUTPUT、HIGH、LOW这些似乎比较好理解，但是LED_BUILTIN是什么东西？不用担心，我们同样Ctrl点击它，即可查看它的定义：&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="480px" data-flex-grow="200" height="404" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/img/52bb0868742053b303b2b91272870d20.webp" width="809"&gt;&lt;p&gt;它被宏定义为了1，现在我先告诉你这个1其实就是Arduino板子上标注了1的那个引脚，但是这个函数具体是怎么个原理呢？我们怎么知道一个函数需要怎么使用呢？&lt;/p&gt;&#10;&lt;h3 id="查看手册"&gt;&lt;a href="#%e6%9f%a5%e7%9c%8b%e6%89%8b%e5%86%8c" class="header-anchor"&gt;&lt;/a&gt;查看手册&#10;&lt;/h3&gt;&lt;p&gt;对于上述两个问题，最好的方案当然是查看手册了。打开Arduino IDE，选择帮助-参考，然后我们就打开了我们的功能函数手册，一个保存在你电脑里的网页，参考手册看上去很多而且是全英语的，但是不用担心，我来告诉你怎么查看它。&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="213px" data-flex-grow="88" height="1080" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/img/be4e29fe7e4bb3239f2d39f0ff567fd6.webp" width="960"&gt;&lt;p&gt;首先可以看到手册分成了三列，第一列的大标题是Structure（结构体），第二列是Variables（变量），第三列是Functions（函数）。&lt;/p&gt;&#10;&lt;h4 id="structure"&gt;&lt;a href="#structure" class="header-anchor"&gt;&lt;/a&gt;Structure&#10;&lt;/h4&gt;&lt;p&gt;其中我们看第一列的Structure内容很多，但是除了setup和loop函数，其实就是C语言基础的东西。&lt;/p&gt;&#10;&lt;h4 id="variables"&gt;&lt;a href="#variables" class="header-anchor"&gt;&lt;/a&gt;Variables&#10;&lt;/h4&gt;&lt;h5 id="constants"&gt;&lt;a href="#constants" class="header-anchor"&gt;&lt;/a&gt;Constants&#10;&lt;/h5&gt;&lt;p&gt;而第二列变量里，第一个大类Constants（常量）（是的，他把常量划分到变量列里了，不过不影响，只是个分类方法而已），这些是一些宏定义的量，如果你需要知道他有什么用，点开查看即可，不过一般基础使用常用的内容有以下几个：&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="292px" data-flex-grow="121" height="244" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/img/a24cafad9d0e22d2c2096e0705348a38.webp" width="297"&gt;&lt;p&gt;不知道电平是什么的我们在后面讲。&lt;/p&gt;&#10;&lt;h5 id="data-type"&gt;&lt;a href="#data-type" class="header-anchor"&gt;&lt;/a&gt;Data Type&#10;&lt;/h5&gt;&lt;p&gt;这个就是数据类型，C++与C之间的差别在于C++多了几个数据类型，其它没什么变化（不过不同芯片中同一类型占用的存储空间大小可能各自不同（也就是他的最大最小值可能会有差别），不过一般基础使用只要不遇到特别大或者特别小的一般不会遇到这些问题）我在这里标注了它们不同的地方：&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="136px" data-flex-grow="57" height="521" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/img/d3a6d198be7984e521491fa0e5e2a660.webp" width="297"&gt;&lt;h5 id="conversion"&gt;&lt;a href="#conversion" class="header-anchor"&gt;&lt;/a&gt;Conversion&#10;&lt;/h5&gt;&lt;p&gt;这里面是一堆强制转换函数&lt;/p&gt;&#10;&lt;h5 id="variable-scope--qualifiers"&gt;&lt;a href="#variable-scope--qualifiers" class="header-anchor"&gt;&lt;/a&gt;Variable Scope &amp;amp; Qualifiers&#10;&lt;/h5&gt;&lt;p&gt;变量作用域和限定符，主要用于限定作用域，其中static和const用法在基础阶段需要多练习掌握，而volatile则在真正开始做大项目之后开始慢慢掌握（提前掌握也挺好，只是怕你用不好）。&lt;/p&gt;&#10;&lt;h5 id="utilities"&gt;&lt;a href="#utilities" class="header-anchor"&gt;&lt;/a&gt;Utilities&#10;&lt;/h5&gt;&lt;p&gt;公共功能，其中sizeof主要在于你不知道数据类型的大小的时候使用（就是我前面说的最大最小值可能存在差别的地方）。&lt;/p&gt;&#10;&lt;p&gt;而PROGMEM是一个内存控制标识，基础使用应该用不到，当你在存储处理大量数据时可以使用。&lt;/p&gt;&#10;&lt;h2 id="电路基础"&gt;&lt;a href="#%e7%94%b5%e8%b7%af%e5%9f%ba%e7%a1%80" class="header-anchor"&gt;&lt;/a&gt;电路基础&#10;&lt;/h2&gt;&lt;p&gt;在讲Function之前，我想先讲述以下电路基础，便于理解这些函数的功能，这里先假设你知道基础的电压（电平）、电流、电阻是什么，如果不知道还请去百度。&lt;/p&gt;&#10;&lt;h3 id="模拟电路"&gt;&lt;a href="#%e6%a8%a1%e6%8b%9f%e7%94%b5%e8%b7%af" class="header-anchor"&gt;&lt;/a&gt;模拟电路&#10;&lt;/h3&gt;&lt;p&gt;平常我们见到的像是音频波纹这些，都属于模拟信号，它们在时间上是连续的，一般来说我们正常制作和能感知到的电路都是模拟电路，我们可以把模拟电路某点的电压在时间上的改变用图像来标示，下面是一个模拟电路的波形示例：&lt;/p&gt;&#10;&lt;img class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="375" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/img/87df440dc801c80aae1089ce5f43937a.webp" width="500"&gt;&lt;h3 id="数字电路"&gt;&lt;a href="#%e6%95%b0%e5%ad%97%e7%94%b5%e8%b7%af" class="header-anchor"&gt;&lt;/a&gt;数字电路&#10;&lt;/h3&gt;&lt;p&gt;数字电路其实是我们人为抽象出来的电路，也被称为逻辑电路。有一些半导体，比如LED二极管就有一个特性，当两引脚两端电压低于某个界限时它是相当于断路的，而如果高于这个电压，它又是相当于短路的，而断路和短路两种状态就可以等效为0和1两个数字，0表示其中电流不存在，断路，即低电平，而1表示电流存在，短路，即高电平。当然实际上的定义是一个数学上的概念，不过我们这里姑且这么理解就行了。而半导体因为这个特性就拥有了逻辑功能，加上一些特殊的半导体还有一些其它特性，人们把它们制作成了芯片。&lt;/p&gt;&#10;&lt;p&gt;所以我们平常使用的芯片之类的都是半导体元件，而在外界和内部的处理信息方式都是对数字电路的处理。&lt;/p&gt;&#10;&lt;img class="gallery-image" data-flex-basis="324px" data-flex-grow="135" height="333" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/img/ab0c76b24e577ddfc5a5b7404047c036.webp" width="450"&gt;&lt;p&gt;但是具体多高的电平是高电平多低是低电平呢。一般来说对于一个普通的芯片，它会有两种电源引脚，一个叫GND，一个叫VCC，GND作为参考基准电平，我们统一将其标定为0V，那么VCC和GND的电压差就是工作电压，我们可以直接用VCC的压值来直接表示。一般常见的工作电压有3.3V和5V，而UNO即为5V，在与UNO这类5V单片机定义电压分界的时候，往往定义的3V往上为1，往下为0，但是为了稳妥起见，芯片自身输出的1就是其工作电压，而0就是其GND的电压。&lt;/p&gt;&#10;&lt;h3 id="模数转换和数模转换"&gt;&lt;a href="#%e6%a8%a1%e6%95%b0%e8%bd%ac%e6%8d%a2%e5%92%8c%e6%95%b0%e6%a8%a1%e8%bd%ac%e6%8d%a2" class="header-anchor"&gt;&lt;/a&gt;模数转换和数模转换&#10;&lt;/h3&gt;&lt;p&gt;模拟电路和数字电路其实是可以相互转换的，一般我们如果需要从外界读取一个模拟量（就是我们不只是需要简单知道其电平为1还是0，而是需要知道具体电压），就可以使用模数转换然后得到结果。如果我们需要输出一个模拟量，就可以通过数模转换将数字信号生成模拟信号。&lt;/p&gt;&#10;&lt;img class="gallery-image" data-flex-basis="223px" data-flex-grow="92" height="1400" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/img/59f0c1f4debbcd9e73d86f27167f084b.webp" width="1301"&gt;&lt;h3 id="pwm"&gt;&lt;a href="#pwm" class="header-anchor"&gt;&lt;/a&gt;PWM&#10;&lt;/h3&gt;&lt;p&gt;这个属于数字信号的内容，因为我们知道输出电压在电路中其实等效于输出能量，而在周期时间内通过控制高低电平输出时间占比，就可以控制单位时间内能量的输出总量，实现脉冲调制的功能。当然这个功能不仅仅能用于控制能量，但是一般来说我们在基础阶段知道这一个功能即可。&lt;/p&gt;&#10;&lt;h2 id="接上面的功能函数"&gt;&lt;a href="#%e6%8e%a5%e4%b8%8a%e9%9d%a2%e7%9a%84%e5%8a%9f%e8%83%bd%e5%87%bd%e6%95%b0" class="header-anchor"&gt;&lt;/a&gt;接上面的功能函数&#10;&lt;/h2&gt;&lt;h3 id="functions"&gt;&lt;a href="#functions" class="header-anchor"&gt;&lt;/a&gt;Functions&#10;&lt;/h3&gt;&lt;p&gt;这些功能函数其实就是Arduino官方设定的一些基础功能，而我们未来可能在使用途中会遇到更多的功能函数，但是从理论上那些功能大多数都是可以通过这些基础函数进行实现的，我接下来用图片罗列出它们的功能，不需要详细去记用法，如果需要用到的就直接再点开详细看就行，不然里面很多不常用的你记了后面也会忘，知道有些啥就行。&lt;/p&gt;&#10;&lt;h4 id="普通引脚功能函数"&gt;&lt;a href="#%e6%99%ae%e9%80%9a%e5%bc%95%e8%84%9a%e5%8a%9f%e8%83%bd%e5%87%bd%e6%95%b0" class="header-anchor"&gt;&lt;/a&gt;普通引脚功能函数&#10;&lt;/h4&gt;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="129px" data-flex-grow="53" height="587" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/img/928ec71e7a81a39151acd7da14dfd518.webp" width="316"&gt;&lt;h4 id="时间函数"&gt;&lt;a href="#%e6%97%b6%e9%97%b4%e5%87%bd%e6%95%b0" class="header-anchor"&gt;&lt;/a&gt;时间函数&#10;&lt;/h4&gt;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="405px" data-flex-grow="168" height="180" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/img/53e6bcfaf4757c926f8f14bfb84b8044.webp" width="304"&gt;&lt;h4 id="数学函数"&gt;&lt;a href="#%e6%95%b0%e5%ad%a6%e5%87%bd%e6%95%b0" class="header-anchor"&gt;&lt;/a&gt;数学函数&#10;&lt;/h4&gt;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="290px" data-flex-grow="121" height="252" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/img/83055458ec6053dd60e03e7f7c7ddeb1.webp" width="305"&gt;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="408px" data-flex-grow="170" height="135" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/img/ba0f3a3ec5aaabbe1e4da94668689fb9.webp" width="230"&gt;&lt;h4 id="字符判断函数"&gt;&lt;a href="#%e5%ad%97%e7%ac%a6%e5%88%a4%e6%96%ad%e5%87%bd%e6%95%b0" class="header-anchor"&gt;&lt;/a&gt;字符判断函数&#10;&lt;/h4&gt;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="163px" data-flex-grow="68" height="444" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/img/e12a692e5e3f7df829b9d166792e27f7.webp" width="302"&gt;&lt;h4 id="随机数"&gt;&lt;a href="#%e9%9a%8f%e6%9c%ba%e6%95%b0" class="header-anchor"&gt;&lt;/a&gt;随机数&#10;&lt;/h4&gt;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="602px" data-flex-grow="250" height="116" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/img/ed08e93c464bed7891b88924c01f87a4.webp" width="291"&gt;&lt;h4 id="位操作"&gt;&lt;a href="#%e4%bd%8d%e6%93%8d%e4%bd%9c" class="header-anchor"&gt;&lt;/a&gt;位操作&#10;&lt;/h4&gt;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="208px" data-flex-grow="86" height="255" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/img/4794f6083da926f6bcc3e59b6dec5de7.webp" width="221"&gt;&lt;h4 id="中断"&gt;&lt;a href="#%e4%b8%ad%e6%96%ad" class="header-anchor"&gt;&lt;/a&gt;中断&#10;&lt;/h4&gt;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="353px" data-flex-grow="147" height="226" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/img/4d7a674a1b2e9062d414907d168b81f6.webp" width="333"&gt;&lt;h4 id="通信"&gt;&lt;a href="#%e9%80%9a%e4%bf%a1" class="header-anchor"&gt;&lt;/a&gt;通信&#10;&lt;/h4&gt;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="299px" data-flex-grow="124" height="248" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/img/36c3e79584e1750c2ca672cb6436c09e.webp" width="309"&gt;&lt;p&gt;不过上面其实只是一小部分，我们回到这个网页顶部，然后这里有个Libraries，点开它，里面罗列了一堆库的用法介绍。&lt;/p&gt;&#10;&lt;h2 id="我们现在究竟需要掌握些什么"&gt;&lt;a href="#%e6%88%91%e4%bb%ac%e7%8e%b0%e5%9c%a8%e7%a9%b6%e7%ab%9f%e9%9c%80%e8%a6%81%e6%8e%8c%e6%8f%a1%e4%ba%9b%e4%bb%80%e4%b9%88" class="header-anchor"&gt;&lt;/a&gt;我们现在究竟需要掌握些什么&#10;&lt;/h2&gt;&lt;p&gt;相信你看到这么多功能感觉特别复杂了，不过不用担心，很多功能其实不太常用，我现在说一下一些比较常用的功能和函数，这些你去学习就好了。&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="356px" data-flex-grow="148" height="642" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/img/2d3673d1c2cd3162e1be37bd605ddd2b.webp" width="953"&gt;&lt;ol&gt;&#10;&lt;li&gt;上面勾出来的三个库，你需要大概去掌握它们，其中SPI和I2C与前面Serial那个串口（UART）是非常常见而且重要的三种通信协议，你需要知道它们大概的通信流程。这些功能可以在Arduino IDE种官方提供的例程和这个参考手册综合学习。&lt;/li&gt;&#10;&lt;li&gt;EEPROM那个功能其实不是那么的重要，但是掌握它有助于你去理解芯片底层的存储机理。&lt;/li&gt;&#10;&lt;li&gt;前面digital I/O和analog I/O的六个函数需要掌握，这是最基础的内容。&lt;/li&gt;&#10;&lt;li&gt;掌握delay函数。&lt;/li&gt;&#10;&lt;li&gt;掌握中断原理并能自己写一两个中断。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;如果你可以使用我上面写的这五条里的功能，配合我前面讲的这些学习方法，Arduino的基础内容就基本难不倒你了。&lt;/p&gt;&#10;&lt;h2 id="后记"&gt;&lt;a href="#%e5%90%8e%e8%ae%b0" class="header-anchor"&gt;&lt;/a&gt;后记&#10;&lt;/h2&gt;&lt;p&gt;说来惭愧，我本以为会语言精炼地讲通这些，但是还是存在很多没讲好的地方，还请多多包含。本教程为一个入门教程，重点在于告诉你该如何快速去掌握Arduino这个平台并在后期深入学习，但是真正要学会还是得自己去深入了解掌握，毕竟你永远不可能通过一本书甚至这么一篇文章就成为高手。&lt;/p&gt;&#10;&lt;p&gt;其实之所以我在里面并没有怎么讲具体你要去实现什么怎么做，而是从底层原理和学习方法来讲，是因为每个人想要做的事是不同的，我如果将每个功能挨个讲完，那复杂程度就配不上Arduino这种专门为简化编程而生的平台了。&lt;/p&gt;&#10;</description></item><item><title>Arduino极速入门教程——两篇文章让你会用Arduino（上）</title><link>https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8A/</link><pubDate>Mon, 01 Feb 2021 20:06:25 +0800</pubDate><guid>https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8A/</guid><description>&lt;img src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8A/cover.jpg" alt="Featured image of post Arduino极速入门教程——两篇文章让你会用Arduino（上）" /&gt;&lt;p&gt;&lt;em&gt;开坑使我快乐，本教程仅供初学者入门学习使用，要想深入还是得靠自己。本教程假设读者为完全无编程基础的普通人，所以行文可能会稍显啰嗦，但相信仍然会是目前比较精炼简短的教程。&lt;/em&gt;&lt;/p&gt;&#10;&lt;h2 id="arduino是啥"&gt;&lt;a href="#arduino%e6%98%af%e5%95%a5" class="header-anchor"&gt;&lt;/a&gt;Arduino是啥&#10;&lt;/h2&gt;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="100" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8A/img/f76db95c185db2bdcbe5ec32110da6dd.webp" width="100"&gt;&lt;p&gt;一个开源的硬件开发平台，其特点在于简单易学易上手，而且国内外资源多，有啥问题也好解决。&lt;/p&gt;&#10;&lt;h2 id="arduino要些什么知识"&gt;&lt;a href="#arduino%e8%a6%81%e4%ba%9b%e4%bb%80%e4%b9%88%e7%9f%a5%e8%af%86" class="header-anchor"&gt;&lt;/a&gt;Arduino要些什么知识&#10;&lt;/h2&gt;&lt;h3 id="基础"&gt;&lt;a href="#%e5%9f%ba%e7%a1%80" class="header-anchor"&gt;&lt;/a&gt;基础&#10;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;有这些基础你基本上可以用Arduino做出网上常见的60%的项目。&lt;/em&gt;&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;C语言基础和一点面向对象语言编程概念&#10;&lt;ol&gt;&#10;&lt;li&gt;Arduino编程时使用C++，但是C++是兼容C语言的，一些简单基础的部分有C语言基础就能实现。&lt;/li&gt;&#10;&lt;li&gt;在基础使用时我们仍然会使用到面向对象编程的东西，先掌握概念和一点基础的东西，初学阶段够用就行。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;初中电学知识和一点数电模电概念&#10;&lt;ol&gt;&#10;&lt;li&gt;知道短路、断路概念还有电压电流电阻之间的关系计算，这是硬件制作最基础的东西。&lt;/li&gt;&#10;&lt;li&gt;有一些涉及电容、电感、半导体的内容，这些一般属于模电知识，初学的时候不需要了解，因为我们可以用别人做好的电路，稍微连连线就行。&lt;/li&gt;&#10;&lt;li&gt;数字电路会是一个很常用的概念，不过初学阶段你只需要知道二进制计算就行。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;时间、精力和钱&#10;&lt;ol&gt;&#10;&lt;li&gt;虽然Arduino的资料很多，但是偶尔你也可能遇到百度上找不到的问题（也有可能是你因为知识不够无法形容出来的问题），要把这些问题解决你需要花很多时间来搜索、学习、试错。&lt;/li&gt;&#10;&lt;li&gt;学习是一个很耗费精力的事，事实上你最好喜欢一样知识或者有一个明确需要学习它的理由，才能更好坚持下来。&lt;/li&gt;&#10;&lt;li&gt;Arduino属于硬件开发平台，和平常我们电脑手机上开发一个程序软件游戏不同，硬件购买时将会花费大量的金钱，我会在后面不时提一下怎么尽量省钱去买这些硬件，但是实际学习中你仍然要做好花钱的准备。&lt;/li&gt;&#10;&lt;li&gt;不过不要被我上面说的吓到了，毕竟硬件如果能做好也是可以带来收入的，很多东西都是会者不难，难者不会，现代社会赚钱不就是赚信息差嘛。我在学Arduino没多久的时候，靠着百度搜搜改改，就用它接到了我人生中的第一笔单子，用了一下午赚了三百块。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="进阶"&gt;&lt;a href="#%e8%bf%9b%e9%98%b6" class="header-anchor"&gt;&lt;/a&gt;进阶&#10;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;这些是你觉得自己已经行了之后可以继续深入学习的方向，本教程会不时提及但是不做详述。&lt;/em&gt;&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;C++语言编程&#10;&lt;ol&gt;&#10;&lt;li&gt;C++是Arduino的核心语言，虽然运行效率略低于直接用C，但是其带来的方便性可以让我们无视这几毫秒。&lt;/li&gt;&#10;&lt;li&gt;网上说C++有点难学，但是不要担心，你只是需要用它来做Arduino而已，不会怎么用到C++那些乱七八糟的复杂特性。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;嵌入式编程&#10;&lt;ol&gt;&#10;&lt;li&gt;当你可以自己从底层上将一个全新的芯片做成Arduino的时候，你就可以算嵌入式编程入门了。&lt;/li&gt;&#10;&lt;li&gt;有句话叫嵌入式门槛在门里，前期简单入门做点简单事不用担心，但是越到后面学习难度越陡峭，请提前做好准备。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;操作系统&#10;&lt;ol&gt;&#10;&lt;li&gt;这里涉及到嵌入式编程的高级操作了，主要目的是为了实现多线程（让芯片同一时间处理多件事），不需要去详细学，接触到嵌入式后自然会学到&lt;/li&gt;&#10;&lt;li&gt;如果你从软件那边往嵌入式这边学的话也会学到这个东西，操作系统往上就是我们平常在系统环境上的编程，往下就是针对硬件的编程&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;网络编程&#10;&lt;ol&gt;&#10;&lt;li&gt;这个主要是未来物联网开发会更加多，甚至现在所谓的嵌入式编程和物联网编程都有点代称的感觉了，所以你需要掌握一定的网络编程的知识&lt;/li&gt;&#10;&lt;li&gt;如果你有操作系统上的网络编程开发经验，那么你在理解这一块上会比较容易，而如果你学会了这块，后面想学互联网行业的技术也会比较容易&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;复杂的电路知识&#10;&lt;ol&gt;&#10;&lt;li&gt;初中那点电路知识在这肯定是不够的，高频射频电路、高速电路的设计，这些也是可以学习的一个点（但是不是必学的，因为这一块实际上会有专门的开发人员），当然实际上这里也包括了半导体设计、FPGA啥的（这又是另外一个行业了，但是了解一些知识有助于更好地理解一些底层原理）&lt;/li&gt;&#10;&lt;li&gt;玩Arduino的大多都是对极客、发明家之类的感兴趣的朋友，所以会电路设计肯定会让你节省下更多的时间精力和钱&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;非常非常多的时间、精力和钱&#10;&lt;ol&gt;&#10;&lt;li&gt;你要深入学习那么路线就肯定是很陡峭的，事实上我在上面罗列的这些东西也只是所有知识的冰山一角，不过你既然都看到这了想必也下定决心了，所以，加油吧。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="学习须知"&gt;&lt;a href="#%e5%ad%a6%e4%b9%a0%e9%a1%bb%e7%9f%a5" class="header-anchor"&gt;&lt;/a&gt;学习须知&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;请务必保持不求甚解的态度，所有的东西你不需要挨个记住，只需有个大概印象即可，因为有些知识并不是你后来会常用的，花时间去记浪费时间又容易造成挫败感，而经常用的东西你在多用了之后自然就记住了。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;有个大概印象后需要多自己做项目，做点小玩意，可以搜索借鉴代码，但是要多思考，这样才能帮助你融会贯通所学的知识，也才能让你从一大堆知识中总结凝练出能够帮助到自己的东西。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h2 id="环境搭建"&gt;&lt;a href="#%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba" class="header-anchor"&gt;&lt;/a&gt;环境搭建&#10;&lt;/h2&gt;&lt;p&gt;在看完这一章之前先别买硬件，免得吃亏买贵了。&lt;/p&gt;&#10;&lt;p&gt;百度Arduino，你一般会看到最前面的两个链接，其中一个是&lt;a class="link" href="https://www.arduino.cc/" target="_blank" rel="noopener"&#10; &gt;英文官网&lt;/a&gt;，另二个是&lt;a class="link" href="https://www.arduino.cn/" target="_blank" rel="noopener"&#10; &gt;中文社区&lt;/a&gt;。这两个网站里面都有安装包可以下载，我们这里举例为选择官网下载，点击我上面给的链接即可进入英文官网，然后界面中依次选择：Software-Download，在出现的下载界面里点击你需要的程序包。&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;如果选择ZIP file你将获得一个压缩包，这个属于免安装的方式，直接解压就可以使用，更方便，但是稳定性弱点（一般也没啥）。其中Windows平台不建议点那个Windows app选项，那个是从Windows应用商店下载安装的，这种安装方式有时候要搞点花的不方便。&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;下载好后你将获得一个安装程序或者压缩文件，将Arduino安装或解压到你一个找得到的位置即可，它可能会让你安装一个驱动，同样安装即可。&lt;/p&gt;&#10;&lt;p&gt;然后你的Arduino环境就搭建好了，非常简单。&lt;/p&gt;&#10;&lt;h2 id="界面介绍"&gt;&lt;a href="#%e7%95%8c%e9%9d%a2%e4%bb%8b%e7%bb%8d" class="header-anchor"&gt;&lt;/a&gt;界面介绍&#10;&lt;/h2&gt;&lt;p&gt;现在打开你的Arduino（实际上它叫Arduino IDE，即Arduino的集成开发环境）：&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="853px" data-flex-grow="355" height="43" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8A/img/aece828185d2568e885958e84703cb27.webp" width="153"&gt;&lt;p&gt;让我们来看看界面长啥样：&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="196px" data-flex-grow="81" height="593" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8A/img/40ba8766233b7acfd00109ff5b3b75a8.webp" width="486"&gt;&lt;p&gt;可以看到，下载安装好后它就是一个不大简单的中文界面，现在我将其放大然后标注一下主界面的内容：&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="788" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8A/img/3b00d2466908d268bae58c866204cb1c.webp" width="1400"&gt;&lt;h3 id="配置"&gt;&lt;a href="#%e9%85%8d%e7%bd%ae" class="header-anchor"&gt;&lt;/a&gt;配置&#10;&lt;/h3&gt;&lt;p&gt;为了方便起见，在此对我们的Arduino IDE进行配置一下，点击文件-首选项：&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="394px" data-flex-grow="164" height="488" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8A/img/36e0214d5c5af7f8162fcddd2bcb4d62.webp" width="802"&gt;&lt;p&gt;然后我们可以看到新界面，也没啥大变化，多了个行号和可折叠符号，不喜欢也可以去掉，不过建议留着，比较方便：&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="541px" data-flex-grow="225" height="173" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8A/img/85ea6fa9deb287122e87cbe789a5735b.webp" width="390"&gt;&lt;p&gt;设置完了，我们再看看工具栏中还有一些其它什么有用的功能没：&lt;/p&gt;&#10;&lt;h3 id="文件"&gt;&lt;a href="#%e6%96%87%e4%bb%b6" class="header-anchor"&gt;&lt;/a&gt;文件&#10;&lt;/h3&gt;&lt;p&gt;首先点开文件，这里面最重要的除了刚才讲过的首选项界面，另一个就是示例了，里面给出了很多例子供以学习：&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="110px" data-flex-grow="45" height="857" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8A/img/2909eca58ef255c6ecae2b9c29b2134c.webp" width="393"&gt;&lt;h3 id="编辑"&gt;&lt;a href="#%e7%bc%96%e8%be%91" class="header-anchor"&gt;&lt;/a&gt;编辑&#10;&lt;/h3&gt;&lt;p&gt;然后是编辑界面，这里有一个复制到论坛和复制为HTML可以把代码以特定格式进行全部复制，便于分享；&lt;/p&gt;&#10;&lt;p&gt;另外下面还有三行关于注释、缩进的功能，如果再框选一大段文字后通过快捷键进行操作的话，可以实现块注释和块缩进：&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="124px" data-flex-grow="51" height="438" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8A/img/099a88fc84c8c91039499ff4f172045d.webp" width="227"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c++" data-lang="c++"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setup&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// put your setup code here, to run once:&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// put your main code here, to run repeatedly:&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="项目"&gt;&lt;a href="#%e9%a1%b9%e7%9b%ae" class="header-anchor"&gt;&lt;/a&gt;项目&#10;&lt;/h3&gt;&lt;p&gt;然后是项目界面，其中编译、上传功能在上面已经说过了，通过编程器上传即既编译又上传，而导出已编译的二进制文件则是将编译好生成的将会上传到芯片中的文件先导出保存，然后通过其它软件进行烧录上传；&lt;/p&gt;&#10;&lt;p&gt;而显示项目文件夹顾名思义就是找到项目当前地址，而加载库则为添加所需库文件，至于添加文件顾名思义就是把一些文件内容添加到工程里：&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="333px" data-flex-grow="139" height="189" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8A/img/68ae354466bc7fd07773b4dfc1963038.webp" width="263"&gt;&lt;h3 id="工具"&gt;&lt;a href="#%e5%b7%a5%e5%85%b7" class="header-anchor"&gt;&lt;/a&gt;工具&#10;&lt;/h3&gt;&lt;p&gt;工具栏是一个很重要的部分，我们经常要在这里设置东西，其中自动格式化就是调整代码的缩进让他符合C++语言推荐规范。项目存档就是把项目通过zip封装起来进行保存。修正编码并重新加载我也不知道是个啥，目前没用过。管理库就是对库文件进行管理。串口监视器和绘图器都是串口工具，但是一个直接显示文字，一个可以把数字以图像形式绘制。下面的东西是开发板设置，后面我会详细讲。编程器和烧录引导程序一般用不到，后面会提。&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="270px" data-flex-grow="112" height="317" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8A/img/2de159245d15b26457c1367c4c019fb8.webp" width="357"&gt;&lt;h3 id="帮助"&gt;&lt;a href="#%e5%b8%ae%e5%8a%a9" class="header-anchor"&gt;&lt;/a&gt;帮助&#10;&lt;/h3&gt;&lt;p&gt;帮助界面提供的都是官方的英文网址链接，可以在网站上进行查询相应的需求功能，不过一般重要的只有参考功能，其它可以不管。&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="236px" data-flex-grow="98" height="222" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8A/img/a259a8fee7326e14dd789e50ee9e799d.webp" width="219"&gt;&lt;h2 id="硬件"&gt;&lt;a href="#%e7%a1%ac%e4%bb%b6" class="header-anchor"&gt;&lt;/a&gt;硬件&#10;&lt;/h2&gt;&lt;p&gt;所谓硬件，一般就是指的单片机开发板，单片机是一块小芯片，可以理解为一个简化版的电脑CPU，通过配合各种传感器实现各种功能，我们平常经常使用的运动手环、汽车导航等都是单片机制作的，事实上我们手机的芯片从定义上也是高级单片机的一种。而单片机开发板就是把单片机焊接在一个可以用于开发工作的电路板上制成的。&lt;/p&gt;&#10;&lt;p&gt;官方Arduino（是的，虽然是开源硬件，但是它仍然有个官方，类似于基金会的形式存在）使用的单片机为AVR系列（这些所谓系列一般就是指的芯片提供厂家），其中最著名的Arduino开发板名字叫Arduino UNO（音同乌诺），官方的长这样，买下来应该要一百多：&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="375" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8A/img/55fb6288f448b5b447c8a97c90f39aa7.webp" width="500"&gt;&lt;p&gt;他的芯片是AVR系列的Atmega328p单片机，当然因为这是开源的产品，所以也有很多非官方的板子（这不是盗版，因为硬件是开源的，事实上通过电路图你自己也可以来做一个板子），网上我见过最便宜的只要十块左右（当时打折，总之一般不超过二十，当然有一些添加了新的外设那种会很贵但是买了也不亏，不过目前如果你不懂就别买），总之别买贵了。初学者买UNO是最方便的，看到这里你可以去买UNO板了，但是其它的东西也还是先别买（最好找那种送USB线的，因为这种方口USB比较少见）。然后我们可以看到UNO的板载资源有这些：&lt;/p&gt;&#10;&lt;img class="gallery-image" data-flex-basis="431px" data-flex-grow="179" height="648" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8A/img/aee98a2cdb591403204d8e6471e5541e.webp" width="1166"&gt;&lt;p&gt;其中USB接口可以用来供电或者上传程序，DC插头只能用于供电，左右两边的两排孔是用于接线的。而上面那很大一坨的芯片，就是ATMEGA328p，是核心芯片，而复位按键功能类似于重启按钮。其它的暂时不需要知道，因为平常也不用。&lt;/p&gt;&#10;&lt;p&gt;除了UNO以外，Arduino官方还用AVR系列的单片机制作了micro、mini、mega、leonardo等一系列官方Arduino。而民间也有使用AVR制作的Arduino，比如之前出名了一阵的bad USB（一个USB入侵设备），另外还有更多通过其它芯片制作的Arduino，例如STM32的Maple系列、STM32duino系列、ESP32、ESP8266的Nodemcu等等，当然如果你后面技术精湛了，也可以尝试把自己喜欢的芯片做成Arduino然后自己给它命名并发布出去。&lt;/p&gt;&#10;&lt;p&gt;不过现在我们还是继续讲UNO吧，因为Arduino将底层的东西封装起来，所以很多时候这些代码是可以互用的。&lt;/p&gt;&#10;&lt;p&gt;然后你可以在淘宝上搜索以下东西：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;面包板（大小无所谓）&lt;/li&gt;&#10;&lt;li&gt;杜邦线（公对公、母对母、公对母三种最好都买）&lt;/li&gt;&#10;&lt;li&gt;电阻（直插式的，精度要求不高，一包几百个只要几块钱）&lt;/li&gt;&#10;&lt;li&gt;LED（发光二极管，直插式的，随便什么颜色）&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;上述这些东西买下来差不多三十块左右，不用买多了。&lt;/p&gt;&#10;&lt;p&gt;然后下单，等待你的快递，我们在这段时间学学C语言基础。&lt;/p&gt;&#10;&lt;h2 id="c语言基础"&gt;&lt;a href="#c%e8%af%ad%e8%a8%80%e5%9f%ba%e7%a1%80" class="header-anchor"&gt;&lt;/a&gt;C语言基础&#10;&lt;/h2&gt;&lt;p&gt;因为一般来说会学这个的大多还是知道编程是个啥的，但是我们还是要考虑到所有人群，故而这里简单介绍一下C语言基础学习方案。&lt;/p&gt;&#10;&lt;p&gt;因为我们只需要一个基础，而且你等待快递的时间一般也就三天左右，所以我这里只提供一个非常简要的学习方案：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;打开&lt;a class="link" href="https://www.runoob.com/cprogramming/c-tutorial.html" target="_blank" rel="noopener"&#10; &gt;菜鸟教程的C语言教程&lt;/a&gt;。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;看完如图所示的部分&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="88px" data-flex-grow="37" height="470" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8A/img/7c0a8b900bfb068d506bb81346c792d1.webp" width="174"&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;尝试写出这样一个程序：&lt;/p&gt;&#10;&lt;p&gt;先写一个函数，这个函数的功能为根据参数设定在屏幕上打印与参数相等行的“Hello World!”。在封装好函数后，实现如下功能：用户输入行数，如果行数为奇数则执行上述函数的功能，如果为偶数则不执行，并且通过switch语句实现判断，如果行数为1-5，则分别在最后输出一行He、ll、oW、rl、d!。&lt;/p&gt;&#10;&lt;p&gt;如果可以实现上述程序，那么你基本上就掌握了C语言的基础了，然后我们后面再进行后面的教程。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="后言"&gt;&lt;a href="#%e5%90%8e%e8%a8%80" class="header-anchor"&gt;&lt;/a&gt;后言&#10;&lt;/h2&gt;&lt;p&gt;本教程只有两章，下一章内容即为具体编程部分：&lt;a class="link" href="[Arduino%e6%9e%81%e9%80%9f%e5%85%a5%e9%97%a8%e6%95%99%e7%a8%8b%e2%80%94%e2%80%94%e4%b8%a4%e7%af%87%e6%96%87%e7%ab%a0%e8%ae%a9%e4%bd%a0%e4%bc%9a%e7%94%a8Arduino%ef%bc%88%e4%b8%8b%ef%bc%89.md]%28/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/arduino%E6%9E%81%E9%80%9F%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E4%B8%A4%E7%AF%87%E6%96%87%E7%AB%A0%E8%AE%A9%E4%BD%A0%E4%BC%9A%E7%94%A8arduino%E4%B8%8B/%29" &gt;链接&lt;/a&gt;。&lt;/p&gt;&#10;</description></item><item><title>MSP432在Energia上的使用（下）</title><link>https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/msp432%E5%9C%A8energia%E4%B8%8A%E7%9A%84%E4%BD%BF%E7%94%A8%E4%B8%8B/</link><pubDate>Sat, 07 Nov 2020 19:46:09 +0800</pubDate><guid>https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/msp432%E5%9C%A8energia%E4%B8%8A%E7%9A%84%E4%BD%BF%E7%94%A8%E4%B8%8B/</guid><description>&lt;img src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/msp432%E5%9C%A8energia%E4%B8%8A%E7%9A%84%E4%BD%BF%E7%94%A8%E4%B8%8B/cover.jpg" alt="Featured image of post MSP432在Energia上的使用（下）" /&gt;&lt;h1 id="msp432-在-energia-上的使用下"&gt;&lt;a href="#msp432-%e5%9c%a8-energia-%e4%b8%8a%e7%9a%84%e4%bd%bf%e7%94%a8%e4%b8%8b" class="header-anchor"&gt;&lt;/a&gt;MSP432 在 Energia 上的使用（下）&#10;&lt;/h1&gt;&lt;p&gt;&lt;em&gt;其实我自己都没想到我居然会来填坑，不过说实话这好像也算不上填坑，毕竟之前在&lt;a class="link" href="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/msp430%E5%9C%A8energia%E4%B8%8A%E7%9A%84%E4%BD%BF%E7%94%A8%E4%B8%8A/" &gt;MSP430 在 Energia 上的使用（上）&lt;/a&gt;这个帖子里讲的是 MSP430，而且说的准备在 VSCode 里装 Energia 其实到现在还没弄，不过这里还是想介绍一下 Energia 的另一项功能，一个专属于 MSP432 的功能。&lt;/em&gt;&lt;/p&gt;&#10;&lt;!-- @import "[TOC]" {cmd="toc" depthFrom=1 depthTo=6 orderedList=false} --&gt;&#10;&lt;!-- code_chunk_output --&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="#msp432-%e5%9c%a8-energia-%e4%b8%8a%e7%9a%84%e4%bd%bf%e7%94%a8%e4%b8%8b" &gt;MSP432 在 Energia 上的使用（下）&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%8f%91%e7%8e%b0" &gt;发现&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e4%bd%bf%e7%94%a8%e6%96%b9%e6%b3%95" &gt;使用方法&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="#task1" &gt;TASK1&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#task2" &gt;TASK2&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#task3" &gt;TASK3&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;!-- /code_chunk_output --&gt;&#10;&lt;h2 id="发现"&gt;&lt;a href="#%e5%8f%91%e7%8e%b0" class="header-anchor"&gt;&lt;/a&gt;发现&#10;&lt;/h2&gt;&lt;p&gt;事实证明多看官网还是有好处的，之前我在使用 Energia 对 MSP430 进行编程时一直非常疑惑，为什么 TI 公司不直接使用 Arduino 已有的 IDE 而非要做个自己的 Energia 导致不为人知非常冷门，但是官网上的介绍回答了我这一点。打开&lt;a class="link" href="https://energia.nu/" target="_blank" rel="noopener"&#10; &gt;Energia 官网&lt;/a&gt;，进入 Guide 界面，翻阅一下可以看见一个名词——&lt;strong&gt;MultiTasking&lt;/strong&gt;，即多任务。众所周知如果单片机想要实现多任务并行，一般需要自己搭建 RTOS 或者更复杂一点进行专门的时分复用设计，这些方法往往需要较丰富的知识才能实现。而 Energia 就可以非常简单地（其实如果进行一些复杂操作也是挺复杂的）实现多任务操作。而官网在这里其实也给出了关于 Multitasking 的&lt;a class="link" href="https://energia.nu/guide/foundations/programming_technique/multitasking/" target="_blank" rel="noopener"&#10; &gt;介绍&lt;/a&gt;，值得注意的是&lt;strong&gt;目前该功能只能作用与 MSP432，MSP432E，CC3320 和 CC1310&lt;/strong&gt;几种芯片，这也是为什么我把这一章名字改成了 MSP432 而不是 MSP430。（说起来每次打开 Energia 它的启动显示里面也写到了 Energia MT，实际上就是说的这个功能，不过我一直没咋注意）&lt;/p&gt;&#10;&lt;h2 id="使用方法"&gt;&lt;a href="#%e4%bd%bf%e7%94%a8%e6%96%b9%e6%b3%95" class="header-anchor"&gt;&lt;/a&gt;使用方法&#10;&lt;/h2&gt;&lt;p&gt;其实官网原文就有一个大概介绍了，我这里就重复一下。关于 MultiTasking（以下简称 MT）的使用其实非常简单（如果不想做太复杂的话）。&lt;/p&gt;&#10;&lt;p&gt;每次新建工程后，我们会有一个初始界面，上面写的 void setup()和 void loop()（其实就是正常 Energia 或 Arduino IDE 在新建后的工程界面），我们可以把这个界面称之为工程主界面。如果只使用工程主界面写一个程序，那么它只是普通的单线程程序，但是如果你使用的是 MSP432 这类单片机，你可以点击 IDE 右上角的倒三角符号，新建一个 task，随便输入一个名字作为新任务（Task）的名字（注意不要输入后缀，IDE 会自动将其生成为 ino）然后你可以在里面写两个函数，他们便可以当成一个新的 setup 和 loop 函数了，此时如果烧录进芯片后，芯片便会同时运行两个任务（实际上并不是同时运行，只是通过快速转换两个任务的运行最后看上去是同时运行）。&lt;/p&gt;&#10;&lt;p&gt;示例程序有很多，这里介绍其中最简单的 MultiBlink 的程序。&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="768px" data-flex-grow="320" height="250" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/msp432%E5%9C%A8energia%E4%B8%8A%E7%9A%84%E4%BD%BF%E7%94%A8%E4%B8%8B/img/e7c8578e4b34b19fce183c3a6cf317c1.webp" width="800"&gt;&lt;h4 id="task1"&gt;&lt;a href="#task1" class="header-anchor"&gt;&lt;/a&gt;TASK1&#10;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-C++" data-lang="C++"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define LED BLUE_LED&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setup&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// initialize the digital pin as an output.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;pinMode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;OUTPUT&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;digitalWrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HIGH&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//turn the LED on by making the voltage HIGH&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// wait for a second&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;digitalWrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LOW&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//turn the LED off by making the voltage LOW&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// wait for a second&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="task2"&gt;&lt;a href="#task2" class="header-anchor"&gt;&lt;/a&gt;TASK2&#10;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-C++" data-lang="C++"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define LED GREEN_LED&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setupGreenLed&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// initialize the digital pin as an output.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;pinMode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;OUTPUT&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;loopGreenLed&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;digitalWrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HIGH&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// turn the LED on&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// wait for half a second&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;digitalWrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LOW&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// turn the LED off&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// wait for half a second&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="task3"&gt;&lt;a href="#task3" class="header-anchor"&gt;&lt;/a&gt;TASK3&#10;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-C++" data-lang="C++"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define LED RED_LED&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setupRedLed&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// initialize the digital pin as an output.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;pinMode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;OUTPUT&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;loopRedLed&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;digitalWrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HIGH&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// turn the LED on&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// wait for 1/10 second&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;digitalWrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LOW&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// turn the LED off&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// wait for 1/10 second&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;该程序可以让 LaunchPad 上的三色 LED 以多种不同颜色的组合进行闪烁，有一说一还挺炫酷。&lt;/p&gt;&#10;</description></item><item><title>MSP430在Energia上的使用（上）</title><link>https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/msp430%E5%9C%A8energia%E4%B8%8A%E7%9A%84%E4%BD%BF%E7%94%A8%E4%B8%8A/</link><pubDate>Wed, 26 Aug 2020 17:32:10 +0800</pubDate><guid>https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/msp430%E5%9C%A8energia%E4%B8%8A%E7%9A%84%E4%BD%BF%E7%94%A8%E4%B8%8A/</guid><description>&lt;img src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/msp430%E5%9C%A8energia%E4%B8%8A%E7%9A%84%E4%BD%BF%E7%94%A8%E4%B8%8A/cover.jpg" alt="Featured image of post MSP430在Energia上的使用（上）" /&gt;&lt;h1 id="msp430-在-energia-上的使用上"&gt;&lt;a href="#msp430-%e5%9c%a8-energia-%e4%b8%8a%e7%9a%84%e4%bd%bf%e7%94%a8%e4%b8%8a" class="header-anchor"&gt;&lt;/a&gt;MSP430 在 Energia 上的使用（上）&#10;&lt;/h1&gt;&lt;p&gt;说实话我也不确定会不会有后面的笔记，但是这次实验的确相当于没有做完。&lt;/p&gt;&#10;&lt;!-- @import "[TOC]" {cmd="toc" depthFrom=1 depthTo=6 orderedList=false} --&gt;&#10;&lt;!-- code_chunk_output --&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="#msp430-%e5%9c%a8-energia-%e4%b8%8a%e7%9a%84%e4%bd%bf%e7%94%a8%e4%b8%8a" &gt;MSP430 在 Energia 上的使用（上）&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%87%86%e5%a4%87%e5%b7%a5%e4%bd%9c" &gt;准备工作&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e9%97%ae%e9%a2%98%e6%84%8f%e4%b9%89" &gt;问题意义&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%ae%9e%e9%aa%8c%e4%b8%80%e6%b5%8b%e8%af%95%e4%bc%a0%e8%be%93%e6%8e%a5%e5%8f%a3" &gt;实验一：测试传输接口&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%ae%9e%e9%aa%8c%e7%8e%b0%e8%b1%a1" &gt;实验现象：&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%ae%9e%e9%aa%8c%e7%bb%93%e8%ae%ba" &gt;实验结论：&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%ae%9e%e9%aa%8c%e4%ba%8c%e7%a7%bb%e6%a4%8d%e5%88%b0-arduinoide" &gt;实验二：移植到 ArduinoIDE&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%a4%87%e6%b3%a8" &gt;备注&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;!-- /code_chunk_output --&gt;&#10;&lt;h2 id="准备工作"&gt;&lt;a href="#%e5%87%86%e5%a4%87%e5%b7%a5%e4%bd%9c" class="header-anchor"&gt;&lt;/a&gt;准备工作&#10;&lt;/h2&gt;&lt;p&gt;终于狠下心花了百元大洋买了块 MSP430F5529LP 板子，准备研究一下板载仿真器在 Energia 中是如何进行烧录的。&lt;/p&gt;&#10;&lt;p&gt;通过 TI 公司的官方文件《MSP430F5529 LaunchPad Development Kit……》，我们其实可以得到 LaunchPad 的原理图，因为整个原理图用了四页，这里就不详细展示了，有需要可以在 TI 官网找。我只截取板载仿真器和 MSP430F5529 芯片的接口部分的图&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="241px" data-flex-grow="100" height="417" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/msp430%E5%9C%A8energia%E4%B8%8A%E7%9A%84%E4%BD%BF%E7%94%A8%E4%B8%8A/img/ce2078a0f1addb14d8380c3564acccfa.webp" width="420"&gt;&lt;p&gt;其中板载仿真器被 TI 公司命名为 ezFET，应该是简版仿真器的意思，除去电源线部分，我们可以看到信息传输分为两部分——SBW 和 UART。其中 SBW 相当于两线 JTAG，可以当做仿真器接口，而 UART 则是使用的 MSP430 的 BSL 接口，其只能作为烧录口。&lt;/p&gt;&#10;&lt;p&gt;那么看到这其实问题就很简单了，我们需要确定 Energia 在烧录的时候具体是用的哪个接口。&lt;/p&gt;&#10;&lt;h2 id="问题意义"&gt;&lt;a href="#%e9%97%ae%e9%a2%98%e6%84%8f%e4%b9%89" class="header-anchor"&gt;&lt;/a&gt;问题意义&#10;&lt;/h2&gt;&lt;p&gt;一般情况下，我们在使用 LaunchPad 时，是不需要管这个仿真器是如何工作的，但是如果当我们手里只有一块没有板载仿真器的开发板或者甚至只有一块芯片的时候，我们又该如何对其使用 Energia 呢，是应该用 JTAG 连接吗，还是使用 SBW，亦或是使用 BSL？我们是否能将 EnergiaIDE 的移植到 ArduinoIDE 上呢（因为 Energia 事实上能够使用的资源远远不及 Arduino，而且无法用 VSCode 这个大杀器）？&lt;/p&gt;&#10;&lt;h2 id="实验一测试传输接口"&gt;&lt;a href="#%e5%ae%9e%e9%aa%8c%e4%b8%80%e6%b5%8b%e8%af%95%e4%bc%a0%e8%be%93%e6%8e%a5%e5%8f%a3" class="header-anchor"&gt;&lt;/a&gt;实验一：测试传输接口&#10;&lt;/h2&gt;&lt;p&gt;这个工作其实很简单，因为板子在设计的时候就是通过跳线进行连接的，所以我们只需要调整跳线位置即可进行测试。&lt;/p&gt;&#10;&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1400" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yunwuhai.com/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F/arduino/msp430%E5%9C%A8energia%E4%B8%8A%E7%9A%84%E4%BD%BF%E7%94%A8%E4%B8%8A/img/441189fa41578c8341549dbe5ee0fbf8.webp" width="1050"&gt;&lt;h3 id="实验现象"&gt;&lt;a href="#%e5%ae%9e%e9%aa%8c%e7%8e%b0%e8%b1%a1" class="header-anchor"&gt;&lt;/a&gt;实验现象：&#10;&lt;/h3&gt;&lt;ol&gt;&#10;&lt;li&gt;在安装好 Energia 以及板子驱动等之后，连接电脑 USB 与 ezFET 的 MicroUSB 接口，选择好端口和板子型号，选择示例程序 blink，直接点击上传程序。（上传成功，红灯闪烁）&lt;/li&gt;&#10;&lt;li&gt;取下 RX 和 TX 跳线，剩下 SBWTCK 和 SBWTDIO，然后再次上传。（上传成功，红灯闪烁）&lt;/li&gt;&#10;&lt;li&gt;取下 SBWTCK 和 SBWTDIO，剩下 RX 和 TX 跳线，然后再次上传。（上传失败，显示未检测到链接报错）&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="实验结论"&gt;&lt;a href="#%e5%ae%9e%e9%aa%8c%e7%bb%93%e8%ae%ba" class="header-anchor"&gt;&lt;/a&gt;实验结论：&#10;&lt;/h3&gt;&lt;p&gt;在 Energia 中，默认通过板载仿真器 ezFET 得 SBW 接口对 MSP430 芯片进行烧录。&lt;/p&gt;&#10;&lt;h2 id="实验二移植到-arduinoide"&gt;&lt;a href="#%e5%ae%9e%e9%aa%8c%e4%ba%8c%e7%a7%bb%e6%a4%8d%e5%88%b0-arduinoide" class="header-anchor"&gt;&lt;/a&gt;实验二：移植到 ArduinoIDE&#10;&lt;/h2&gt;&lt;p&gt;ArduinoIDE 本身自带了非常多的库，但是因为兼容性问题，并不支持直接移植到 Energia 上，所以 Energia 上目前可以直接使用的库可谓是非常少。而且无论是 ArduinoIDE 还是 EnergiaIDE 的代码辅助功能都非常垃圾，而如果能使用 VSCode 的 Arduino 插件就可以大大减轻这一问题。&lt;/p&gt;&#10;&lt;p&gt;移植方法很简单，打开 Energia 的目录，找到 hardware，把其中 Energia 文件夹复制到 ArduinoIDE 目录的 hardware 文件夹里。再把 Energia 的 tools 里的东西放在 ArduinoIDE 的 hardware-tools 里即可。这里需要说明的是，在复制完后可以点开 ArduinoIDE，简单做个 demo 或者直接用 energia 的 blink 作为测试，如果出现&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;exec: &amp;#34;/bin/msp430-g++&amp;#34;: file does not exist&#10;为开发板 MSP-EXP430F5529LP 编译时出错。&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;需要修改 hardware-energia-msp430 文件夹里的 Platform.txt 文件，这个文件定义了 CPU 体系结构等（包括编译器、生成过程参数、用于上载的工具等），可能和 ArduinoIDE 无法直接兼容。&lt;/p&gt;&#10;&lt;p&gt;具体修改规范可以参考 Arduino 官方的这个网址（需要科学上网）：https://arduino.github.io/arduino-cli/platform-specification/&lt;/p&gt;&#10;&lt;p&gt;如果暂时不想看这么麻烦的东西（像我一样），可以参考这个帖子：&lt;a class="link" href="http://bbs.mydigit.cn/read.php?tid=1792962" target="_blank" rel="noopener"&#10; &gt;[MSP]将 MSP430 纳入 ARDUINO IDE: 让 arduino 支持 MSP430F5438A&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;不过他里面给出的 Platform.txt 有点古老，ArduinoIDE 可能会给出警告，不过警告一般也可以不听，所以凑合着用吧。同时按照他的方法，可能无法完成直接烧录，因为我试了一下报错了。&lt;/p&gt;&#10;&lt;p&gt;移植并不算很成功，然后在 VSCode 里试了一下，一些定义会有点问题，暂时不确定是什么原因……说实话这个实验有点失败，还是能力欠缺了。&lt;/p&gt;&#10;&lt;p&gt;另外我也看了看 PlatformIO，里面对 MSP430 的支持同样很差，果然 MSP430 这种老古董还是有点过气了吗……&lt;/p&gt;&#10;&lt;p&gt;关于移植的方法我后面会再详细研究的（大概），如果研究好了再写这一篇的下章吧（意思是可 bi 能 si 会 qiang 没 po 有 zheng）。&lt;/p&gt;&#10;&lt;h2 id="备注"&gt;&lt;a href="#%e5%a4%87%e6%b3%a8" class="header-anchor"&gt;&lt;/a&gt;备注&#10;&lt;/h2&gt;&lt;p&gt;关于仿真器的问题，如果买到了没有仿真器的板子或者自己做板子，而手里又没有仿真器，除了 BSL 烧录的方法以外，也可以通过用 LaunchPad 板子直接把跳线那里外接出去，也可以当仿真器用。另外，ezFET 是一个开源硬件，详情可以参考&lt;a class="link" href="https://processors.wiki.ti.com/index.php/EZ-FET_lite" target="_blank" rel="noopener"&#10; &gt;官方文件&lt;/a&gt;，当然网上也有一些帖子讲了这个玩意的做法，同样可以参考。&lt;/p&gt;&#10;</description></item></channel></rss>