昨天只有介绍到Arduino的程序架构可以分为两大函式: setup()
及loop()
。
//#include ...
//#define ...
// 全域变数或自定义函式
void setup() {
// ...
}
void loop() {
// ...
}
setup()
函式:负责初始化相关参数及功能,这函式只会在最一开始的时候被执行一次。loop()
函式:放在这里头的动作会一直被反覆执行,如同C++的无穷回圈,会接续着setup()
後被反覆执行直到重新烧录或拔除开发板电源。在这两个函式的外头,可以依照自身需求来引用函式库、定义变数或宣告全域变数、自定义函式...如同C++的使用方式。而两个函式内可以都不放任何设定或动作,但是一定要存在,并且固定先setup()
再loop()
!
举个栗子例子
今天我有A、B两位工人。设定阶段(setup()
)时,先指定好A负责扫地、B负责拖地,回圈阶段(loop()
),让A先开始动作,接着换B,他俩就会无限的扫地再拖地,直到下一次指派工作。
动作 扫地()
动作 拖地()
工人 A、B
void setup() {
A负责扫地
B负责拖地
}
void loop() {
A开始扫地
A扫完地
B开始拖地
B拖完地
}
而Blink范例程序中的pinMode(LED_BUILTIN, OUTPUT)
简单来说,是设定开发板上那颗LED的模式为输出,接下来我们就能用digitalWrite(LED_BUILTIN, HIGH/LOW)
控制开关灯,delay(1000)
则是用来控制延迟时间,单位是毫秒,所以LED灯以亮1秒、暗1秒的模式无限循环,如果没设delay会因为切换太快而看不出目前状态!
接下来我们来试试看自己新建一个专案~
如果是Arduino IDE的话可以直接点选「新增」按钮,接下来就可以直接写程序了。
如果是VS Code的话,步骤会稍微多一点,但熟练了就不觉得麻烦了
先在你自己电脑熟悉的位置新建一个资料夹,资料夹名称为专案的名字,请避免使用中文,後续还会使用到这个名称。
我个人是习惯把专案放在ESP32的资料夹中,取名会专案的内容有关,例如:my_blink。
新建完资料夹後,以VS Code开启!
在已开启的VS Code视窗中,接下来以「F1」来使用「Arduino: Initialize」命令,此命令的用意是要先初始化VS Code的Arduino程序开发环境,这时你需要建立.ino档,档名要跟资料夹名称一致,这是Arduino专案的要求!
「Enter」後会进入下一个步骤是选择开发板,这时候你只需要找到并选择你手上的开发板就好!
如果你在这个步骤时选错开发板也没关系,你可以点选左下角的选项来重新选择,在往右边也可以找到选择序列埠的选项,两者之间的插头符号则是开启序列监控视窗!
初始化完後,你会发现你原本的专案资料夹中,新增了一个.ino与一个.vscode资料夹,.vscode资料夹里头则放了arduino.json与c_cpp_properties.json,前者是用於开发板与arduino间的设定,後者则是编译器设定。
前几天说的VS Code 1.59版本会遇到「选择序列埠」按钮失灵的问题,可以透过手动修改arduino.json,新增一个参数port
就能解决啦!
{
"sketch": "test.ino",
"configuration": "FlashFreq=80,UploadSpeed=921600",
"board": "esp32:esp32:nodemcu-32s",
"port":"COM3"
}
只要以上这些动作都做好了,也写完你的专案程序後,就可以上传烧录你的专案罗~
你可以试试看上传下面这个程序,并与昨天的范例程序相比一下有没有不同?
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(200);
digitalWrite(LED_BUILTIN, LOW);
delay(200);
}
眼尖的能应该能光看程序码就知道吧?
接下来这部分是你可以不做,但做了会更好的步骤。如果你有仔细看VS Code下方的状态列,会发现你在上传或验证程序时,有个[Warning] Output path is not specified. Unable to reuse previously compiled files. Build will be slower. See README.
的警告,这代表你没有设定编译档的暂存目录,所以每次按下编译和上传时,所有相关函式库都要重新编译,这会造成大量时间的浪费,要解决这个问题只需要在arduino.json中设定一个「编译档暂存目录」即可。
"output": "../build"
当你会使用到Arduino或Espressif提供的函式库时,可能会遇到VS Code帮你侦测到#include错误,这是因为c_cpp_properties.json中的includePath还没有抓到你需要的函式库,这时只需要先上传一次,c_cpp_properties.json就会自动更新罗!
上传完後,扰人的红虫虫就消失啦!
铁人赛已完成1/6!
目前先教大家怎麽安装环境和新建专案,虽然知识含量并不高,但是只要一个小步骤没有做好,就会让之後的主题没办法好好练习呢... (困扰(搔头
那明天开始就要正式进入暑训的上课环节了,会先花个两天分别介绍Arduino及ESP32,接下来的第一个主题是常见的小配备-面包板跟电阻的介绍!让大家先熟悉一下这两样基本配备之後,才要开始教数位、类比、串列传输...循序渐进的主题,有讲错的部分就请大家狠狠的鞭策我吧XD
连续发文快两个礼拜了,今天很悠闲了看了场电影、煮饭、洗衣服、健身还有整理家里之後,回过神来,已经快1...
Hostinger网域供应商跟Godaddy类似,除了提供Domain( Domain Name )...
第12 届iT邦帮忙铁人赛系列文章 (Day30) 终於走到这一天了,每次都觉得铁人赛过程都生不如死...
刚开始写程序的初学者,本人强烈建议你一定要先学个基本的HTML、CSS、JS 为什麽? 因为比起写个...
一、认识"set"(集合) 甚麽是set呢?简单来说set就像是一个大杂烩,...