#include #include Servo servo1; // create servo object to control a servo Servo servo2; Servo servo3; Servo servo4; Servo servo5; Servo servo6; Servo servo7; Servo servo8; Servo servos[] = {servo1, servo2, servo3, servo4, servo5, servo6, servo7, servo8}; uint8_t pins[] = {0,1,2,3,4,5,10,9}; uint8_t servoPos[] = {5,5,5,5,5,5,5,5}; uint8_t servoIndex = 0; volatile bool currentFrameProcessed = true; //if not volatile, cannot be modified by receiveEvent function uint8_t inByte = -1; void setup() { for (int i = 0; i <8; i++) { servos[i].attach(pins[i]); } for (int i = 0; i <8; i++) { servos[i].write(90); } Wire.begin(7); Wire.onReceive(receiveEvent); pinMode(8,OUTPUT); digitalWrite(8,0); } void receiveEvent(int bytes) { inByte = Wire.read(); if (inByte > 80) { servoIndex = 0; currentFrameProcessed = false; } else { servoPos[servoIndex] = inByte - 64; servoIndex++; } } void loop() { if (!currentFrameProcessed) { for (int i = 0; i < 8; i++) { if (servoPos[i] == 5) { servos[i].write(85); } else if (servoPos[i] == 4) { servos[i].write(68); } else if (servoPos[i] == 3) { servos[i].write(50); } else if (servoPos[i] == 2) { servos[i].write(30); } else if (servoPos[i] == 1) { servos[i].write(5); } } currentFrameProcessed = true; } }