2017-02-23 13 views
0

私は4つのポテンショメータ値を経由して送信しようとしています。 i2cを別のarduinoから仮想ワイヤを介して受け取った後。 私のセットアップは3つのarduinosで構成されています。 1番目のarduinoはトランスミッタと4つのポテンショメータに接続されています。仮想ワイヤーを介してtx。 2番目のarduinoは受信機で構成されています。 3番目のarduinoは4つのサーボで構成されています。 2番目と3番目のarduinoはvia経由で接続されています。 i2cバス。 4つのポテンショメータをすべて送信できません。しかし、私はポテンショメータの単一の値を送ることができます。 ここに私のスケッチです。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

を示しています。 1バイトまたはバイトの配列のみを受け入れます。

配列の値が160より大きくないため、配列をバイト配列に変更できます。

変更:

int data[4]; 

へ:

byte data[4]; 
関連する問題