Sure
Arduino code:
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
// called this way, it uses the default address 0x40
Adafruit_PWMServoDriver board1 = Adafruit_PWMServoDriver(0x40);
Adafruit_PWMServoDriver board2 = Adafruit_PWMServoDriver(0x41);
Adafruit_PWMServoDriver board3 = Adafruit_PWMServoDriver(0x42);
Adafruit_PWMServoDriver board4 = Adafruit_PWMServoDriver(0x43);
const int num_servos = 9;
int pos [num_servos];
int rec = 0;
int x;
void setup() {
Serial.begin(9600);
board1.begin();
board2.begin();
board3.begin();
board4.begin();
board1.setPWMFreq(50); // Analog servos run at ~60 Hz updates
board2.setPWMFreq(50);
board3.setPWMFreq(50);
board4.setPWMFreq(50);
}
void loop() {
if (Serial.available()>0){
int message = Serial.read();
int x = (message);
pos[rec] = x;
rec++;
}
if(rec == num_servos){
board1.setPWM(7, 0, pos[0]);
board1.setPWM(10, 0, pos[1]);
board2.setPWM(0, 0, pos[2]);
board2.setPWM(6, 0, pos[3]);
board3.setPWM(8, 0, pos[4]);
board3.setPWM(12, 0, pos[5]);
board4.setPWM(0, 0, pos[6]);
board4.setPWM(1, 0, pos[7]);
board4.setPWM(2, 0, pos[8]);
rec = 0;
}
}
Processing code:
import processing.serial.*;
float max_distance;
Serial myPort;
int x;
void setup() {
size(1000, 1000);
noStroke();
max_distance = dist(0, 0, width/8, height/8);
String portName = Serial.list()[0];
myPort = new Serial(this, portName, 9600);
}
void draw() {
background(0);
for(int j = 799; j >= 0; j -= 400) {
for(int i = 400; i <= 800; i += 400) {
float size = dist(mouseX, mouseY, i, j);
size = size/max_distance * 70;
ellipse(i, j, size, size);
float y = map(size, 0, 350, 125, 450);
if (y >= 275 ){
y = 450;
}
x = int (y);
myPort.write(x);
println(x);
}
}
}