一直想做无线传感器,通过蓝牙来接收数据,无奈因为arduino接收串口数据的一些问题,一直搁到现在。因为学校里给学生开了选修课,所以手边有一些nano和mega可以使用,所以就做了用两个nano加上两个蓝牙模块来发射数据,用mega加两个蓝牙模块来接收数据。因为mega可以同时使用4路串口,所以考虑用mega来作为主控机,用来接收来自传感器的数据,每个传感器加一个nano和蓝牙来无线发射数据。

因为是测试,所以在nano中写了一个简单的发射信号的语句。以下四nano中的程序:
————————————————我是分界线——————————————————————
int i=1;
 void setup() { 
   Serial.begin(9600);   }
   void loop(){
          Serial.print(i);
        Serial.print("$");
        delay(50);
        i++;        
     }
————————————————我是分界线——————————————————————
以下是mega中的程序:
——————————————————我是分界线————————————————————————
String comdata = "";
 String shuju="";
 String shuju2="";
 int i;
 void setup()
  {
      Serial.begin(9600);
      Serial1.begin(9600);
      Serial2.begin(9600);
  }
void loop()
  {
      while (Serial1.available() > 0) 
      {
          shuju += char(Serial1.read());
          delay(2);
      }
      while (Serial2.available() > 0)
      {
        shuju2 +=char(Serial2.read());
        delay(2);
      }
      if (shuju.length() > 0)
      {
          i=shuju.indexOf("$");
          if(i!=-1){
          comdata=shuju.substring(0,i);
          Serial.print("#1=");       
          Serial.print(comdata);
          Serial.println("$");
          shuju=shuju.substring(i+1,shuju.length());
          comdata = "";
          i=0;
          }
      }
        if (shuju2.length() > 0)
      {
          i=shuju2.indexOf("$");
          if(i!=-1){
          comdata=shuju2.substring(0,i);
          Serial.print("#2=");
           Serial.print(comdata);
           Serial.println("$");
          shuju2=shuju2.substring(i+1,shuju2.length());
          comdata = "";
          i=0;
          }    } }
——————————————我是分界线————————————————————
上篇忘记介绍蓝牙模块的设置了,如果想要利用两路蓝牙来接收数据,那么这两路蓝牙必须设置不同的密码,以下是蓝牙模块的设置方法,可以将蓝牙模块接到串口模块上,然后里哟你串口软件发指令给蓝牙模块,以下设置是针对DFrobot的蓝牙模块的,它上面有开关可以设置接收命令状态。如果不是DFrobot的蓝牙模块,只要将KEY针脚接高电平就是可以接受命令状态。将两个蓝牙模块设置为主,然后设置不同的密码。再将另外两个设置为从,设置对应主蓝牙的密码。以下是具体的命令设置:
在发送栏中输入AT(不分大小写),然后点击发送,可看见模块返回OK,这表示AT指令通讯正常。当AT指令设置完毕后,将2号开关AT Mode拨到2端退出AT命令模式,重新上电后设置才生效。
1.AT指令集如下:
| 指令 | 响应 | 参数 | 
| AT | OK | 无 | 
 2.模块重启指令:
| 指令 | 响应 | 参数 | 
| AT+RESET | OK | 无 | 
 3.设置和查询模块连接模式:
当模块无法被适配器、主机连接时,需配置该参数,配置为AT+CMODE=1。
| 指令 | 响应 | 参数 | 
| AT+CMODE=< Param > | OK | Param:  0 —— 指定蓝牙地址连接模式 (指定蓝牙地址由绑定指令设置) 1 —— 任意蓝牙地址连接模式 (不受绑定指令设置地址的约束) 默认连接模式:0  | 
| AT+CMODE? | +CMODE: < Param > OK | 
  
4.设置和查询模块角色:
当模块无法被适配器、主机搜索到时,需配置该参数,配置为从角色。

 模块角色说明:
Slave(从角色) ——被动连接,可以和任意蓝牙适配器配对使用;
Master (主角色)——查询周围从设备,并主动发起连接,从而建立主、从蓝牙设备间的透明数据传输通道。
Slave-Loop(回环角色) ———被动连接,接收远程蓝牙主设备数据并将数据原样返回给远程蓝牙主设备;
5.设置和查询配对码:

6.设置和查询串口参数:

举例:设置串口波特率:115200,1位停止位,无校验
AT+ UART=115200,0,0\r\n
OK
AT+ UART?
+UART:115200,0,0
OK
注:在应用中,选择1位停止位,无校验。


















![[Java]Swing版坦克大战小游戏项目开发(1)——new出一个窗口](https://img-blog.csdnimg.cn/img_convert/0f3f5fedebb7e3efe70e426b97aa6e4a.png?x-oss-process=image/watermark,image_bG9nby9jc2RuXzEucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLGhfMTU1,g_se,x_0,y_0,t_100)
