说明:使用两块Arduino实现8路Sensor同时采集,并输出控制信号
写作目的主要是为了作为学习笔记
1、双机通讯连线图
2、HX711和Sensor的连线图
3、将8个Sensor的SCK全部接到receive板的D2引脚
4、8个DATA线分别接至receive板的D3-D10引脚
5、将8路继电器模组控制引脚接到Send板的D2-D9
6、Send板的D10和D11作为接受信号引脚
注意Sensor和Arduino进行共地
1、下载链接
链接:github链接.
2、将下载到的HX711 Master文件夹放入Arduino的libraries文件夹中并加载,所有需要用的函数,如偏差设定,系数设定等都在库文件里有定义,详细请查看库文件对于库函数的定义,当然也可以自己修改库函数,以方便实际使用需求
1、send板代码
#include
#include
HX711 hx1(3, 2);
HX711 hx2(4, 2);
HX711 hx3(5, 2);
HX711 hx4(6, 2);
HX711 hx5(7, 2);
HX711 hx6(8, 2);
HX711 hx7(9, 2);
HX711 hx8(10, 2);
double c1, c2, rs;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
hx1.set_offset(121100);//设置偏移量
hx2.set_offset(121100);
hx3.set_offset(121100);
hx4.set_offset(121100);
hx5.set_offset(121100);
hx6.set_offset(121100);
hx7.set_offset(121100);
hx8.set_offset(121100);
hx1.set_scale(2214);//设置修正系数
hx2.set_scale(2214);
hx3.set_scale(2214);
hx4.set_scale(2214);
hx5.set_scale(2214);
hx6.set_scale(2214);
hx7.set_scale(2214);
hx8.set_scale(2214);
}
void loop() {
// put your main code here, to run repeatedly:
double s1 = hx1.get_units(5); //读取5次并计算平均值
double s2 = hx2.get_units(5);
double s3 = hx3.get_units(5);
double s4 = hx4.get_units(5);
double s5 = hx5.get_units(5);
double s6 = hx6.get_units(5);
double s7 = hx7.get_units(5);
double s8 = hx8.get_units(5);
c1=s1+s2+s3+s4;
c2=s5+s6+s7+s8;
rs=c1-c2;
transmit();//发送经过修正后的数据
}
void transmit(){
Serial.print('a');
Serial.print(c1);
Serial.print('b');
Serial.print(c2);
Serial.print('c');
Serial.print(rs);
Serial.println('#');
delay(100);
}
发送字符中的a,b,c,#是作为标志符,以作为后续receive函数对接收到的数据进行分割处理
2、receive板代码
#include
double c1, c2, rs;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
receive();//接收到Send板上发出的数据并解析为double类型
Serial.println(c1);
Serial.println(c2);
Serial.println(rs);
Serial.println();
}
void receive() {
String comdata = "";
String buf1 = "";
String buf2 = "";
String buf3 = "";
while (Serial.available() > 0)
{
comdata += char(Serial.read());
delay(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]);
}
c1 = buf1.toDouble();
c2 = buf2.toDouble();
rs = buf3.toDouble();
}//分割字符并转换为需要的数据类型
}
数据的读取和双机通讯功能实现后便可以利用,接收到的数据进行一些其他的控制代码书写