2017-02-23 10 views
0

통해 4 개의 전위차계 값을 보내려고합니다. i2c는 다른 arduino에서 가상 와이어를 통해 값을받은 후 내 설정은 3 개의 arduinos로 구성됩니다. 첫 번째 arduino는 송신기와 4 개의 전위차계에 연결되어 있습니다. 가상 와이어를 통해 tx. 두 번째 arduino 수신기로 구성되어 있습니다. 세 번째 arduino는 4 개의 서보로 구성됩니다. 두 번째 및 세 번째 arduino는 통해 연결됩니다. i2c 버스. 4 개 모두 potrentiometer 값을 보낼 수 없습니다. 그러나 나는 potentiometer의 단일 값을 보낼 수 있습니다. 여기 내 스케치는 입니다.i2c 버스를 통해 4 개의 전위차계 값을 보낼 수 없습니다.

#include <VirtualWire.h>                  
    #include <Wire.h>                    

    int Sensor1Data;                    // VARIABLE WHERE THE ANALOG VALUE OF POT 1 GOT STORED BY THE TX 
    int Sensor2Data;                    // VARIABLE WHERE THE ANALOG VALUE OF POT 2 GOT STORED BY THE TX 
    int Sensor3Data;                    // VARIABLE WHERE THE ANALOG VALUE OF POT 3 GOT STORED BY THE TX 
    int Sensor4Data;                    // VARIABLE WHERE THE ANALOG VALUE OF POT 4 GOT STORED BY THE TX 
    int data[4]; 

    char StringReceived[22]; 

    void setup() 
    { 

    Wire.begin();                      // START I2C (WIRE.h) 
    vw_setup(6000);                   // BAUDERATE FOR VIRTUALWIRE 
    vw_set_rx_pin(11);                  // DEFINE PIN FOR VIRTUALWIRE 
    vw_rx_start();                   // START VIRTUALWIRE           
    } 

    void loop() 
    { 

    uint8_t buf[VW_MAX_MESSAGE_LEN]; 
    uint8_t buflen = VW_MAX_MESSAGE_LEN; 

    if (vw_get_message(buf, &buflen)) {              // GET THE DATA 

    int i; 
    for (i = 0; i < buflen; i++) 
    {              // CHECKSUM OK ? GET MESSAGE   
     StringReceived[i] = char(buf[i]);             // FILL THE ARRAY 
    } 
    sscanf(StringReceived, "%d,%d,%d,%d,%d,%d",&Sensor1Data, &Sensor2Data,&Sensor3Data,&Sensor4Data); // Converts a string to an array 

    Sensor1Data = map(Sensor1Data, 0, 1023, 0, 180);             // MAPS THE 8BIT SERVODATA TO SERVOMIN/MX 
    Sensor2Data = map(Sensor2Data, 0, 1023, 26, 160);             // MAPS THE 8BIT SERVODATA TO SERVOMIN/MX 
    Sensor3Data = map(Sensor3Data, 0, 1023, 26, 160);             // MAPS THE 8BIT SERVODATA TO SERVOMIN/MX 
    Sensor4Data = map(Sensor4Data, 0, 1023, 26, 160); 
    data[0] = Sensor1Data; 
    data[1] = Sensor2Data; 
    data[2] = Sensor3Data; 
    data[3] = Sensor4Data;// MAPS THE 8BIT SERVODATA TO SERVOMIN/MX 

    Wire.beginTransmission(8);                  // OPENS AN I2C ON PIN 8 
    Wire.write(data,4); 
// SEND POT 1 VALUE TO I2C DEVICE 8 
    Wire.endTransmission();                   // END TRANSMISSION 

// SEND POT 1 VALUE TO I2C DEVICE 8 

    } 

     memset(StringReceived, 0, sizeof(StringReceived));             // RESET STRING RECEIVED 
}` 

이 스케치 당신은 TwoWire::write와 int 배열을 보낼 수 없습니다

 no matching function for call to 'TwoWire::write(int [4], int)' 

답변

2

을 보여주는 오류. 단일 바이트 또는 바이트 배열 만 허용합니다.

배열 값이 160보다 커서 배열을 바이트 배열로 변경할 수 있습니다.

변화 :

int data[4]; 

에 :

byte data[4];