1、Arduino 使用教程 http:/ DreamFactory http:/ 0 Arduino 使用教程使用教程使用教程使用教程 北京龙凡汇众机器人科技有限公司 梦工厂梦工厂梦工厂梦工厂 E_mail: Arduino 控制器控制器控制器控制器 使用使用使用使用 教程教程教程教程 DFRduino Duemilanove Compatible 北京龙凡汇众机器人科技有限公司北京龙凡汇众机器人科技有限公司北京龙凡汇众机器人科技有限公司北京龙凡汇众机器人科技有限公司 Version 1.2 Arduino 使用教程 http:/ DreamFactory http:/ 1 Arduino
2、 使用教程使用教程使用教程使用教程 北京龙凡汇众机器人科技有限公司 梦工厂梦工厂梦工厂梦工厂 E_mail: 概概概 概 述述述 述 什么什么什么什么 是是是 是 Arduino? Arduino 是一 块基与开 放原始 代码 的 Simple i/o 平台 ,並且具有使用 类似 java,C 语言的 开发环境 。让您可以快速使用 Arduino 语言与 Flash 或 Processing等软件 ,作出互 动作品 。 Arduino 可以使用 开发 完成的 电子元件例如 Switch或 Sensors 或其他控制器 、 步进电机 或其他 输出裝置 。 Arduino 也可以 独立运作成 为
3、一个可以跟 软件沟通 的平台,例如 说: flash processing Max/MSP VVVV 或其他互 动软件 Arduino 开发 界面基 于开 放原始 码原则,可以 让您免 费下载使用 开发 出更多令人 惊奇 的互 动作品 。 什么什么什么什么 是是是 是 Roboduino? DFRduino 与 Arduino 完全兼容 ,只是在原来的基础上作了些改进 。 Arduino 的 IO 使用的孔座 ,做互动作品 需要面包板和针线搭配才能进行 ,而 DFRduino 的 IO 使用针座 ,使用 我们的 杜邦线就可以直接把各种 传感器连接到 DFRduino上。 特色描述特色描述特色描
4、述特色描述 1 开放原始 码的电路图设计 ,程式 开发界 面免 费下载,也可依需求自己修改 ! 2 DFRduino 可使用 ISP 下载线 ,自我將新的 IC 程序烧 入bootloader; 3 可依 据官方 电路图 ,简化 DFRduino 模组,完成 独立云作的微 处理控制 器; 4 可简单 地与传感器 、各式各 样的电子元件 连接(如:红外线 ,超声波 ,热敏电阻,光敏 电阻,伺服 电机等 ); 5 支援多 样的互 动程式 如: Flash,Max/Msp,VVVV,PD,C,Processing 等; 6 使用低 价格的微 处理控制器 (ATMEGA168V-10PI); 7 US
5、B 接口 ,不需外接 电源,另外有提供 9VDC 输入接口 ; 8 应用方面 ,利用 DFRduino,突破以往只能使用滑鼠 ,键盘 ,CCD 等输入的裝置的互 动內容 ,可以更 简单 地达成单人或多人 游戏互动 。 性能描述性能描述性能描述性能描述 1 Digital I/O 数字输 入/输出端共 013。 2 Analog I/O 模拟输 入/输出端共 05。 3 支持 USB 接口协议 及供 电(不需外 接电源 )。 4 支持 ISP 下载 功能 。 5 支持单片机 TX/RX 端子 。 6 支持 USB TX/RX 端子 。 7 支持 AREF 端子 。 8 支持六組 PWM 端子 (
6、Pin11,Pin10,Pin9,Pin6,Pin5,Pin3)。 9 输入电压 :接上 USB 时无须外部供电或外部 5V9V DC 输入。 10输出电压 :5V DC 输出和 3.3V DC 输出 和外部电源输入 。 11采用 Atmel Atmega168V-10PI单片机 。 12 DFRduino 大小尺寸 :宽 70mm X 高54mm。 Arduino 使用教程 http:/ DreamFactory http:/ 2 Arduino 使用教程使用教程使用教程使用教程 北京龙凡汇众机器人科技有限公司 梦工厂梦工厂梦工厂梦工厂 E_mail: 第一第一第一第一 课课课 课 Ar
7、duino 语言语言语言语言 Arduino 语言是建立在 C/C+基础上的 ,其实也就是基础的 C 语言 , Arduino 语言只不过把 AVR 单片机 (微控制器)相关的一些 寄存器 参数设置 等都函数化 了,不用我们去了解他的底层 ,让不 太了解 AVR 单片机 (微控制器 )的朋友也能轻松上手 。 那么这里就简单的注释一下 Arduino 语言 。 /*基础 C 语言 */ 关键字关键字关键字关键字: if if.else for switch case while do. while break continue return goto 语法符号语法符号语法符号语法符号: ; /
8、/* */ 运算符运算符运算符运算符: = + - * / % = != Arduino 使用教程 http:/ DreamFactory http:/ 3 Arduino 使用教程使用教程使用教程使用教程 北京龙凡汇众机器人科技有限公司 梦工厂梦工厂梦工厂梦工厂 E_mail: = ” 。 Digital Output 数字输数字输数字输数字输 出出出 出实验 实验实验实验 功能功能功能功能 : :使 PIN13脚上的 LED 闪烁 。 int ledPin = 13; / 设定控制 LED 的数字 IO 脚 void setup() pinMode(ledPin, OUTPUT); /
9、 设定数字 IO 口的模式 ,OUTPUT 为输出 void loop() digitalWrite(ledPin, HIGH); / 设定 PIN13 脚为 HIGH = 4V delay(1000); / 设定延时时间 ,1000 = 1 秒 digitalWrite(ledPin, LOW); / 设定 PIN13 脚为 LOW = 0V delay(1000); /设定延时时间 功能功能功能功能 : :PWM使 PIN11脚上的 LED逐渐变亮逐渐变暗 。 int ledPin = 11; / 设定控制 LED 的数字 IO 脚 int val; /定义一个变量 void setup(
10、) pinMode(ledPin, OUTPUT); / 设定数字 IO 口的模式 ,OUTPUT 为输出 void loop() for(val=0;val0;val-) /变量循环 -1 analogWrite(ledPin, val); delay(50); Digital Input 数字输数字输数字输数字输 入入入 入实验 实验实验实验 Arduino 使用教程 http:/ DreamFactory http:/ 14 Arduino 使用教程使用教程使用教程使用教程 北京龙凡汇众机器人科技有限公司 梦工厂梦工厂梦工厂梦工厂 E_mail: 功能功能功能功能 : :闭合开关 S
11、W,PIN13 脚上的 LED 亮,断开开关 SW,PIN13 脚上的 LED 灭。 int ledPin = 13; / 设定控制 LED 的数字 IO 脚 int switchPin = 7; / 设定开关的数字 IO 脚 int val = 0; /定义一个变量 void setup() pinMode(ledPin, OUTPUT); / 设定数字 IO 口的模式 ,OUTPUT 为输出 pinMode(switchPin, INPUT); / 设定数字 IO 口的模式 ,INPUT 为输入 void loop() val = digitalRead(switchPin); /读数字
12、IO 口上的状态 if (HIGH = val) digitalWrite(ledPin, LOW); / 如果开关断开 ,LED 灭 else digitalWrite(ledPin, HIGH); / 如果开关闭合 ,LED 亮 Analog Input 模拟输模拟输模拟输模拟输 入入入 入实验 实验实验实验 Arduino 使用教程 http:/ DreamFactory http:/ 15 Arduino 使用教程使用教程使用教程使用教程 北京龙凡汇众机器人科技有限公司 梦工厂梦工厂梦工厂梦工厂 E_mail: 功能功能功能功能 : :调节电位器 RPot,使输入模拟量 的变化 来
13、改变 LED 闪烁的频率 。 int ledPin = 13; / 设定控制 LED 的数字 IO 脚 int RPotPin = 5; / 设定 模拟输入 IO 脚 int val = 0; /定义一个变量 void setup() pinMode(ledPin, OUTPUT); / 设定数字 IO 口的模式 ,OUTPUT 为输出 void loop() val = analogRead(RPotPin); /读模拟 IO 口上的 数据 digitalWrite(ledPin, HIGH); / 设定 PIN13 脚为 HIGH = 4V delay(value); / 延时时间为模拟输
14、入的值 digitalWrite(ledPin, LOW); / 设定 PIN13 脚为 LOW delay(value); / 延时时间为模拟输入的值 第三课第三课第三课第三课 Arduino 的串的串的串的串 口口口 口通讯 通讯通讯通讯 Arduino 不但有 14 个数字接口和 6 个模拟接口外 ,还有 1 个更为常用的串口接口 。在实际应用中串口以只需要少量的几根线就能和其他串口设备通讯 的优势被广应用 。 串行接口按标准被分为 RS-232、RS-422、RS-485。RS-232 是在 1962 年发布的 ,也是目前 PC 机与通信工业中应用最广泛的一种串行接口 ,RS-232
15、采取不平衡传输方式 ,即所谓单端通讯 。典型的 RS-232 信号在正负电平之间摆动 ,在发送数据时 ,发送端驱动器输出正电平在 +5+15V,负电平在 -5-15V 电平 。我们的单片机使用的是 TTL 电平的串行协议 ,因此单片机与 pc 通讯时需要进行 RS-232 电平和 TTL电平的转换 ,最常用的 电平转换 芯片是 MAX232,单片机与单片机通讯时则可以直接连接 。 USB 版本的 Arduino 则是通过 USB 转成 TTL 串口下载程序的 ,数字 口 PIN 0 和PIN 1就是 TTL 串口 RX和 TX。 Arduino 使用教程 http:/ DreamFactory
16、 http:/ 16 Arduino 使用教程使用教程使用教程使用教程 北京龙凡汇众机器人科技有限公司 梦工厂梦工厂梦工厂梦工厂 E_mail: 串口通讯中最重要的一点就的通讯协议 ,一般串口通讯协议都会有波特率 、数据位 、停止位 、校验位等参数 。大家不会设置也不用怕 ,Arduino 语言中 Serial.begin()函数就能使大家轻松完成设置 ,我们只需要改变该函 数的参数即可 ,例如 Serial.begin(9600),则表示波特率为 9600bit/s(每秒比特数 bps),其余参数默认即可 。 Arduino 语言中还提供了 Serial.available() 判断串口
17、缓冲器状态 、Serial.read()读串口 、Serial.print()串口发送及 Serial.println()带换行符串口发送四个函数 。 下面我们用一段代码来演示这些函数的用途 。实验无须外围电路 ,只需要将下载的 USB 线连接即可 。 char word; void setup() Serial.begin(9600); / 打开串口 ,设置波特率为 9600 bps void loop() if (Serial.available() 0) /判断串口缓冲器是否有数据装入 word = Serial.read(); /读取串口 if(word=a) /判断输入的字符是否为
18、a Serial.print(“DFRobot “); /从串口发送字符串 Serial.println(“is NO.1“); /从串口发送字符串并换行 编译下载完程序后 ,点红圈里的按钮 ,打开串口监视器 ; Arduino 使用教程 http:/ DreamFactory http:/ 17 Arduino 使用教程使用教程使用教程使用教程 北京龙凡汇众机器人科技有限公司 梦工厂梦工厂梦工厂梦工厂 E_mail: 选择串口监视器的波特率为 9600bps,在发送框里填上字母 a,点 send 发送 ,下面的显示框里就会显示返回的数据,如果发送 其他 字母 ,则无返回 值。 第第第 第
19、四 四四 四课 课课 课 Arduino 的的的 的 I2C/TWI 通讯通讯通讯通讯 什么的 I2C 呢?I2C 即 InterIntegrated Circuit 串行总线的缩写 ,是 PHILIPS 公司推出的芯片间串行传输总线。它以 1 根串行数据线 (SDA)和 1 根串行时钟线 (SCL)实现了双工的同步数据传输 。具有接口线少 ,控制方式简化,器件封装形式小 ,通信速率较高等优点 。在主从通信中 ,可以有多个 I2C 总线器件同时接到 I2C 总线上 ,通过地址来识别通信对象 。 幸运的是 ,Arduino 已经为我们提供了 I2C 的库函数 (Wire.h), 这样我们就可以很
20、轻松的玩 IIC 通讯了 。 这里使用 Arduino Diecimila 做主机 ,2 个 Arduino Nano 做从机 (不一定非要 nano 做从机 ,Arduino Diecimila、Mini 甚至其他 IIC 器件都可以 。如果 IIC 总线上挂了多个从机 ,那么就要在总线上 加上拉电阻 。), Arduino Nano 是 Arduino 家族中的新成员 ,估计大家还不太熟悉吧 ,这里我就简单介绍一下 。 Arduino Nano 实际和 Arduino Diecimila 差不多 ,但Arduino Nano 与 Arduino Diecimila 相比较 ,Arduino
21、 NanArduino 使用教程 http:/ DreamFactory http:/ 18 Arduino 使用教程使用教程使用教程使用教程 北京龙凡汇众机器人科技有限公司 梦工厂梦工厂梦工厂梦工厂 E_mail: o 在体积上占很大优势 ,并且 具有 8 个模拟口 ,比Arduino Diecimila 还多2 个,还具有 USB 电源和外接电源自动切换功能 ,12 版的编译环境 支持 nano 硬件 。 I2C 总线也是主从方式通讯 ,I2C 总线允许连接多个微控制器 ,显然不能同时存在两个主器件 ,先控制总线的器件成为主器件 ,这就是总线竞争 。在竞争过程中数据不会被破坏 、丢失
22、。数据只能在主 、从器件中传送 ,结束后 ,主、从器件将释放总线 ,退出主 、从器件角色 。 下面我们就做个简单的 I2C 通讯实验 ,通过编译环境的串口监视器向主机发送指令 ,主机收到后 ,再通过 I2C 总线发送给地址匹配的从机 ,然后从机驱动 LED 点亮 。代码分主从部分 ,主机部分写入 Arduino Diecimila,从机部分写入 Arduino Nano。 实验实物图 : Arduino 使用教程 http:/ DreamFactory http:/ 19 Arduino 使用教程使用教程使用教程使用教程 北京龙凡汇众机器人科技有限公司 梦工厂梦工厂梦工厂梦工厂 E_mail
23、: 在上代码之前 ,我们先了解一下 IIC 的库函数 Wire.h 里面的常用函数 。 begin() /初始化 Wire 库,和设置 IIC 总线主从机 begin(address) /带地址参数就是从机 ,不带就是主机 requestFrom(address, count) /在启动 IIC 总线后 ,可以继续访问另一个地址 ,和访问次数 beginTransmission(address) /开始给从机发送地址 endTransmission() /结束本次 IIC 通讯 ,与上条函数成对使用 send() /发送数据 byte available() /用于判断数据是否有效 ,有效才
24、开始接收 byte receive() /接收数据 onReceive(handler) /从机接收主机发来的数据 onRequest(handler) /从机请求 主机发送数据 主机代码主机代码主机代码主机代码 :(:(:(:( 从编译器串口监视器发送数字从编译器串口监视器发送数字从编译器串口监视器发送数字从编译器串口监视器发送数字 1, ,2 2, ,3 3, ,4 4 来控制从机的来控制从机的来控制从机的来控制从机的 LED 亮与灭亮与灭亮与灭亮与灭 ) ) #include void setup() Wire.begin(); /启动 I2C 总线 ,地址缺省表示为主机 Serial.
25、begin(9600); /启动串口 ,设置波特率为 9600 Serial.println(“Ready“); /发送字符 void loop() int val; if(Serial.available() 0) /判断串口缓冲器是否有数据装入 val=Serial.read(); /读串口 if(val=49)/1 Wire.beginTransmission(4); / 与地址 4 的从机 连接通讯 Arduino 使用教程 http:/ DreamFactory http:/ 20 Arduino 使用教程使用教程使用教程使用教程 北京龙凡汇众机器人科技有限公司 梦工厂梦工厂梦工厂
26、梦工厂 E_mail: Wire.send(1); / 发送数 字 1 开 LED Wire.endTransmission(); / 停止发送 Serial.println(“49 OK“); / 串口上显示 49 OK 表示完成 ,49 表示为数字 1 的ASCII 码 delay(10); / else if(val=50)/2 Wire.beginTransmission(4); / 与地址 4 的从机 连接通讯 Wire.send(0); / 发送数字 0 关 LED Wire.endTransmission(); / 停止发送 Serial.println(“50 OK“); /
27、 串口上显示 50 OK 表示完成 delay(10); else if(val=51)/3 Wire.beginTransmission(5); / 与地址 5 的从机 连接通讯 Wire.send(1); / 发送数字 1 开 LED Wire.endTransmission(); / 停止发送 Serial.println(“51 OK“); / 串口上显示 51 OK 表示完成 delay(10); else if(val=52)/4 Wire.beginTransmission(5); / 与地址 5 的从机 连接通讯 Wire.send(0); / 发送数字 0 关 LED Wir
28、e.endTransmission(); / 停止发送 Serial.println(“52 OK“); / 串口上显示 52 OK 表示完成 delay(10); else Serial.println(val); 从机从机从机从机 A 代码代码代码代码 :(:(:(:( 接收到主机发送的接收到主机发送的接收到主机发送的接收到主机发送的 1 点亮点亮点亮点亮 LED, ,接收到 接收到接收到接收到 0 关掉关掉关掉关掉 LED) ) #include int LED = 2; void setup() Wire.begin(4); / 设置从机地址为 4 Wire.onReceive(rec
29、eiveEvent); /从机接收主机发来的数据 pinMode(LED,OUTPUT); / 设置 IO 口为输出模式 Arduino 使用教程 http:/ DreamFactory http:/ 21 Arduino 使用教程使用教程使用教程使用教程 北京龙凡汇众机器人科技有限公司 梦工厂梦工厂梦工厂梦工厂 E_mail: void loop() delay(100); void receiveEvent(int howMany) / 接收从主机发过来的数据 int c = Wire.receive(); / 接收单个字节 if(c=1) digitalWrite(LED,HIGH)
30、; / 如果为 1 开LED else if(c=0) digitalWrite(LED,LOW); / 如果为 0 关LED 从机从机从机从机 B 代码代码代码代码 :(:(:(:( 接收到主机发送的接收到主机发送的接收到主机发送的接收到主机发送的 1 点亮点亮点亮点亮 LED, ,接收到 接收到接收到接收到 0 关掉关掉关掉关掉 LED) ) #include int LED = 2; void setup() Wire.begin(5); / 设置从机地址为 5 Wire.onReceive(receiveEvent); / pinMode(LED,OUTPUT); void loop(
31、) delay(100); void receiveEvent(int howMany) int c = Wire.receive(); if(c=1) digitalWrite(LED,HIGH); else if(c=0) digitalWrite(LED,LOW); Arduino 使用教程 http:/ DreamFactory http:/ 22 Arduino 使用教程使用教程使用教程使用教程 北京龙凡汇众机器人科技有限公司 梦工厂梦工厂梦工厂梦工厂 E_mail: 第第第 第五 五五 五课 课课 课 Arduino 控制控制控制控制 1602 字符液晶字符液晶字符液晶字符液晶
32、 显示显示显示显示 1602 字符液晶 是最常用的一种 ,很具有代表性 ,1602 液晶分 4 总线和 8 总线 2 种驱动方式 (关于该液晶的详细资料,大家可以自己搜索 ,这里就不做详细说明了 )。 我们用单片机驱动 1602 液晶 ,使用并口操作很容易就驱动起来了 ,但使用 Arduino 板驱动 1602液晶 ,还真有点费劲 ,因为他只能位操作 。根据官方网站提供的例程 ,很容易看出他们使用的是最常用的 8 总线驱动方式 ,然而他巧妙的使用 for循环语句完 成了位操作的赋值 。来看看官方的工程代码 : int DI = 12; int RW = 11; int DB = 3, 4, 5
33、, 6, 7, 8, 9, 10;/使用数组来定义总线需要的 管脚 int Enable = 2; void LcdCommandWrite(int value) / poll all the pins int i = 0; for (i=DB0; i = 1; digitalWrite(Enable,LOW); delayMicroseconds(1); / send a pulse to enable digitalWrite(Enable,HIGH); delayMicroseconds(1); / pause 1 ms according to datasheet digitalWri
34、te(Enable,LOW); delayMicroseconds(1); / pause 1 ms according to datasheet void LcdDataWrite(int value) / poll all the pins int i = 0; digitalWrite(DI, HIGH); digitalWrite(RW, LOW); for (i=DB0; i = 1; digitalWrite(Enable,LOW); delayMicroseconds(1); / send a pulse to enable digitalWrite(Enable,HIGH);
35、delayMicroseconds(1); digitalWrite(Enable,LOW); delayMicroseconds(1); / pause 1 ms according to datasheet Arduino 使用教程 http:/ DreamFactory http:/ 23 Arduino 使用教程使用教程使用教程使用教程 北京龙凡汇众机器人科技有限公司 梦工厂梦工厂梦工厂梦工厂 E_mail: void setup (void) int i = 0; for (i=Enable; i = DI; i+) pinMode(i,OUTPUT); delay(100);
36、/ initiatize lcd after a short pause needed by the LCDs controller LcdCommandWrite(0x38); / set: / 8-bit interface, 1 display lines, 5x7 font delay(20); LcdCommandWrite(0x06); / entry mode set: / increment automatically, no display shift delay(20); LcdCommandWrite(0x0E); / display control: / turn di
37、splay on, cursor on, no blinking delay(20); LcdCommandWrite(0x01); / clear display, set cursor position to zero delay(100); LcdCommandWrite(0x80); / display control: / turn display on, cursor on, no blinking delay(20); void loop (void) LcdCommandWrite(0x02); / set cursor position to zero delay(10);
38、/ Write the welcome message LcdDataWrite(H); LcdDataWrite(o); LcdDataWrite(l); LcdDataWrite(a); LcdDataWrite( ); LcdDataWrite(C); LcdDataWrite(a); LcdDataWrite(r); LcdDataWrite(a); LcdDataWrite(c); LcdDataWrite(o); LcdDataWrite(l); LcdDataWrite(a); delay(500); 实验器材 :Arduino DM 一个 ,USB 电缆一根 ,LCD1602
39、一个 ,单芯杜邦线若干 。 根据例程定义接线图如下 : Arduino 使用教程 http:/ DreamFactory http:/ 24 Arduino 使用教程使用教程使用教程使用教程 北京龙凡汇众机器人科技有限公司 梦工厂梦工厂梦工厂梦工厂 E_mail: 大家需要注意的是 ,液晶根据不同的颜色不同的型号 ,对比度 (VEE)调节电压也不同 ,一般都需要接个电位器进行调节 ,本实验 使用的是灰膜液晶 ,VEE 直接接到地即可 。 Arduino 使用教程 http:/ DreamFactory http:/ 25 Arduino 使用教程使用教程使用教程使用教程 北京龙凡汇众机器人科技有限公司 梦工厂梦工厂梦工厂梦工厂