简介
新一代RoemoV2是以ATmega32U4为主芯片的多功能控制板。同样基于Arduino开放源代码的Simple I/O平台,并且具有使用类似jave,C语言的开发环境。RoMeo不仅可直插各类Switch,Sensor等输入设备,同样可直插多类LED,舵机等输出设备。板子还集成了电机驱动模块,可通过外接6~20V电压,直接驱动电机。RoMeo也可以独立运作为一个可以跟软件沟通的平台,例如,flash,processing,Max/MSP,VVVV等互动软件...Romeo不但有完整的Arduino Leonardo的功能,还集成了2路电机驱动、无线数传模块、数字与模拟IO扩展口、I2C总线接口等功能。
使用USB口调试电机的时候,请关闭电机开关!
否则,过大的外部供电会使Romeo烧坏。
V2版的Romeo和V1版的Analog模拟量3-P排针
有所更改,如果您用以前的模拟量传感器,请注意正确接线。不正确的电源接线会烧坏传感器等设备。
**注意:**
上传程序时,请在Arduino IDE下选择版型:Leonardo,否则编译上传出错。
串口通信设备:对于串口通信设备,如:Xbee,蓝牙模块,WiFi模块等,请在代码中使用Serial1.***()。Serial.***()用于电脑端软件,如串口助手, Arduino IDE的Serial Monitor,通过USB线调试Romeo。阅读: "Arduino官方说明"
模拟口A0:当您使用A0口作为模拟量输入/输出时,请关掉按钮选择开关,即:拨到OFF的位置。因为板子上的5个按钮是连接在A0上的,如果打开,A0口的读数不正确
产品参数
- 微控制器:ATmega32u4
- 引导装载程序:Arduino Leonardo
- 工作电压:5V
- 直流输出:5V/3.3V
- 输入电压(推荐):7-12V
- 输入电压(极限):6-20V
- 数字端口外部电源电压:5-20V
- IO引脚直流电流:40mA
- 3.3V引脚直流电流:50mA
- 电机驱动模块恒定输出电流:2A
- 体积:89x84x14mm
- Digital I/O(数字): D0-D16,A0-A5 (23个)
- Analog I/O(模拟): A0-A5,A6-A11(在数字接口4,6,8,9,10,12上)) (12个)
- PWM口:7个 (数字引脚3,5,6,9,10,11和13)
- 支持USB供电与外部供电自动切换
- 支持ISP下载功能
- 集成APC220无线数传/DF-Bluetooth蓝牙模块接口
- 支持3组I2C/TWI接口
- 支持2路电机驱动,峰值电流2A,4个控制口使用跳线切换
- 支持5个按键输入(模拟口0),支持开关切换
- 支持公母排阵
- 支持Xbee和XBee形式的WiFi,蓝牙和RF模块
引脚说明
外部电源/电机电源输入: 你可以从Motor Power In的接线柱端子连接线,标示“M_VIN”为电源正,当电机电源小于12V时,控制器可以和电机共用一个电源,Power In Selection 开关拨到ON;当电机电源大于12V时,Power In Selection 开关必须拨到OFF,同时控制器需要单独供电。
**注意**:最大供电电压不能超过20V直流
新版本烧录教程
RoMeo如何使用
Arduino IDE的使用:
Arduino IDE是Arduino产品的软件编辑环境。简单的说就是用来写代码,下载代码的地方。任何的Arduino产品都需要下载代码后才能运作。我们所搭建的硬件电路是辅助代码来完成的,两者是缺一不可的。如同人通过大脑来控制肢体活动是一个道理。如果代码就是大脑的话,外围硬件就是肢体,肢体的活动取决于大脑,所以硬件实现取决于代码。
数字口的使用
A. 板载L灯实验
先来个预热,做个最简单的实验。Romeo和Arduino一样,有个连接到数字口13的板载LED(L),先来亮个灯吧!把Romeo连到电脑上后,打开Arduino IDE,选择Boards --> Arduino Leonardo 和串口com。
演示代码:
int ledPin = 13; // 定义LED为 pin 13
void setup()
{
pinMode(ledPin, OUTPUT); // 设置数字端口13为输出模式
}
void loop()
{
digitalWrite(ledPin, HIGH); // 数字端口置高,LED亮
delay(1000); // 延时
digitalWrite(ledPin, LOW); // 数字端口置低,LED灭
delay(1000); // 延时
}
程序功能:板载的L灯会每秒闪烁一次。
B. 外接LED实验
如果你想外接个LED,可以按下图进行连接,下载实验A中相同的代码,可以实现相同的效果。
程序功能:外接LED灯会每秒闪烁一次。
C. 按键实验
我们来做个简单的互动实验,按键按下,LED灯亮,松开,LED熄灭。按下图连接。
演示代码:
int buttonPin = 2; // 定义按键为 pin 2
int ledPin = 13; // 定义LED为 pin 13
int buttonState = 0;
void setup() {
pinMode(ledPin, OUTPUT); // 设置数字端口13为输出模式
pinMode(buttonPin, INPUT); // 设置数字端口2为输入模式
}
void loop(){
buttonState = digitalRead(buttonPin); //读取Pin 2的状态
if (buttonState == HIGH) { //判断是否为高
digitalWrite(ledPin, HIGH); //如果是高,设置LED亮
}
else {
digitalWrite(ledPin, LOW); //如果是低,设置LED灭
}
}
程序功能:按下灯亮,松开灯灭。
D. 舵机实验
如果想让东西动起来,离不开舵机。令人兴奋的是,Arduino提供了一个Servo库,让初学者能很快的用上舵机,来看下吧!
演示代码:
#include <Servo.h> // 声明调用Servo.h库
Servo myservo; // 创建一个舵机对象
int pos = 0; // 变量pos用来存储舵机位置
void setup() {
myservo.attach(9); // 将引脚9上的舵机与声明的舵机对象连接起来
}
void loop() {
for(pos = 0; pos < 180; pos += 1){ // 舵机从0°转到180°,每次增加1°
myservo.write(pos); // 给舵机写入角度
delay(15); // 延时15ms让舵机转到指定位置
}
for(pos = 180; pos>=1; pos-=1) { // 舵机从180°回到0°,每次减小1°
myservo.write(pos); // 写角度到舵机
delay(15); // 延时15ms让舵机转到指定位置
}
}
程序功能:舵机从0°-180°,再从180°转回0°。
E. 多舵机实验
RoMeo数字端口扩展端子是按照舵机的线序设计的,所以可以直接控制舵机。接一个舵机时由于电流不大,所以可以暂时使用RoMeo上的5V供电,但如果Romeo控制器可以控制多个舵机,用USB的5V供电就不够了,这时就需要从数字端口外部电源输入端供电,电源电压取决于你所需舵机的正常工作电压,我们这里使用的5V舵机,所以接入5V开关电源供电即可。
演示代码:
#include <Servo.h>
Servo servo1;
Servo servo2;
Servo servo3;
void setup(){
servo1.attach(5); //定义舵机1控制口为Pin5
servo2.attach(10); //定义舵机2控制口为Pin10
servo3.attach(11); //定义舵机3控制口为Pin11
Serial.begin(19200);//设置波特率
Serial.print("Ready");
}
void loop(){
static int v = 0;
if ( Serial.available()) {
char ch = Serial.read(); //读取串口数据
switch(ch) {
case '0'...'9':
v = v * 10 + ch - '0'; //字符换算成10进制
break;
case 'a': //如果数据后带a,则表示是servo1的数据,比如串口发送85a
servo1.write(v);
v = 0;
break;
case 'b': //如果数据后带b,则表示是servo2的数据,比如串口发送90b
servo2.write(v);
v = 0;
break;
case 'c': //如果数据后带c ,则表示是servo3的数据,比如串口发送180c
servo3.write(v);
v = 0;
break;
}
}
}
程序功能:通过IDE中的串口助手,发送舵机度数控制舵机转动的角度,比如发送字符85a表示舵机1转动85度,发送字符180c表示舵机3转动180度。
如何打开串口?
打开Arduino IDE,右上角有个放大镜的图标,鼠标放在上面会显示串口监视器,点击该图标。
打开串口后,设置串口监视器的波特率为19200。
就可以直接从串口输入相应的值了,比如我们这里输入"85a",让第一个舵机转85°。
F. 电机驱动实验
RoMeo上集成了2路电机驱动,这是为了让机器人爱好者节约大量制作硬件的时间,而把开发重点放在软件上。电机驱动电路采用L298芯片,峰值电流可达2A。当使用电机驱动时,又会涉及到电源供电问题,如下图所示的接线方法,M_VIN接正极,GND接负极。还有就是记得把开关拨到"ON"端。
PWM控制模式
引脚 | 功能 |
---|---|
4 | 电机1方向控制 |
5 | 电机1PWM控制 |
6 | 电机2PWM控制 |
7 | 电机2方向控制 |
PWM模式
电机驱动电路控制端使用短路跳线选通,用的时候接通,不用就断开。
演示代码:
int E1 = 5; //定义M1使能端
int E2 = 6; //定义M2使能端
int M1 = 4; //定义M1控制端
int M2 = 7; //定义M1控制端
void stop(void){ //停止
digitalWrite(E1,LOW);
digitalWrite(E2,LOW);
}
void advance(char a,char b){ //前进
analogWrite (E1,a); //PWM调速
digitalWrite(M1,HIGH);
analogWrite (E2,b);
digitalWrite(M2,HIGH);
}
void back_off (char a,char b) { //后退
analogWrite (E1,a);
digitalWrite(M1,LOW);
analogWrite (E2,b);
digitalWrite(M2,LOW);
}
void turn_L (char a,char b) { //左转
analogWrite (E1,a);
digitalWrite(M1,LOW);
analogWrite (E2,b);
digitalWrite(M2,HIGH);
}
void turn_R (char a,char b) { //右转
analogWrite (E1,a);
digitalWrite(M1,HIGH);
analogWrite (E2,b);
digitalWrite(M2,LOW);
}
void setup(void) {
int i;
for(i=4;i<=7;i++)
pinMode(i, OUTPUT);
Serial.begin(19200); //设置串口波特率
}
void loop(void) {
if(Serial.available()>0){
char val = Serial.read();
if(val!=-1){
switch(val){
case 'w'://前进
advance (100,100); //PWM调速
break;
case 's'://后退
back_off (100,100);
break;
case 'a'://左转
turn_L (100,100);
break;
case 'd'://右转
turn_R (100,100);
break;
case 'q'://停止
stop();
break;
default : break;
}
delay(40);
}
}
}
程序功能:串口输入"w","s","a","d",电机会有相应的动作。
PLL控制模式
Romeo也支持PLL相位锁相环控制模式。
- 实际使用效果为:
- 启动控制引脚输出高电平电机才能启动,为低电平时则电机禁止启动;
- 方向控制引脚pwm信号为中位值时(约100左右,不同电机需要测试得出),电机停止;
- 方向控制引脚pwm信号偏离中位值越多速度越大;
- 方向控制引脚pwm信号大于中位值正转,小于中位值则反转。
引脚 | 功能 |
---|---|
4 | 电机1启用控制 |
5 | 电机1方向控制 |
6 | 电机2方向控制 |
7 | 电机2启用控制 |
"PLL模式"
演示代码:
//Standard DLL Speed control
int E1 = 4; //M1 Speed Control
int E2 = 7; //M2 Speed Control
int M1 = 5; //M1 Direction Control
int M2 = 6; //M1 Direction Control
//When m1p/m2p is 127, it stops the motor
//when m1p/m2p is 255, it gives the maximum speed for one direction
//When m1p/m2p is 0, it gives the maximum speed for reverse direction
void DriveMotorP(byte m1p, byte m2p)//Drive Motor Power Mode{
digitalWrite(E1, HIGH);
analogWrite(M1, (m1p));
digitalWrite(E2, HIGH);
analogWrite(M2, (m2p));
}
void setup(void) {
int i;
for(i=4;i<=7;i++)
pinMode(i, OUTPUT);
Serial.begin(19200); //Set Baud Rate
}
void loop(void) {
if(Serial.available()){
char val = Serial.read();
if(val!=-1){
switch(val){
case 'w'://Move Forward
DriveMotorP(0xff,0xff); // Max speed
break;
case 'x'://Move Backward
DriveMotorP(0x00,0x00);
; // Max speed
break;
case 's'://Stop
DriveMotorP(0x7f,0x7f);
break;
}
}
}
}
程序功能:串口输入"w","x","s",电机会有相应的动作。
串口端口的使用
RoMeo有两个串口Serial1和Serial。Serial1通过数字端口的Pin 0(RX)和Pin 1(TX)来对外通信。Serial而只是与USB通信。下面我们会针对这两个串口来做几个简单的实验,来体会一下它们之间的区别。
程序的下载正是使用的串口Serial1,只不过被USB芯片将TTL串口转换成了USB接口而已。串口是个很常用的通讯端口,也是RoMeo最基本的通讯口,使用时需要注意端口电平和设置波特率。代码中的波特率需要与串口监视器的波特率设置一致。
Arduino语言提供了几个函数[https://wiki.dfrobot.com.cn/Serial.available__(Serial.available)]、[https://wiki.dfrobot.com.cn/Serial.read__(Serial.read)]、[https://wiki.dfrobot.com.cn/Serial.print__(Serial.print)]、[https://wiki.dfrobot.com.cn/Serial.write__(Serial.write)],实现串口的通讯操作,下面做个串口输入通讯的实验,通过USB接口和RoMeo串口通讯,将USB电缆插到USB口上并与电脑连接。
A. 串口监视器的串口输入
演示代码:
int ledPin = 13;
int val;
void setup() {
pinMode(ledPin, OUTPUT); //定义 L灯端口为输出
Serial.begin(9600); //初始化串口并设置波特率为9600
}
void loop() {
val = Serial.read(); //读串口数据
if (-1 != val) { //判断数据有效
if ('A' == val) { //判断数据 为 A
digitalWrite(ledPin, HIGH); //L灯亮
delay(500);
digitalWrite(ledPin, LOW); //L灯灭
}
}
}
程序功能:使用IDE的串口助手发送字母“A”,RoMeo接收到后判断是不是“A”,如果是则让L灯闪烁一下, 否则不进行任何操作。
B. 串口监视器的串口输出
演示代码:
void setup() {
Serial.begin(9600); //初始化串口并设置波特率为9600
}
void loop() {
Serial.print("Hello!"); //串口向外发送字符串
Serial.println(" DFRobot"); //串口向外发送字符串 ,并带回车
delay(1000); //延时
}
程序功能: RoMeo从串口间隙性的发送字符串“Hello! DFRobot”。下面用IDE的串口助手观察结果。注意:代码的波特率与串口波特率保持一致。
C. RoMeo串口无线数传(APC220)实验
RoMeo兼容APC220无线数传模块和DF-BluetoothV2蓝牙模块。
APC220无线数传模块的通信信道是半双工的,可以完成一点对一点,一点对多点的通讯。这二种方式首先需要设1个主站,其余为从站,所有站点都必须设置一个唯一的地址。通信的协调由主站控制,主站采用带地址码的数据帧发送数据或命令,所有从站全部都接收,并将接收到的地址码与本机地址码比较,地址不同则将数据丢掉,不做响应,若地址码相同,则将接收的数据传送出去。以上过程可以通过软件设置RFID Enable 自动实现,也可有用户通过上层协议完成。当设置RFID Enable时,APC220模块将自动比较所接收数据是否地址匹配,但不会自动应答,若地址匹配模块会将地址、数据传给终端设备。另外,组网必须保证在任何一个瞬间,同一个频点通信网中只有一个电台处于发送状态,以免相互干扰。APC220可以设置多个频道,所以可以在一个区域实现多个网络并存。
详细教程可见:APC220无线数传模块配置教程
把APC220,直接插在RoMeo上,而另一块APC220通过USE to Serial模块直接插在PC端的USB口即可。
此时,在设备管理器会显示两个串口。给Romeo下载下段代码。
注意:APC220模块会占用串口端口,在下载程序的时候,请拔下APC220模块。
演示代码:
void setup(){
Serial1.begin(9600);
Serial.begin(9600);
}
void loop(){
Serial1.print("Hello,DFRobot!");
Serial1.println();
Serial.print("Hello,DFRobot!");
Serial.println();
delay(500);
}
程序功能:RoMeo从串口间隙性的发送字符串“Hello,DFRobot!”,经过APC220发射到空中,被接到电脑上的APC220接收到。下面用Arduino IDE 串口助手观察结果。PC端的APC220在电脑中显示为COM2,串口助手设置串口号为APC220的COM2,波特率和程序设置的一致为9600,其他默认即可,打开两个串口就可以看见结果。如下图所示,Romeo端发送,PC端接收。
D. RoMeo串口蓝牙模块(DF-BluetoothV3)实验
RoMeo集成了一个TTL电平的无线数传接口,兼容APC220无线数传模块和DF-BluetoothV3蓝牙模块。蓝牙模块能做各种应用,,可与各种蓝牙适配器、蓝牙手机配对使用。拨码开关可设置模块状态,LED Off可关闭LINK灯进入省电模式,AT Mode可使模块进入AT指令模式,通过AT指令可以修改波特率和主从机模式,将2个模块分别设置为主模块和从模块后,2个模块就可以自由配对进行数据传输,也非常适用于2个单片机之间的数据通讯。
详细教程可见:DF-BluetoothV3蓝牙串口模块教程
使用的时候同样注意Serial与Serial1在使用上的区别。
E. RoMeo串口XBee模块实验
Xbee模块是采用ZigBee技术的无线模块,通过串口与单片机等设备间进行通信,能够非常快速地实现将设备接入到ZigBee网络的目的。这是一款2.4G的XBee无线模块 。此模块采用802.15.4协议栈,通过串口与单片机等设备间进行通信,支持点对点通信以及点对多点网络。此模块的天线为导线天线,简单,方便。
详细教程可见:[XBee模块配置教程](https://wiki.dfrobot.com.cn/SKU_TEL0014_XBee_1mW_Zigbee%E6%97%A0%E7%BA%BF%E6%95%B0%E4%BC%A0%E6%A8%A1%E5%9D%97_100%E7%B1%B3%E4%BC%A0%E8%BE%93
演示代码:(发送端)
void setup(){
Serial1.begin(9600);
Serial.begin(9600);
}
void loop(){
Serial1.print("Hello,DFRobot!");
Serial1.println();
Serial.print("Hello,DFRobot!");
Serial.println();
delay(500);
}
演示代码:(接收端)
void setup(){
Serial.begin(9600); //初始化串口并设置波特率为9600
Serial1.begin(9600);
}
void loop(){
char val;
val = Serial1.read(); //读串口
if(val!=-1){
Serial.print(val); //将收到是数据再通过串口发送出去
}
}
程序功能:两块XBee直接通信,一块XBee发送数据,而另一块接收数据,可以从串口中,分别读到发送而接收一致。
模拟口的使用
A. 五个按键实验
RoMeo集成了5个按键S1~S5,通过模拟端口0控制。使用模拟按键需要时,如下图中所示,把开关拨到"ON"状态。
演示代码1:
int potPin = 0; //定义输入模拟口0
int ledPin = 13; //定义LED 为Pin13
int val = 0;
void setup() {
pinMode(ledPin, OUTPUT); //设置LED Pin13为输出
}
void loop() {
val = analogRead(potPin); //读模拟口
digitalWrite(ledPin, HIGH); //点亮LED
delay(val); //延时
digitalWrite(ledPin, LOW); //关闭LED
delay(val); //延时
}
程序功能:分别按住S1到S5键,会看见LED闪烁的频率不同,这因为按键接入电阻不同,分到模拟口的电压就不同,AD采集到的数据也就不同。
演示代码2:
int adc_key_val[5] ={50, 200, 400, 600, 800 }; //定义一个数组 存放模拟键值比较值
int NUM_KEYS = 5;
int adc_key_in;
int key=-1;
int oldkey=-1;
void setup(){
pinMode(13, OUTPUT); //LED13用来测试是否有按键按下
Serial.begin(9600); //波特率为9600bps
}
void loop(){
adc_key_in = analogRead(0); // 读取模拟口0的值
digitalWrite(13,LOW);
key = get_key(adc_key_in); //调用判断按键程序
if (key != oldkey){ // 判断是否有新键按下
delay(50); // 延时去抖
adc_key_in = analogRead(0); // 再次读模拟口0
key = get_key(adc_key_in); //调用判断按键程序
if (key != oldkey) {
oldkey = key;
if (key >=0){
digitalWrite(13,HIGH);
switch(key){ // 确认有键按下,就通过串口发送数组相应字符
case 0:Serial.println("S1 OK");
break;
case 1:Serial.println("S2 OK");
break;
case 2:Serial.println("S3 OK");
break;
case 3:Serial.println("S4 OK");
break;
case 4:Serial.println("S5 OK");
break;
}
}
}
}
delay(100);
}
// 该函数判断是哪个按键被按下,返回该按键序号
int get_key(unsigned int input){
int k;
for (k = 0; k < NUM_KEYS; k++){
if (input < adc_key_val[k]){ //循环对比比较值,判断是否有键按下,有返回键号
return k;
}
}
if (k >= NUM_KEYS)k = -1; // //没有键按下k =-1
return k;
}
程序功能:打开IDE串口助手,波特率选择9600,分别按下S1~S5,会看见IDE串口助手里显示按键对应的字符串。
B. 测距实验
Romeo有5过模拟口的扩展插针,扩展口针脚排列根据GP2D12红外距离传感器设计,所以可以直接连接使用。GP2D12是日本SHARP公司生产的红外距离传感器,测量距离20~150cm模拟输出,它的输出模拟量与距离成反比,这点需要注意。
演示代码:
int GP2D12 = 0; //定义输入模拟口0
int val = 0;
void setup() {
Serial.begin(19200); //初始化串口 并设置波特率为19200
}
void loop() {
val = analogRead(GP2D12); //读模拟口
if(val!=-1)
Serial.println(val); //从串口发送采集到的模拟数据
delay(100);
}
程序功能:打开IDE串口助手,波特率选择19200,将手放到GP2D12正上方不同的高度,会看见IDE串口助手里显示的数据变化。
C. I2C总线实验
RoMeo的模拟口2(SDA) 和 3(SCL) 具有I2C总线功能。我们设计时特意把I2C总线引出,做了3组插针,方便连接I2C器件。下个实验实现两块控制板之间通信。
I2C总线定义I2C(‘intel’ -Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。在主从通信中,可以有多个I2C总线器件同时接到I2C总线上,通过地址来识别通信对象。
I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中,I2C总线上并接的每一模块电路既可以是主控器(或被控器),又可以是发送器(或接收器),这取决于它所要完成的功能。
这里我们让其中一块Romeo作为主机,而另外一块作为从机。
该实验来自宜昌城老张,原地址
代码涉及的函数可以查阅,Arduino官网 Wire库
演示代码:(主机部分)
#include <Wire.h> //声明I2C库文件
#define LED 13
byte x = 0; //变量x决定LED的亮灭
void setup(){
Wire.begin(); // 加入 i2c 总线,作为主机
pinMode(LED,OUTPUT); //设置数字端口13为输出
}
void loop(){
Wire.beginTransmission(4); //发送数据到设备号为4的从机
Wire.write("light is "); // 发送字符串"light is "
Wire.write(x); // 发送变量x中的一个字节
Wire.endTransmission(); // 停止发送
x++;//变量x加1
if(x==2)//如果变量x的值为2,则把x值转为0
x=0;
delay(1000);//延时1s
Wire.requestFrom(4, 1); //通知4号从机上传1个字节
while(Wire.available()>0) { // 当主机接收到从机数据时
byte c = Wire.read(); //接收一个字节赋值给c
//判断c为1,则点亮LED,否则熄灭LED。
if(c==1){
digitalWrite(LED,HIGH);
}else{
digitalWrite(LED,LOW);
}
}
delay(1000);//延时1s
}
演示代码:(从机部分)
#include <Wire.h>//声明I2C库文件
int x;//变量x值决定主机的LED是否点亮
void setup(){
Wire.begin(4); // 加入 i2c 总线,设置从机地址为 #4
Wire.onReceive(receiveEvent); //注册接收到主机字符的事件
Wire.onRequest(requestEvent); // 注册主机通知从机上传数据的事件
Serial.begin(9600); //设置串口波特率
}
void loop(){
delay(100);//延时
}
// 当从机接收到主机字符,执行该事件
void receiveEvent(int howMany){
while(Wire.available()>1){ // 循环执行,直到数据包只剩下最后一个字符
char c = Wire.read(); // 作为字符接收字节
Serial.print(c); // 把字符打印到串口监视器中
}
//接收主机发送的数据包中的最后一个字节
x = Wire.read(); // 作为整数接收字节
Serial.println(x); //把整数打印到串口监视器中,并回车
}
//当主机通知从机上传数据,执行该事件
void requestEvent(){
//把接收主机发送的数据包中的最后一个字节再上传给主机
Wire.write( x); // 响应主机的通知,向主机发送一个字节数据
}
程序功能:主机向从机循环发送字符串"light is "和字节x,x为1或0,从机接收后,把数据显示在它的串口监视器中,如下图。然后当主机通知从机向它上传数据时,会把x值再上传回主机,然后赋值给变量c。当主机程序判断c为1,则点亮主机数字端口13相连的LED,否则熄灭LED。
疑难解答
更多问题及有趣的应用,可以访问论坛进行查阅或发帖!