作用

实现将一个 arduino 中的多个 String 类型变量准确地传到另一个 arduino 中对应的多个 String 类型变量
中。

接线图

注意 TX 接另一个arduino的 RX !可以忽略图中的 LED )

代码

1 号机器

 float data1=18.98;//要发送的数据
 float data2=56.73;//要发送的数据
 float data3=104.27;//要发送的数据
 float data4=0;//要接收的数据
 float data5=0;//要接收的数据
 float data6=0;//要接收的数据
void setup()
{
  Serial.begin(9600);//两机的波特率要求相同
}
void loop()
{
 transmit();//发送数据
 receive();//接收数据
     Serial.println(data4);//显示接收到的数据
      Serial.println(data5);//显示接收到的数据
      Serial.println(data6);//显示接收到的数据
}
void transmit(){
        Serial.print('a');
        Serial.print(data1);
        Serial.print('b');
        Serial.print(data2);
        Serial.print('c');
        Serial.print(data3);
        Serial.println('#');
        delay(100);
        //发送"a数据1b数据2c数据3#"的字符串必须停顿100毫秒
  }
void receive(){
  String comdata = "";//存放接收到的原始字符串
  String buf1="";//存放解析出的第一个字符串
  String buf2="";//存放解析出的第二个字符串
  String buf3="";//存放解析出的第三个字符串
    while (Serial.available() > 0) 
    {
        comdata += char(Serial.read());
        delay(2);//一个一个接收数据,每次停顿2毫秒
    }
    if (comdata.length() > 0)//如果有数据收到
    {
      int ja,jb,jc,jd;//存放收到的字符串中标志字母的下标
for(int i = 0; i < comdata.length(); i++){
  if(comdata[i]=='a'){ja=i;}
  if(comdata[i]=='b'){jb=i;}
  if(comdata[i]=='c'){jc=i;}
  if(comdata[i]=='#'){jd=i;}
  }//找到约定标志字母的下标
 for(int k=ja+1;k<jb;k++){
  buf1+=char(comdata[k]);
  }
  for(int k=jb+1;k<jc;k++){
  buf2+=char(comdata[k]);
  }
  for(int k=jc+1;k<jd;k++)
{
  buf3+=char(comdata[k]);
  }//根据约定字母所在的位置依次解析出各个数据
         data4=buf1.toFloat();//将解析得到的字符串转换为float类型
         data5=buf2.toFloat();
         data6=buf3.toFloat();
    }
2 号机器
float data4=22.23;//要发送的数据
 float data5=49.18;//要发送的数据
 float data6=347.59;//要发送的数据
float data1=0;//要接收的数据
float data2=0;//要接收的数据
float data3=0;//要接收的数据
void setup()
{
    Serial.begin(9600);//两机的波特率要求相同
}
void loop()
{
   transmit();//发送数据
   receive();//接收数据
      Serial.println(data1);//显示接收到的数据
      Serial.println(data2);//显示接收到的数据
      Serial.println(data3);//显示接收到的数据
}
 
void receive(){
  String comdata = "";//存放接收到的原始字符串
  String buf1="";//存放解析出的第一个字符串
  String buf2="";//存放解析出的第二个字符串
  String buf3="";//存放解析出的第三个字符串
    while (Serial.available() > 0) 
    {
        comdata += char(Serial.read());
        delay(2);//一个一个接收数据,每次停顿2毫秒
    }
    if (comdata.length() > 0)//如果有数据收到
    {
      int ja,jb,jc,jd;//存放收到的字符串中标志字母的下标
for(int i = 0; i < comdata.length(); i++){
  if(comdata[i]=='a'){ja=i;}
  if(comdata[i]=='b'){jb=i;}
  if(comdata[i]=='c'){jc=i;}
  if(comdata[i]=='#'){jd=i;}
  }//找到约定标志字母的下标
 for(int k=ja+1;k<jb;k++){
  buf1+=char(comdata[k]);
  }
  for(int k=jb+1;k<jc;k++){
  buf2+=char(comdata[k]);
  }
  for(int k=jc+1;k<jd;k++){
  buf3+=char(comdata[k]);
  }//根据约定字母所在的位置依次解析出各个数据
         data1=buf1.toFloat();//将解析得到的字符串转换为float类型
         data2=buf2.toFloat();
         data3=buf3.toFloat();
    }
  }
void transmit(){
        Serial.print('a');
        Serial.print(data4);
        Serial.print('b');
        Serial.print(data5);
        Serial.print('c');
        Serial.print(data6);
        Serial.println('#');
        delay(100);
//发送"a数据1b数据2c数据3#"的字符串必须停顿100毫秒
  }

类型转换

由于以上双机通信传的是String类型,真正使用时肯定需要类型转换,所以特地收集了以下的转码大合集,总有几款适合你。

char fc[50];
char ic[20];
void setup() {
  Serial.begin(9600);
}
void loop() {
String s="123.43212";//从一个String开始
float f=s.toFloat();//String转float
int i=s.toInt();//String转int
dtostrf(f,1,5,fc);//将float转为char的数组,其中第三个传入值(5)是保留的位数(5位)
snprintf (ic, 75, "%d", i);//将int转为char的数组.
//以下为串口打印验证
Serial.println(f,5);//打印保留float变量后五位的数
delay(1000);
Serial.println(i);//打印int变量
delay(1000);
Serial.println(fc);//打印float转成的char的数组
delay(1000);
Serial.println(ic);//打印int转成的char的数组
delay(1000);
}
  }

arduino双机通信 (解决引脚不够用)的更多相关文章

  1. Proteus仿真—51单片机实现AC信号测频、显示、双机通信

    文章目录 一.原理图部分 二.源码部分 单片机1 单片机2 在Proteus仿真软件里面使用STC89C52实现指定频率的AC信号的测频.显示.双机通信. 一.原理图部分 整体的电路图如示: DC-A ...

  2. Linux can双机通信(2440+MCP2515 && 51+SJA1000)

    2012-01-12 22:43:24 上图: 自收发成功完成后,那么双机通信就比较容易了.关键就是CAN波特率.ID标识.滤波设置正确即可双机通信了.

  3. 学习7__STM32--SPI外设之双机通信---

    <target> # 整透stm32之spi双机通信(包括双机同为stm32,stm32& others) <概念> # 双机通信(全双工) 在主机的MOSI管脚输出1 ...

  4. Arduino 端口通信实例

    ////////////////////////////////////////////////////////// //Arduino 1.0.x-----Arduino Uno----COM9 / ...

  5. esp8266(1) 手机+Arduino+esp8266通信

    ESP8266 Android与Arduino通信 功能描述: 1 Arduino上电,它通过软串口(Arduino的 2号和3号脚)发送命令,配置espson8266为 AP模式,wifi名 DDD ...

  6. 两个arduino的通信

    两个arduino板进行串口通讯实验 (-- ::)转载▼ 标签: 杂谈 购得两块arduino板子,想试试其通讯能力,于是写下如是程序,居然没有打麻烦,奇怪! 接线:两个板子各用电池供电,将两块板子 ...

  7. STM32 IIC双机通信—— HAL库硬件IIC版

    参考传送门 关于IIC的原理这里我就不多说了,网上有很多很好的解析,如果要看我个人对IIC的理解的话,可以点击查看,这里主要讲一下怎样利用STM32CubeMx实现IIC的通讯,经过个人实践,感觉HA ...

  8. Arduino SPI驱动7引脚0.96寸OLED SSD1306 调试笔记

    https://www.geek-workshop.com/thread-37818-1-1.html 2.下载最新库https://learn.adafruit.com/monoc ... ibra ...

  9. win10上使用php与python实现与arduino串口通信

    注意: php 需要php7,安装及开启php_dio.dll com口按照实际的进行设置,如果不知道可以打开arduino编辑器进行查看 可以与用户实现命令行交互,但是效率过慢,不清楚如何优化,使用 ...

随机推荐

  1. 使用Linux命令修改数据库密码

    通过登录mysql系统,# mysql -uroot -pEnter password: [输入原来的密码]mysql>use mysql;mysql> update user set p ...

  2. 092、Java中String类之字符串内容比较

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  3. FTP大量数据(百万级数据)传输尝试

    接上篇<Java FTPClient 大量数据传输的问题(未解决)> 因为数据量过大 FTPClient获取文件列表信息会出现不稳定的问题,找了很多方法都没有解决. 网上找的这一篇文章 h ...

  4. 前端学习笔记系列一:13new Date()的参数

    前两天发现手机页面的倒计时在Android上正常显示,在iPhone却不能显示. 后来又发现在ff和ie里也不显示.(以前只在chrome里看过,显示正常). 后来同事改了new Date()里字符串 ...

  5. 单元测试框架TestNg使用总结

    工欲善其事,必先利其器 单元测试的重要性是不言而喻的.但如果没有好的单元测试工具,是无法激起开发人员的欲望. Testng便是利器之一.TestNG是基于Annotation的测试框架的先驱,他拥有通 ...

  6. redis缓存穿透,缓存击穿,缓存雪崩问题

    缓存穿透 缓存查询一般都是通过key去查找value,如果不存在对应的value,就要去数据库中查找.如果这个key对应的value是一定不存在的,并且对该key并发请求很大,就会对数据库产生很大的压 ...

  7. python+ selenium + webdriver的环境准备

    web自动化安装 1.安装最新的selenium pip install -U selenium 2.安装chrom浏览器和chromdriver的下载 http://chromedriver.sto ...

  8. 虚拟机安装安全狗apache服务的一些问题解决方式(11.5)

    首先本文鸣谢bonga的解答大部分问题=.= 由于本人比较懒所以还是喜欢问,不喜欢查啦 1.windows网站安全狗分为:IIS  和  APACHE  版本    我下载的是APACHE版本 (因为 ...

  9. 我的第一个爬虫【python selenium】

    去年写的一个小功能,一年过得好快,好快! 目的:爬取京东商品详情页面的内容(商品名称.价格.评价数量)后存储到xls文档中,方便商家分析自己商品的动态. 软件:chrome(windows).chro ...

  10. Java开发程序员必须要学会的linux命令总结

    查找文件 find / -name filename.txt 根据名称查找/目录下的filename.txt文件. find . -name "*.xml" 递归查找所有的xml文 ...