Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
DIY综合交流区
[编辑转载]Arduino语言注解二
发布于 2011-10-20 19:20:13 浏览:2870
订阅该版
一个Arduino脚本程式码(SKETCH)由两部分组成 ```void setup()``` 在这个函数范围内放置初始化Arduino 板子的程式- 在主要程式开始撰写前, 使Arduino 板子装置妥当的指令。 ```void loop()``` 在此放置你的Arduino脚本。这部份的程式会一直重复的被执行,直到Arduino 板子被关闭。 **特殊符号:** Arduino 语言用了一些符号描绘程式码,例如注释和程式区块。 **;** //(分号) Arduino 语言每一行程序都是以分号为结尾。这样的语法让你可以自由地安排代码,你可以将两个指令放置在同一行,只要中间用分号隔开。 (但这样做可能降低程式的可读性。) 范例: ```delay(100);``` **{ }**(大括号) 大括号用来将程式代码分成一个又一个的区块,如以下范例所示,在loop()函数的前、后,必须用大括号括起来。 范例: ```void loop(){ Serial.pritln("cial"); }``` **注释:** 程式的注释就是对代码的解释和说明,编写注释有助于程式设计师(或其他人)了解代码的功能。 Arduino处理器在对程式码进行编译时会忽略注释的部份。 Arduino 语言中的编写注释有两种方式: //单行注释:这整行的文字会被处理器忽略 /* * 多行注释: * 在这个范围内你可以 * 写一整首诗 */ **常数:** 在Arduino语言中事先定义了一些具特殊用途的保留字。 HIGH 和LOW 用来表示你开启或是关闭了一个Arduino的脚位(pin)。 INPUT 和OUTPUT 用来指示这个Arduino的脚位(pin)是属于输入或是输出用途。 true 和false 用来指示一个条件或表示式为真或是假。 **变数:** 变数用来指定Arduino 记忆体中的一个位置,变数可以用来储存资料,程式人员可以透过脚本代码去不限次数的操作变数的值。 因为Arduino 是一个非常简易的微处理器,但你要宣告一个变数时必须先定义他的资料型态,好让微处理器知道准备多大的空间以储存这个变数值。 Arduino 语言支持的变数形态: **布尔boolean:** 布尔变数的值只能為真(true)或是假(false) **字元char:** 單一字元例如 A,和一般的電腦做法一樣Arduino 將字元儲存成一個數字,即使你看到的明明就是一個文字。 用數字表示一個字元時,它的值有效範圍為 -128 到127。 ------------------------------------------------------------------- **注意:**有兩種主流的電腦編碼系統ASCII 和UNICODE。ASCII 表示了127個字元,用來在序列終端機和分時計算機之間傳輸文字。 UNICODE可表示的字元量比較多,在現代電腦作業系統內它可以用來表示多國語言。 在位元數需求較少的資訊傳輸時,例如義大利文或英文這類由拉丁文,阿拉伯數字和一般常見符號構成的語言,ASCII仍是目前主要用來交換資訊的編碼法。 ------------------------------------------------------------------- **位元組byte:** 儲存的數值範圍為0到255。如同字元一樣位元組型態的變數只需要用一個位元組(8位元)的記憶體空間儲存。 **整數int:** 整數資料型態用到2位元組的記憶體空間,可表示的整數範圍為 –32,768 到 32,767; 整數變數是Arduino內最常用到的資料型態。 **整數unsigned int:** 無號整數同樣利用2位元組的記憶體空間,無號意謂著它不能儲存負的數值,因此無號整數可表示的整數範圍為0 到 65,535。 **長整數long:** 長整數利用到的記憶體大小是整數的兩倍,因此它可表示的整數範圍從 –2,147,483,648 到 2,147,483,647。 **无符号長整數unsigned long:** 無號長整數可表示的整數範圍為0 到 4,294,967,295。 **浮點數float:** 浮點數就是用來表達有小數點的數值,每個浮點數會用掉四位元組的RAM,注意晶片記憶體空間的限制,謹慎的使用浮點數。 **雙精準度浮點數double:** 雙精度浮點數可表達最大值為 1.7976931348623157 x 10308。 **字串string:** 字串用來表達文字信息,它是由多個ASCII字元組成(你可以透過序串埠發送一個文字訊息或者將之顯示在液晶顯示器上)。字串中的每一個字元都用一個組元組空間儲存,並且在字串的最尾端加上一個空字元以提示Ardunio處理器字串的結束。下面兩種宣告方式是相同的。 ```char string1[] = "Arduino"; // 7 字元 + 1 空字元 char string2[8] = "Arduino"; // 與上行相同``` **陣列array:** 一串變數可以透過索引去直接取得。假如你想要儲存不同程度的LED亮度時,你可以宣告六個變數light01,light02,light03,light04,light05,light06,但其實你有更好的選擇,例如宣告一個整數陣列變數如下: ```int light[6] = {0, 20, 50, 75, 100};``` "array" 這個字為沒有直接用在變數宣告,而是[]和{}宣告陣列。 ------------------------------------------------------------------- **控制指令** Ardunio 利用一些關鍵字控制程式碼的邏輯。 **if … else** If必須緊接著一個問題表示式(expression),若這個表示式為真,緊連著表示式後的代碼就會被執行。若這個表示式為假,則執行緊接著else之後的代碼. 只使用 if不搭配else是被允許的。 範例: ```if (val == 1) { digitalWrite(LED,HIGH); }``` **for** 用來明定一段區域代碼重覆指行的次數。 範例: ```for (int i = 0; i < 10; i++) { Serial.print("ciao"); }``` **switch case** if 敘述是程式裡的分叉路口,switch case 是更多選項的路口。Swith case 根據變數值讓程式有更多的選擇,比起一串冗長的if敘述,使用swith case可使程式代碼看起來比較簡潔。 範例 : ```switch (sensorValue) { case 23: digitalWrite(13,HIGH); break; case 46: digitalWrite(12,HIGH); break; default: // 以上條件都不符合時,預設執行的動作 digitalWrite(12,LOW); digitalWrite(13,LOW); }``` **while** 當while之後的條件成立時,執行括號內的程式碼。 範例 : ```// 當sensor值小於512,閃爍LED燈 sensorValue = analogRead(1); while (sensorValue < 512) { digitalWrite(13,HIGH); delay(100); digitalWrite(13,HIGH); delay(100); sensorValue = analogRead(1); }``` **do … while** 和while 相似,不同的是while前的那段程式碼會先被執行一次,不管特定的條件式為真或為假。因此若有一段程式代碼至少需要被執行一次,就可以使用do…while架構。 範例 : ```do { digitalWrite(13,HIGH); delay(100); digitalWrite(13,HIGH); delay(100); sensorValue = analogRead(1); } while (sensorValue < 512);``` **break** Break讓程式碼跳離迴圈,並繼續執行這個迴圈之後的程式碼。此外,在break也用於分隔switch case 不同的敘述。 範例 : ```//當sensor值小於512,閃爍LED燈 do { // 按下按鈕離開迴圈 if (digitalRead(7) == HIGH) break; digitalWrite(13,HIGH); delay(100); digitalWrite(13,HIGH); delay(100); sensorValue = analogRead(1); } while (sensorValue < 512);``` **continue** continue 用於迴圈之內,它可以強制跳離接下來的程式,並直接執行下一個迴圈。 範例 : ```for (light = 0; light < 255; light++) { // 忽略數值介於 140 到 200之間 if ((x > 140) && (x < 200)) continue; analogWrite(PWMpin, light); delay(10); }``` **return** 函數的結尾可以透過return回傳一個數值。 例如,有一個計算現在溫度的函數叫 computeTemperature(),你想要回傳現在的溫度給temperature變數,你可以這樣寫: ```int temperature = computeTemperature(); int computeTemperature() { int temperature = 0; temperature = (analogRead(0) + 45) / 100; return temperature; }``` ------------------------------------------------------------------- **算術運算和方程式** 你可以透過特殊的語法用 Arduino 去做一些複雜的計算。 + 和–就是一般學校教的加減法,乘法用*示,而除法用 /表示。 另外餘數除法(%),用於計算整數除法的餘數值。你可以透過多層次的括弧去指定算術之間的循序。和數學函式不一樣,中括號和大括號在此被保留在不同的用途(分別為陣列索引,和宣告區域程式碼)。 範例 : ```a = 2 + 2; light = ((12 * sensorValue) - 5 ) / 2; remainder = 3 % 2;``` ------------------------------------------------------------------- **比較運算符號** 當你在指定if,while, for 敘述句時,可以運用下面這個運算符號: == 等於 != 不等於 < 小於 > 大於 <= 小於等於 >= 大於等於 ------------------------------------------------------------------- **布尔运算符号** 當你想要結合多個條件式時,可以使用布林運算符號。 例如你想要檢查從感測器傳回的數值是否於5到10,你可以這樣寫: ```if ((sensor => 5) && (sensor <=10))``` 這裡有三個運算符號: 交集(and)用 && 表示; 聯集(or)用 || 表示; 反相(finally not)用 !表示。 ------------------------------------------------------------------- **復合運算符號** 有一般特殊的運算符號可以使程式碼比較簡潔,例如累加運算符號。 例如將一個值加1,你可以這樣寫: ```value = value +1;``` 你也可以用一個復合運算符號累加(++): ```value++;``` ------------------------------------------------------------------- **累加和遞減 (++和 --)** 當你在累加1或遞減1到一個數值時。請小心i++和++i之間的不同。如果你用的是 i++,i會被累加並且i的值等於i+1;但當你使用++i 時,i的值等於i,直到這行指令被執行完時i再加1。同理應用於––。 ```+= , –=, *= and /=``` 這些運算符號可讓表示式更精簡,下面二個表示式是等價的: ```a = a + 5;a += 5;```
查看更多
1
个回答
默认排序
按发布时间排序
撰写答案
登录
注册新账号
关注者
0
被浏览
2.9k
关于作者
wzc0066
这家伙很懒,什么也没写!
提问
14
回答
16
被采纳
0
关注TA
发私信
相关问题
1
[项目]搞个开源的硬件项目
2
硬件计划贴,及时更新,欢迎提意见
3
软件计划贴,及时更新,欢迎提意见::WMA,MOUNT,LWIP等问题急需解决.
4
MMS协议
5
定点的wma解压库-libwma
6
QQ群记录 [20090821]
7
STM32网络收音机PCB报名征集
8
第一版调试记录
9
第二版硬件讨论
10
RADIO项目相关模块规格--欢迎大家自己做板时规格与此兼容,减少重复劳动
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
开源共生 商业共赢 | RT-Thread 2024开发者大会议程正式发布!
2
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
3
RT-Thread EtherKit开源以太网硬件正式发布
4
如何在master上的BSP中添加配置yml文件
5
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
a1012112796
20
个答案
3
次被采纳
张世争
11
个答案
3
次被采纳
踩姑娘的小蘑菇
7
个答案
3
次被采纳
rv666
9
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
RTT_逍遥
1
篇文章
6
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部