arduino双机通信 (解决引脚不够用)
作用
实现将一个 arduino 中的多个 String 类型变量准确地传到另一个 arduino 中对应的多个 String 类型变量
中。
接线图

注意 TX 接另一个arduino的 RX !可以忽略图中的 LED )
代码
1 号机器
float data2=56.73;//要发送的数据
float data3=104.27;//要发送的数据
float data5=0;//要接收的数据
float data6=0;//要接收的数据
{
}
{
transmit();//发送数据
Serial.println(data4);//显示接收到的数据
Serial.println(data5);//显示接收到的数据
Serial.println(data6);//显示接收到的数据
Serial.print(data1);
Serial.print('b');
Serial.print(data2);
Serial.print('c');
Serial.print(data3);
Serial.println('#');
delay(100);
//发送"a数据1b数据2c数据3#"的字符串必须停顿100毫秒
String buf1="";//存放解析出的第一个字符串
String buf2="";//存放解析出的第二个字符串
String buf3="";//存放解析出的第三个字符串
{
comdata += char(Serial.read());
delay(2);//一个一个接收数据,每次停顿2毫秒
}
if (comdata.length() > 0)//如果有数据收到
{
int ja,jb,jc,jd;//存放收到的字符串中标志字母的下标
if(comdata[i]=='b'){jb=i;}
if(comdata[i]=='c'){jc=i;}
if(comdata[i]=='#'){jd=i;}
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();
float data5=49.18;//要发送的数据
float data6=347.59;//要发送的数据
float data2=0;//要接收的数据
float data3=0;//要接收的数据
{
Serial.begin(9600);//两机的波特率要求相同
}
{
transmit();//发送数据
receive();//接收数据
Serial.println(data1);//显示接收到的数据
Serial.println(data2);//显示接收到的数据
Serial.println(data3);//显示接收到的数据
}
String buf1="";//存放解析出的第一个字符串
String buf2="";//存放解析出的第二个字符串
String buf3="";//存放解析出的第三个字符串
{
comdata += char(Serial.read());
delay(2);//一个一个接收数据,每次停顿2毫秒
}
if (comdata.length() > 0)//如果有数据收到
{
int ja,jb,jc,jd;//存放收到的字符串中标志字母的下标
if(comdata[i]=='b'){jb=i;}
if(comdata[i]=='c'){jc=i;}
if(comdata[i]=='#'){jd=i;}
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 ic[20];
Serial.begin(9600);
}
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双机通信 (解决引脚不够用)的更多相关文章
- Proteus仿真—51单片机实现AC信号测频、显示、双机通信
文章目录 一.原理图部分 二.源码部分 单片机1 单片机2 在Proteus仿真软件里面使用STC89C52实现指定频率的AC信号的测频.显示.双机通信. 一.原理图部分 整体的电路图如示: DC-A ...
- Linux can双机通信(2440+MCP2515 && 51+SJA1000)
2012-01-12 22:43:24 上图: 自收发成功完成后,那么双机通信就比较容易了.关键就是CAN波特率.ID标识.滤波设置正确即可双机通信了.
- 学习7__STM32--SPI外设之双机通信---
<target> # 整透stm32之spi双机通信(包括双机同为stm32,stm32& others) <概念> # 双机通信(全双工) 在主机的MOSI管脚输出1 ...
- Arduino 端口通信实例
////////////////////////////////////////////////////////// //Arduino 1.0.x-----Arduino Uno----COM9 / ...
- esp8266(1) 手机+Arduino+esp8266通信
ESP8266 Android与Arduino通信 功能描述: 1 Arduino上电,它通过软串口(Arduino的 2号和3号脚)发送命令,配置espson8266为 AP模式,wifi名 DDD ...
- 两个arduino的通信
两个arduino板进行串口通讯实验 (-- ::)转载▼ 标签: 杂谈 购得两块arduino板子,想试试其通讯能力,于是写下如是程序,居然没有打麻烦,奇怪! 接线:两个板子各用电池供电,将两块板子 ...
- STM32 IIC双机通信—— HAL库硬件IIC版
参考传送门 关于IIC的原理这里我就不多说了,网上有很多很好的解析,如果要看我个人对IIC的理解的话,可以点击查看,这里主要讲一下怎样利用STM32CubeMx实现IIC的通讯,经过个人实践,感觉HA ...
- Arduino SPI驱动7引脚0.96寸OLED SSD1306 调试笔记
https://www.geek-workshop.com/thread-37818-1-1.html 2.下载最新库https://learn.adafruit.com/monoc ... ibra ...
- win10上使用php与python实现与arduino串口通信
注意: php 需要php7,安装及开启php_dio.dll com口按照实际的进行设置,如果不知道可以打开arduino编辑器进行查看 可以与用户实现命令行交互,但是效率过慢,不清楚如何优化,使用 ...
随机推荐
- Jquery设置完颜色后hover不生效的解决办法
执行完代码后发现写在样式表中的hover效果失效,改了好几遍差点重新写函数,后来发现很简单,是优先级的问题,css()中的内容覆盖了之前的样式 只需要在样式后写!important即可解决! .fil ...
- JDBC--DBUtils的使用
1.commons-dbutils是Apache组织提供的一个开源JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性 ...
- Day3-I-Squares POJ2002
A square is a 4-sided polygon whose sides have equal length and adjacent sides form 90-degree angl ...
- swoole之创建子进程
一.代码 <?php /** * 进程就是正在运行的程序的一个实例 * 比如,在某个终端中执行一个PHP脚本,可以认为就是开启了一个进程,会有对应的进程id(pid) * * swoole进程与 ...
- vue 路由过渡效果(1)
1.html界面 <transition name="slide"> <router-view></router-view> </tran ...
- P1090 危险品装箱
1090 危险品装箱 (25分) 集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题给定一张不相容物品的清单,需要你 ...
- java内部类 2.19
1.定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( ); //外部类HelloWorld publi ...
- Mongoose多表查询
文章来自 两个表关联查询aggregate 多个表关联查询aggregate populate多表关联查询 多表查询的两个方式 一个是aggregate聚合 一个是populate Schema的外表 ...
- String+、intern()、字符串常量池
字符串连接符 "+"及字符串常量池实验.字符串final属性 结果预览 public class StrTest{ public static void main(String[] ...
- leetcode1042 Flower Planting With No Adjacent
""" You have N gardens, labelled 1 to N. In each garden, you want to plant one of 4 t ...