• Как правильно объединить два скетча в ARDUINO?

    @Magiya Автор вопроса
    Дмитрий, спасибо
    В этом я и стопорюсь, не знаю как грамотно объединить эти два скетча в один, что бы он работал.
    Есть неудачная попытка:

    #include "Wire.h" // This library allows you to communicate with I2C devices.
    const int MPU_ADDR = 0x68; // I2C address of the MPU-6050. If AD0 pin is set to HIGH, the I2C address will be 0x69.
    int16_t accelerometer_x, accelerometer_y, accelerometer_z; // variables for accelerometer raw data
    int16_t gyro_x, gyro_y, gyro_z; // variables for gyro raw data
    //int16_t temperature; // variables for temperature data
    ///char tmp_str[7]; // temporary variable used in convert function
    char* convert_int16_to_str(int16_t i) { // converts int16 to string. Moreover, resulting strings will have the same length in the debug monitor.
    // sprintf(tmp_str, "%6d", i);
    // return tmp_str;

    ////////////// UDP /////////////////
    #include
    #include

    // Set WiFi credentials
    #define WIFI_SSID "OKISHEVA"
    #define WIFI_PASS "I0{806t68"
    #define UDP_PORT 1250

    // UDP
    WiFiUDP UDP;
    char packet[255];
    char reply[] = "Packet received!";
    char sensors[] = "0.005, 0.005, 0.000, 0.122, 0.765, 0.345";

    ///////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////

    void setup() {
    Serial.begin(115200);
    Wire.begin();
    Wire.beginTransmission(MPU_ADDR); // Begins a transmission to the I2C slave (GY-521 board)
    Wire.write(0x6B); // PWR_MGMT_1 register
    Wire.write(0); // set to zero (wakes up the MPU-6050)
    Wire.endTransmission(true);


    ////////////// UDP /////////////////
    // Begin WiFi
    WiFi.begin(WIFI_SSID, WIFI_PASS);

    // Connecting to WiFi...
    Serial.print("Connecting to ");
    Serial.print(WIFI_SSID);
    // Loop continuously while WiFi is not connected
    while (WiFi.status() != WL_CONNECTED)
    {
    delay(100);
    Serial.print(".");
    }

    // Connected to WiFi
    Serial.println();
    Serial.print("Connected! IP address: ");
    Serial.println(WiFi.localIP());

    // Begin listening to UDP port
    UDP.begin(UDP_PORT);
    Serial.print("Listening on UDP port ");
    Serial.println(UDP_PORT);


    }
    void loop() {
    Wire.beginTransmission(MPU_ADDR);
    Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H) [MPU-6000 and MPU-6050 Register Map and Descriptions Revision 4.2, p.40]
    Wire.endTransmission(false); // the parameter indicates that the Arduino will send a restart. As a result, the connection is kept active.
    Wire.requestFrom(MPU_ADDR, 7*2, true); // request a total of 7*2=14 registers


    // "Wire.read()<<8 | Wire.read();" means two registers are read and stored in the same variable
    accelerometer_x = Wire.read()<<8 | Wire.read(); // reading registers: 0x3B (ACCEL_XOUT_H) and 0x3C (ACCEL_XOUT_L)
    accelerometer_y = Wire.read()<<8 | Wire.read(); // reading registers: 0x3D (ACCEL_YOUT_H) and 0x3E (ACCEL_YOUT_L)
    accelerometer_z = Wire.read()<<8 | Wire.read(); // reading registers: 0x3F (ACCEL_ZOUT_H) and 0x40 (ACCEL_ZOUT_L)
    // temperature = Wire.read()<<8 | Wire.read(); // reading registers: 0x41 (TEMP_OUT_H) and 0x42 (TEMP_OUT_L)
    gyro_x = Wire.read()<<8 | Wire.read(); // reading registers: 0x43 (GYRO_XOUT_H) and 0x44 (GYRO_XOUT_L)
    gyro_y = Wire.read()<<8 | Wire.read(); // reading registers: 0x45 (GYRO_YOUT_H) and 0x46 (GYRO_YOUT_L)
    gyro_z = Wire.read()<<8 | Wire.read(); // reading registers: 0x47 (GYRO_ZOUT_H) and 0x48 (GYRO_ZOUT_L)




    // print out data
    Serial.print("aX = "); Serial.print(convert_int16_to_str(accelerometer_x));
    Serial.print(" | aY = "); Serial.print(convert_int16_to_str(accelerometer_y));
    Serial.print(" | aZ = "); Serial.print(convert_int16_to_str(accelerometer_z));
    // the following equation was taken from the documentation [MPU-6000/MPU-6050 Register Map and Description, p.30]
    Serial.print(" | tmp = "); Serial.print(temperature/340.00+36.53);
    Serial.print(" | gX = "); Serial.print(convert_int16_to_str(gyro_x));
    Serial.print(" | gY = "); Serial.print(convert_int16_to_str(gyro_y));
    Serial.print(" | gZ = "); Serial.print(convert_int16_to_str(gyro_z));

    ////////////// UDP /////////////////
    // If packet received...
    int packetSize = UDP.parsePacket();
    if (packetSize) {
    Serial.print("Received packet! Size: ");
    Serial.println(packetSize);
    int len = UDP.read(packet, 255);
    if (len > 0)
    {
    packet[len] = '\0';
    }
    Serial.print("Packet received: ");
    Serial.println(packet);
    Serial.println(UDP.remoteIP());

    // Send return packet
    // UDP.beginPacket(UDP.remoteIP(), UDP.remotePort());
    UDP.beginPacket("172.20.10.2", 5555);
    UDP.write(reply);
    UDP.endPacket();

    }

    sensors = String(String(accelerometer_x) + "," + accelerometer_y.toString()+ accelerometer_z.toString() + );
    UDP.beginPacket("172.20.10.2", 5555);
    UDP.write(sensors);
    UDP.endPacket();

    delay(100);

    }

    Выдает такую ошибку:

    extern "C" {
    ^
    GY521_good_UDP:130:1: error: expected '}' at end of input
    }
    ^
    exit status 1
    expected '}' at end of input