极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 22496|回复: 12

关于2台arduino 主机通过i2c接收从机连接多个压力FSR406信号的问题

[复制链接]
发表于 2014-1-20 05:46:42 | 显示全部楼层 |阅读模式
我用了2块arduino 一块做主机 一块做从机,从机上连接了6个FSR406传感器,想通过i2c方式传给主机
但主机接受到的信号只有从机里6个FSR406中一个,如何更改能达到全部都接收,请帮帮忙看看,现在我把主机和从机的程序都写上。
连线大致是这个样子


这个是主机的:
#include <Wire.h>
char c[7];

void setup()
{
  Serial.begin(9600);
  Wire.begin();
  delay(1000);
}

void loop()
{
  Wire.requestFrom(2, 7);
  while(Wire.available())
  {
    for(int i=0;i<7;i++){
      c = Wire.read();
    }
    c[7] = '\0';
    Serial.println(c);
  }
  delay(500);
}
这个是从机的
#include <Wire.h>
int i =0;
int a =0;
int b =0;
int c =0;
int d =0;
int e =0;
int f =0;

void setup()
{
  Serial.begin(9600);
  Wire.begin(2);
  Wire.onRequest(requestEvent);
  pinMode(A0,INPUT);
  pinMode(A1,INPUT);
  pinMode(2,INPUT);
  pinMode(3,INPUT);
  pinMode(4,INPUT);
  pinMode(5,INPUT);
}

void loop()
{
  delay(100);
}

void requestEvent()
{
  a =  analogRead(A0);
  Serial.print(A0);
  Serial.print(",");
  if (a > 500){
    Wire.write("S1_A0=0");
  }
  else{
    Wire.write("S1_A0=1");
  }
  b =  analogRead(A1);
  Serial.print(A1);
  Serial.print(",");
  if (b > 500){
    Wire.write("S1_A1=0");
  }
  else{
    Wire.write("S1_A1=1");
  }
  c = digitalRead(2);
  Serial.print(c);
  Serial.print(",");
  if (c == 1){
    Wire.write("S1_D2=0");
  }
  else{
    Wire.write("S1_D2=1");
  }
  d = digitalRead(3);
  Serial.print(d);   
  Serial.println(",");
  if (d == 1){
    Wire.write("S1_D3=0");
  }
  else{
    Wire.write("S1_D3=1");
    e = digitalRead(4);
    Serial.print(d);
    Serial.println(",");
    if (e == 1){
      Wire.write("S1_D4=0");
    }
    else{
      Wire.write("S1_D4=1");
    }
    f = digitalRead(5);
    Serial.print(d);
    Serial.println(",");
    if (f == 1){
      Wire.write("S1_D5=0");
    }
    else{
      Wire.write("S1_D5=1");
    }
  }
}




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

 楼主| 发表于 2014-1-20 19:00:35 | 显示全部楼层
难道真的是我写的程序的乱搞的吗
回复 支持 反对

使用道具 举报

发表于 2014-1-20 19:42:32 | 显示全部楼层
只想一个主机通过无线,控制多个从机,有哪种无线模块可以使用???
回复 支持 反对

使用道具 举报

发表于 2014-1-21 19:23:01 | 显示全部楼层
把delay(500)拿掉试试?
你主机停止的时候,从机会继续发送数据。
delay导致后面的数据丢失?
回复 支持 反对

使用道具 举报

发表于 2014-1-21 19:25:11 | 显示全部楼层
学慧放弃 发表于 2014-1-20 19:42
只想一个主机通过无线,控制多个从机,有哪种无线模块可以使用???

nrf24l01可以通过更换地址来对不同从机进行操作。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-22 07:38:17 | 显示全部楼层
[email protected] 发表于 2014-1-21 19:23
把delay(500)拿掉试试?
你主机停止的时候,从机会继续发送数据。
delay导致后面的数据丢失?

好的 我去试试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-22 07:49:42 | 显示全部楼层
学慧放弃 发表于 2014-1-20 19:42
只想一个主机通过无线,控制多个从机,有哪种无线模块可以使用???

我刚接触arduino没多久 无线还没怎么接触过
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-22 07:52:30 | 显示全部楼层
[email protected] 发表于 2014-1-21 19:23
把delay(500)拿掉试试?
你主机停止的时候,从机会继续发送数据。
delay导致后面的数据丢失?

master 那边的delay(500)拿掉后 试验结果还是那样 主机接收的数据只有最后的”S1_D5=0“
回复 支持 反对

使用道具 举报

发表于 2014-1-22 20:52:32 | 显示全部楼层
用的是那一版本的Arduino IDE?以下這段能成功編譯嗎?

char c[7];
......
......
  {
    for(int i=0;i<7;i++){
      c = Wire.read();
    }
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-25 16:01:58 | 显示全部楼层
eddiewwm 发表于 2014-1-22 20:52
用的是那一版本的Arduino IDE?以下這段能成功編譯嗎?

char c[7];

Arduino 1.0.5-r2

检测的时候没出现问题,显示的结果也和想的一样~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-1 15:42:08 | 显示全部楼层
问题已解决,谢谢各位
回复 支持 反对

使用道具 举报

发表于 2014-4-24 08:19:55 | 显示全部楼层
能用一个arduino测4个压力吗
回复 支持 反对

使用道具 举报

发表于 2014-7-13 14:55:32 | 显示全部楼层
baishan07 发表于 2014-2-1 15:42
问题已解决,谢谢各位

请楼主不要私藏,分享解决方法。让我等小白学习一下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-7 20:25 , Processed in 0.046176 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表