SlideShare ist ein Scribd-Unternehmen logo
1 von 43
Downloaden Sie, um offline zu lesen
電子工程系車用電子與資訊組
Arduino程式快速入門
吳錫修
sswu@nkut.edu.tw
Revised on July 6, 2018
程式基本架構、程式語法、資料型別與變數、運算
子、條件敘述、迴圈敘述
Makeeachdaycount
/* 註解區 (block comment)
通常在程式檔開頭,簡述程式之功能、作者、設計日期、程式版本等訊息
ShyiShiou Wu; November 5, 2017
*/
// 單行註解 (single line comment)
// 標頭檔區,指定程式使用到的函式庫標頭檔
#include <Servo.h>
#include "config.h"
// 宣告區,程式中使用的全域變數
Servo myservo;
// 設置函式,Arduino重置時,會先執行設置函式,且只會執行⼀次
void setup(){
// put your setup code here, to run once:
Serial.begin(9600);
}
Arduino程式基本架構 1/2
2
Makeeachdaycount
// 程式主廻圈,Arduino會循環執行loop函式
void loop() {
// put your main code here, to run repeatedly:
}
// 其它自訂函式,依功能需求自行設計之函式
void mySub() {
// put your subroutine code here
}
Arduino程式基本架構 2/2
3
Makeeachdaycount
 引入標頭檔 (header file)
 專案資料夾(儲存*.ino的目錄)下的自訂標頭檔
#include "config.h"
 libraries資料夾下的函式庫標頭檔
#include <Servo.h>
 定義常數 (constant)
#define RED_LED 12 //不用等號與分號,通常使用⼤寫字⺟
 宣告變數 (variable)
int lightness = 0; //變數型別 變數名稱 = 初始值;
Arduino程式語法 1/3
4
Makeeachdaycount
 每行指令敘述以分號結尾
int lightness = 0;
 程式碼區分⼤小寫 (case sensitive)
lightness ≠ Lightness
 程式區塊,左右⼤括弧必須成對
void setup() {
...
}
Arduino程式語法 2/3
5
Makeeachdaycount
 自訂副程式 (subroutine)
 沒有回傳值
//void 副程式名稱(參數1, 參數2, ...)
void showMessage() {
//副程式程式碼
...
}
 自訂函式 (function)
 使用return回傳資料
//傳回值型別 函式名稱(參數1, 參數2, ...)
int function_name(int arg1, int arg2) {
//函式程式碼
...
return (arg1 == arg2); //傳回值
}
Arduino程式語法 3/3
6
Makeeachdaycount
 資料型別決定資料容器 (變數) 的格式與容量
 boolean
 只有true或false二種值 (HIGH或LOW)
 char
 字元資料,佔1 byte
 使用單引號標記字元,例如'A'
 也可使用ACSII code,例如65
 做為數值資料時,有效值-128~127
 unsigned char
 1 byte,數值0~255
Arduino Uno資料型別 1/4
7
Makeeachdaycount
 ASCII code
 控制字元
 顯示字元
Arduino Uno資料型別 2/4
8
Makeeachdaycount
 byte
 8-bit無號數,數值0~255
 int
 16-bit整數,-32,768~32,767
 unsigned int
 16-bit無號數,0~65,535
 word
 16-bit無號數,0~65,535
 short
 16-bit整數,-32,768~32,767
Arduino Uno資料型別 3/4
9
Makeeachdaycount
 long
 32-bit整數,-2,147,483,648L~2,147,483,647L
 unsigned long
 32-bit無號數,0~4,294,967,295L
 float
 4 bytes浮點數,最⼤值3.4028235E+38,最小值-3.4028235E+38
 double
 4 bytes倍精準數,同float
Arduino Uno資料型別 4/4
10
Makeeachdaycount
 ⼀般的變數只能儲存⼀個值,陣列則可以用來存放多個值
 陣列中的每個資料稱為陣列元素 (element),程式中以索引值存取陣
列元素,索引值從0開始
byte ledPins[] = {2, 4, 8};
pinMode(ledPins[0], OUTPUT);
pinMode(ledPins[1], OUTPUT);
pinMode(ledPins[2], OUTPUT);
 二維陣列
char keypad[4][4] = { //矩陣按鍵
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}};
陣列 (array)
11
Makeeachdaycount
 十進制 (decimal)
 123
 二進制 (binary)
 B1111011
 限用於表示8位元數值 (0 to 255)
 八進制 (octal)
 0173
 十六進制 (hexadecimal)
 0x7B
數值資料表示法 1/2
12
Makeeachdaycount
 浮點數
 10.0 10 10
 2.34E5 2.34 * 10^5 234000
 67e-12 67.0 * 10^-12 0.000000000067
數值資料表示法 2/2
13
Makeeachdaycount
 使用雙引號標記字串資料
 char str1[] = "Arduino";
 sizeof(str1)結果為8,會自動加上'0'(空字元)做為字串結束標記
 字串就是⼀種字元陣列 (char array)
 char str2[]={'A', 'r', 'd', 'u', 'i', 'n', 'o', '0'};
字串
14
Makeeachdaycount
 String物件比字元陣列提供更多便利的字串處理運算
 建構元
String str1 = String(235, BIN); //"11101011"
String str2 = String(45, HEX); //"2d"
String str3 = "Hello String"; //"Hello String"
 字串串接
int sensorValue = analogRead(A0);
String msg$ = "Sensor value: " + sensorValue;
 尋找特定字元位置索引
String html_str = "<HTML><HEAD><BODY>";
int i1 = html_str.indexOf('>'); //5
int i2 = html_str.indexOf('>', i1 + 1); //11
int lastOpeningBracket = html_str.lastIndexOf('<'); //12
String物件 1/4
15
Makeeachdaycount
 計算字串⻑度
String hello_str = "Hello! arduio ";
Serial.println(hello_str.length()); //18
hello_str.trim(); //切除字串後面多餘空白
Serial.println(hello_str.length()); //14
 ⼤小寫轉換
String arduino_str = "Arduino programming";
Serial.println(arduino_str); //Arduino programming
arduino_str.toUpperCase();
Serial.println(arduino_str); //ARDUINO PROGRAMMING
arduino_str.toLowerCase();
Serial.println(arduino_str); //arduino programming
String物件 2/4
16
Makeeachdaycount
 替換字串
String hello_str = "Hello! arduio";
Serial.println(hello_str); //Hello! arduino
hello_str.replace("Hello","Hi");
Serial.println(hello_str); //Hi! arduino
 子字串
String head_str = "Content-Type: text/html";
Serial.println(head_str.substring(14, 18)); //text
 移除子字串
String hello_str = "Hi! arduio";
hello_str.remove(2, 6); //Hiino
String物件 3/4
17
Makeeachdaycount
 比較字串
String cmd1_str = "Turn on";
String cmd2_str = "Turn off";
Serial.println(cmd1_str == "Turn on");
Serial.println(cmd2_str.equals("Turn Off"));
Serial.println(cmd2_str.equalsIgnoreCase("Turn Off"));
String物件 4/4
18
Makeeachdaycount
 在程式中用來暫存資料
 宣告變數 (declaring variables)
 語法:資料型別 變數名稱 [= 初始值];
int inputVariable1;
int inputVariable2 = 0;
變數 1/4
19
Makeeachdaycount
 變數命名規則
 只能包含字⺟、數字及底線
 第⼀個字不能是數字
 不能使用保留字
 arduino IDE中保留字會標示顏色 (arduino-1.8.5libkeywords.txt)
 變數注意事項
 區分⼤小寫
 使用有意義的文字組合
 clock_pin
 clockPin 小駝峰式命名法 (lower camel case)
 ClockPin ⼤駝峰式命名法 (upper camel case)
變數 2/4
20
Makeeachdaycount
 有效範圍 (scope)
 全域變數 (global variable),宣告在#include指令之後,提供整份
Arduino程式使用
 區域變數 (local variable),宣告在程式區塊中,只能在所宣告的程式區塊
中使用;每次執行時變數會被動態創建 (create) 和銷毁 (destroy)
int gPWMval; //整個程式檔都可使用gPWMval變數
void setup() {
//...
}
void loop() {
int i, j; //在loop程式區塊中可使用變數i與j
//...
for (int k = 0; k < 100; k++){ //變數k只能在for程式區塊中使用
//...
}
}
變數 3/4
21
Makeeachdaycount
 靜態變數 (static variable)
 在區域變數宣告前加上static關鍵字
 程式執行期間變數內容會保留
void walk(int steps){
static int a; //每次執行walk()函式,變數a會保留上⼀次執行結果
int b; //每次執行walk()函式,變數b會重置
a = a + steps;
b = b + steps;
}
變數 4/4
22
Makeeachdaycount
int a;
void setup() {
Serial.begin(9600);
a = a + 1;
Serial.print("a = ");
Serial.println(a);
func1();
func2();
a = a + 1;
Serial.print("a = ");
Serial.println(a);
func1();
func2();
}
void loop() {
}
void func1() {
int b;
b = a + b;
Serial.print("b in func1 = ");
Serial.println(b);
}
void func2(){
static int b;
b = a + b;
Serial.print("b in func2 = ");
Serial.println(b);
}
Lab 變數測試
23
Makeeachdaycount
 程式執行過程中不會變更的數
 常數名稱通常使用⼤寫字⺟
 #define RED_LED 12
 編譯時,RED_LED會被替換成數字12
 const byte RED_LED = 12;
 保留RED_LED變數,但限定內容不可變動
 內建常數
 INPUT, OUTPUT
 HIGH, LOW
 true, false
常數
24
Makeeachdaycount
 算術運算子 (Arithmetic Operators)
 % (modulo)
 * (multiplication)
 + (addition)
 - (subtraction)
 / (division)
 = (assignment operator)
float r = 3/2; //r=1.0
float r = 3/2.0; //r=1.5
float r = 3/(float)2; //r=1.5
Arduino運算子 1/7
25
Makeeachdaycount
 比較運算子 (Comparison Operators)
 != (not equal to)
 < (less than)
 <= (less than or equal to)
 == (equal to)
 > (greater than)
 >= (greater than or equal to)
Arduino運算子 2/7
26
Makeeachdaycount
 位元運算子 (Bitwise Operators)
 & (bitwise and)
 << (bitshift left)
 >> (bitshift right)
 ^ (bitwise xor)
 | (bitwise or)
 ~ (bitwise not)
Arduino運算子 3/7
27
Makeeachdaycount
 布林運算子 (Boolean Operators)
 ! (logical not)
 && (logical and)
 || (logical or)
Arduino運算子 4/7
28
Makeeachdaycount
 遞增運算
 ++ (increment)
 x++; 等同x = x + 1;
 遞減運算
 -- (decrement)
 x--; 等同x = x - 1;
Arduino運算子 5/7
29
Makeeachdaycount
 複合運算子 (Compound Operators)
 同時執行『算數運算子或位元運算子』及『指定運算子』兩件工作
 += (compound addition)
 x += y; 等同x = x + y;
 -= (compound subtraction)
 x -= y; 等同x = x - y;
 *= (compound multiplication)
 x *= y; 等同x = x * y;
 /= (compound division)
 x /= y; 等同x = x / y;
Arduino運算子 6/7
30
Makeeachdaycount
 &= (compound bitwise and)
 x &= y; 等同x = x & y;
 |= (compound bitwise or)
 x |= y; 等同x = x | y;
 ^= (compound bitwise xor)
 x ^= y; 等同x = x ^ y;
Arduino運算子 7/7
31
Makeeachdaycount
 優先序 (Precedence)
 決定運算的先後次序
 a = b + c * d;
 結合性 (associativity)
 決定相同運算同時出存在時,要由左向右或是由右向左運算
 a = b + c + d;
 最好使用小括號明確設定運算優先序
Precedence & associativity 1/2
32
Makeeachdaycount
運算子 優先序
() 1
!、~、++、−− 2
×、/ 3
+、− 4
>>、<< 5
<、<=、>、>= 6
==、!= 7
^、&、| 8
&& 9
|| 10
= 12
Precedence & associativity 2/2
33
Makeeachdaycount
 循序結構 (Sequence)
 選擇結構 (Selection)
程式的三種基本控制結構 1/2
34
truefalse
Makeeachdaycount
 重複結構 (Iteration)
程式的三種基本控制結構 2/2
35
true
false
Makeeachdaycount
 if … else
if (condition1){
//do Thing A
}
else if (condition2){
//do Thing B
}
else if (condition3){
//do Thing C
}
else {
//do Thing D
}
if敘述 1/2
36
Makeeachdaycount
 範例
byte cmd = Serial.read();
if (cmd == '1') { //從序列埠收到'1'
digitalWrite(LED, HIGH);
Serial.println("Turn LED on");
}
if (cmd == '0') { //從序列埠收到'0'
digitalWrite(LED, LOW);
Serial.println("Turn LED off");
}
if敘述 2/2
37
Makeeachdaycount
 switch…case
switch (var) { //var必須是整數或字元
case label1:
// statements
break;
case label2:
// statements
break;
default:
// statements
}
switch…case敘述 1/2
38
Makeeachdaycount
 範例
byte cmd = Serial.read();
switch (cmd){
case '0':
digitalWrite(LED, LOW);
Serial.println("Turn LED off");
break;
case '1':
digitalWrite(LED, HIGH);
Serial.println("Turn LED on");
break;
}
switch…case敘述 2/2
39
Makeeachdaycount
 for迴圏
for (initialization; condition; increment) {
//statement(s);
}
 範例
byte ledPins[] = {2, 4, 8, 3, 6};
for (int i = 0; i < 5; i++){
pinMode(ledPins[i], OUTPUT);
}
for迴圈敘述 1/3
40
Makeeachdaycount
 while迴圏
while(condition){
// statement(s)
}
 範例
int i=0;
while (i <= 255){
analogWrite(pwmPin, i);
delay(10);
i++;
}
Arduino迴圈敘述 2/3
41
Makeeachdaycount
 do … while迴圏
do {
// statement block
} while (condition);
 範例
int i=0;
do{
analogWrite(pwmPin, i);
delay(10);
i++;
} while (i <= 255);
Arduino迴圈敘述 3/3
42
Makeeachdaycount
 http://www.arduino.cc/reference/en/
Arduino語言參考資料
43

Weitere ähnliche Inhalte

Was ist angesagt?

仮想化環境におけるパケットフォワーディング
仮想化環境におけるパケットフォワーディング仮想化環境におけるパケットフォワーディング
仮想化環境におけるパケットフォワーディング
Takuya ASADA
 
initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動
Takashi Takizawa
 
#ljstudy KVM勉強会
#ljstudy KVM勉強会#ljstudy KVM勉強会
#ljstudy KVM勉強会
Etsuji Nakai
 

Was ist angesagt? (20)

Virtual Chassis for Cloud Builders
Virtual Chassis for Cloud BuildersVirtual Chassis for Cloud Builders
Virtual Chassis for Cloud Builders
 
Arduino應用系統設計 - Arduino程式快速入門
Arduino應用系統設計 - Arduino程式快速入門Arduino應用系統設計 - Arduino程式快速入門
Arduino應用系統設計 - Arduino程式快速入門
 
[ZigBee 嵌入式系統] ZigBee Architecture 與 TI Z-Stack Firmware
[ZigBee 嵌入式系統] ZigBee Architecture 與 TI Z-Stack Firmware[ZigBee 嵌入式系統] ZigBee Architecture 與 TI Z-Stack Firmware
[ZigBee 嵌入式系統] ZigBee Architecture 與 TI Z-Stack Firmware
 
RISC-V : Berkeley Boot Loader & Proxy Kernelのソースコード解析
RISC-V : Berkeley Boot Loader & Proxy Kernelのソースコード解析RISC-V : Berkeley Boot Loader & Proxy Kernelのソースコード解析
RISC-V : Berkeley Boot Loader & Proxy Kernelのソースコード解析
 
Unix v6 Internals
Unix v6 InternalsUnix v6 Internals
Unix v6 Internals
 
Prelude to halide_public
Prelude to halide_publicPrelude to halide_public
Prelude to halide_public
 
仮想化環境におけるパケットフォワーディング
仮想化環境におけるパケットフォワーディング仮想化環境におけるパケットフォワーディング
仮想化環境におけるパケットフォワーディング
 
系統程式 -- 第 4 章 組譯器
系統程式 -- 第 4 章 組譯器系統程式 -- 第 4 章 組譯器
系統程式 -- 第 4 章 組譯器
 
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
 
initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動
 
#ljstudy KVM勉強会
#ljstudy KVM勉強会#ljstudy KVM勉強会
#ljstudy KVM勉強会
 
(公開版)Reconf研2017GUINNESS
(公開版)Reconf研2017GUINNESS(公開版)Reconf研2017GUINNESS
(公開版)Reconf研2017GUINNESS
 
使用 Passkeys 打造無密碼驗證服務
使用 Passkeys 打造無密碼驗證服務使用 Passkeys 打造無密碼驗證服務
使用 Passkeys 打造無密碼驗證服務
 
系統程式 -- 第 0 章
系統程式 -- 第 0 章系統程式 -- 第 0 章
系統程式 -- 第 0 章
 
レガシーコードに向き合ってみた話
レガシーコードに向き合ってみた話レガシーコードに向き合ってみた話
レガシーコードに向き合ってみた話
 
Raspberry Pi 智能風扇
Raspberry Pi 智能風扇Raspberry Pi 智能風扇
Raspberry Pi 智能風扇
 
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術についてAIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
 
VerilatorとSystemC
VerilatorとSystemCVerilatorとSystemC
VerilatorとSystemC
 
Reconnaissance of Virtio: What’s new and how it’s all connected?
Reconnaissance of Virtio: What’s new and how it’s all connected?Reconnaissance of Virtio: What’s new and how it’s all connected?
Reconnaissance of Virtio: What’s new and how it’s all connected?
 
Wire harness & cable assembly 認識awm電線
Wire harness & cable assembly 認識awm電線Wire harness & cable assembly 認識awm電線
Wire harness & cable assembly 認識awm電線
 

Ähnlich wie Arduino程式快速入門

Arduino L2
Arduino L2Arduino L2
Arduino L2
mmiwwcom
 
1 C入門教學
1  C入門教學1  C入門教學
1 C入門教學
Sita Liu
 
The Evolution of Async Programming (GZ TechParty C#)
The Evolution of Async Programming (GZ TechParty C#)The Evolution of Async Programming (GZ TechParty C#)
The Evolution of Async Programming (GZ TechParty C#)
jeffz
 
Node.js开发体验
Node.js开发体验Node.js开发体验
Node.js开发体验
QLeelulu
 

Ähnlich wie Arduino程式快速入門 (20)

竞赛中C++语言拾遗
竞赛中C++语言拾遗竞赛中C++语言拾遗
竞赛中C++语言拾遗
 
C語言標準輸出入函式
C語言標準輸出入函式C語言標準輸出入函式
C語言標準輸出入函式
 
JavaScript 快速複習 2017Q1
JavaScript 快速複習 2017Q1JavaScript 快速複習 2017Q1
JavaScript 快速複習 2017Q1
 
Arduino L2
Arduino L2Arduino L2
Arduino L2
 
Python learn guide
Python learn guidePython learn guide
Python learn guide
 
C程式-函式與巨集
C程式-函式與巨集C程式-函式與巨集
C程式-函式與巨集
 
twMVC#27 | C# 7.0 新功能介紹
twMVC#27 | C# 7.0 新功能介紹twMVC#27 | C# 7.0 新功能介紹
twMVC#27 | C# 7.0 新功能介紹
 
1 C入門教學
1  C入門教學1  C入門教學
1 C入門教學
 
Python變數與資料運算
Python變數與資料運算Python變數與資料運算
Python變數與資料運算
 
The Evolution of Async Programming (GZ TechParty C#)
The Evolution of Async Programming (GZ TechParty C#)The Evolution of Async Programming (GZ TechParty C#)
The Evolution of Async Programming (GZ TechParty C#)
 
Ch8
Ch8Ch8
Ch8
 
Ch8 教學
Ch8 教學Ch8 教學
Ch8 教學
 
Node.js开发体验
Node.js开发体验Node.js开发体验
Node.js开发体验
 
第4章函数
第4章函数第4章函数
第4章函数
 
Hi Haskell
Hi HaskellHi Haskell
Hi Haskell
 
第6章指针
第6章指针第6章指针
第6章指针
 
Ch10 習題
Ch10 習題Ch10 習題
Ch10 習題
 
Optimzing mysql
Optimzing mysqlOptimzing mysql
Optimzing mysql
 
Chapter 3 basic syntax and operator
Chapter 3  basic syntax and operatorChapter 3  basic syntax and operator
Chapter 3 basic syntax and operator
 
Arrays的Sort算法分析
Arrays的Sort算法分析Arrays的Sort算法分析
Arrays的Sort算法分析
 

Mehr von 吳錫修 (ShyiShiou Wu)

Mehr von 吳錫修 (ShyiShiou Wu) (20)

Vuforia AR影片程式設計
Vuforia AR影片程式設計Vuforia AR影片程式設計
Vuforia AR影片程式設計
 
micro:bit亮度感測應用
micro:bit亮度感測應用micro:bit亮度感測應用
micro:bit亮度感測應用
 
Vuforia AR 同時追踨多張辨識圖
Vuforia AR同時追踨多張辨識圖Vuforia AR同時追踨多張辨識圖
Vuforia AR 同時追踨多張辨識圖
 
micro:bit開關控制應用
micro:bit開關控制應用micro:bit開關控制應用
micro:bit開關控制應用
 
Vuforia AR 應用程式設計入門
Vuforia AR應用程式設計入門Vuforia AR應用程式設計入門
Vuforia AR 應用程式設計入門
 
Vuforia AR 應用程式準備作業
Vuforia AR應用程式準備作業Vuforia AR應用程式準備作業
Vuforia AR 應用程式準備作業
 
micro:bit LED顯示控制
micro:bit LED顯示控制micro:bit LED顯示控制
micro:bit LED顯示控制
 
IDE for micro:bit
IDE for micro:bitIDE for micro:bit
IDE for micro:bit
 
Microbit 1 introduction
Microbit 1 introductionMicrobit 1 introduction
Microbit 1 introduction
 
Arduino overview
Arduino overviewArduino overview
Arduino overview
 
使用Makeblock App學習mBot程式設計
使用Makeblock App學習mBot程式設計使用Makeblock App學習mBot程式設計
使用Makeblock App學習mBot程式設計
 
使用M部落App學習mBot程式設計
使用M部落App學習mBot程式設計使用M部落App學習mBot程式設計
使用M部落App學習mBot程式設計
 
nodeMCU IOT教學03 - NodeMCU導論
nodeMCU IOT教學03 - NodeMCU導論nodeMCU IOT教學03 - NodeMCU導論
nodeMCU IOT教學03 - NodeMCU導論
 
nodeMCU IOT教學02 - Lua語言
nodeMCU IOT教學02 - Lua語言nodeMCU IOT教學02 - Lua語言
nodeMCU IOT教學02 - Lua語言
 
Unity遊戲程式設計 - 2D Platformer遊戲
Unity遊戲程式設計 - 2D Platformer遊戲Unity遊戲程式設計 - 2D Platformer遊戲
Unity遊戲程式設計 - 2D Platformer遊戲
 
Unity遊戲程式設計 - 2D移動與碰撞處理II
Unity遊戲程式設計 - 2D移動與碰撞處理IIUnity遊戲程式設計 - 2D移動與碰撞處理II
Unity遊戲程式設計 - 2D移動與碰撞處理II
 
Unity遊戲程式設計 - 2D運動與碰撞處理I
Unity遊戲程式設計 - 2D運動與碰撞處理IUnity遊戲程式設計 - 2D運動與碰撞處理I
Unity遊戲程式設計 - 2D運動與碰撞處理I
 
Python與Ardinio整合應用
Python與Ardinio整合應用Python與Ardinio整合應用
Python與Ardinio整合應用
 
mBlock積木式設計程式
mBlock積木式設計程式mBlock積木式設計程式
mBlock積木式設計程式
 
Unity遊戲設計- 2D動畫製作及應用
Unity遊戲設計-  2D動畫製作及應用Unity遊戲設計-  2D動畫製作及應用
Unity遊戲設計- 2D動畫製作及應用
 

Arduino程式快速入門