I couldn't really figure out what to do with all the codes you wrote, so I didnt get to use them.
However, I did get my code to work, partly. It seems there is a maximum of 3 units that I can use.
The following is my complete code. It is supposed to work completely, but it only does if I
either comment out the //servo 0:, //servo 1:, //servo 2: or //led0: part. If I dont (comment one out) the patch goes crazy and sends a constant mess of variables to max.
// :::pins:::
//INPUT PINS
int UP = 2; //wit -joystick up
int RP = 3; //bruin -joystick right
int DP = 4; //blauw -joystick down
int LP = 5; //groen -joystick left
int KP = 6; //oranje -joystick button
int sP = 0; //slider
int rP = 9; //red button
int gP = 8; //green button
//OUTPUT PINS
int Se0 = 13; //servo0 etc
int Se1 = 7;
int Se2 = 10;
int led0 = 12;
// ::servo variables:::
int minPulse = 500; // minimum positie
int maxPulse = 2500; // maximum positie
int val0 = 0;
int val1 = 0;
int val2 = 0;
int val3 = 0;
int lastRead0; // remember the previous input
int lastRead1;
int lastRead2;
int lastRead3;
int id;
// :::functions:::
void moveServo(int servoPin, int inputVal); //servo's bewegen
void maxSend(char letter, int pin); //knoppen doorsturen naar max
int simVal(int val1, int val2);
void setup() {
pinMode(LP, INPUT);
pinMode(UP, INPUT);
pinMode(RP, INPUT);
pinMode(DP, INPUT);
pinMode(KP, INPUT);
pinMode(rP, INPUT);
pinMode(gP, INPUT);
pinMode(Se0, OUTPUT);
pinMode(Se1, OUTPUT);
pinMode(Se2, OUTPUT);
pinMode(led0, OUTPUT);
moveServo(Se0, minPulse); // Startpositions
moveServo(Se1, minPulse);
moveServo(Se2, minPulse);
digitalWrite(led0, HIGH);
beginSerial(9600);
}
void loop() {
//knoppen data doorgeven:::
maxSend('L', LP);
maxSend('R', RP);
maxSend('D', DP);
maxSend('U', UP);
maxSend('K', KP);
maxSend('g', gP);
maxSend('r', rP);
//data vanuit max:::
while (Serial.available() > 1){
id = Serial.read();
Serial.println(id);
//servo 0:
if (id == 'W') {
val0 = Serial.read();
if ( !(simVal(val0,lastRead0))) {
moveServo( Se0, val0 );
}
lastRead0 = val0;
}
//servo 1:
if (id == 'X') {
val1 = Serial.read();
if ( !(simVal(val1,lastRead1))) {
moveServo( Se1, val1 );
}
lastRead1 = val1;
}
//servo 2:
if (id == 'Y') {
val2 = Serial.read();
if ( !(simVal(val2,lastRead2))) {
moveServo( Se2, val2 );
}
lastRead2 = val2;
}
/*
//led0:
if (id == 'Z'){
val3 = Serial.read();
if ( !(simVal(val3,lastRead3))){
if (val3 =='1'){
digitalWrite(led0, HIGH);
}
else{
digitalWrite(led0, LOW);
}
}
lastRead3 = val3;
}
*/
}
delay(10);
}
void moveServo( int servoPin, int inputVal){
//moving the servo's to the selected value with microsecond function
int val;
val = (inputVal * 20) + 500;
digitalWrite(servoPin, HIGH);
delayMicroseconds(val);
digitalWrite(servoPin, LOW);
//delay(20);
}
void maxSend(char letter, int pin){
Serial.print(letter);
Serial.println(digitalRead(pin));
}
int simVal( int val1, int val2 ) {
int difference;
difference = val1 - val2;
if (abs(difference) < 2){
return 1;
}
else{
return 0;
}
}
Anyone got *any* idea what's going wrong here?