Hallo,
ich habe ein Problem meine Servos anzusteuern. Ich verwende ein Uno mit einem Servoshield.
Das Ansteuern eines einzelnen Servos funktioniert anstandslos. Verwende ich mehrere gleichzeitig, werden die Servos irgendwann durcheinander angesteuert und alles steht.
Hier ist mein Code:
Ich habe jede Menge Println drin, damit ich feststellen kann wo es hackt. Doch dazu kommt es nicht.
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver minutenservos = Adafruit_PWMServoDriver(0x41);
//Adafruit_PWMServoDriver stundenservos = Adafruit_PWMServoDriver(0x42);
int i; //zähler für den em-zahlen
int em_zahl;
void setup() {
Serial.begin(9600);
Serial.println("Setup");
pinMode(13, OUTPUT);
minutenservos.begin();
minutenservos.setPWMFreq(80);
Wire.begin();
em(0);
i=0;
}
void loop() {
Serial.println("loop");
Serial.print("stellen zahl :");
Serial.print(i);
Serial.println();
em(i);
warten(3000);
i=i+1;
Serial.println(i);
if (i==3){i=0;}
}
void em(int emz){
switch (emz) {
case 0:
Wire.beginTransmission(0x41);
minutenservos.setPWM(0, 0, 300);//zu
Serial.print("0 zu");
Serial.println();
warten(50);
minutenservos.setPWM(1, 0, 300);//zu
Serial.print("1 zu");
Serial.println();
warten(50);
minutenservos.setPWM(2, 0, 200);//zu
Serial.print("2 zu");
Serial.println();
warten(50);
minutenservos.setPWM(3, 0, 300);//zu
Serial.print("3 zu");
Serial.println();
warten(50);
minutenservos.setPWM(4, 0, 300);//zu
Serial.print("4 zu");
Serial.println();
warten(50);
minutenservos.setPWM(5, 0, 220);//zu
Serial.print("5 zu");
Serial.println();
warten(50);
minutenservos.setPWM(6, 0, 550);//auf
Serial.print("6 auf");
Serial.println();
warten(50);
Wire.endTransmission();
break;
case 1:
Wire.beginTransmission(0x41);
minutenservos.setPWM(0, 0, 600);//auf
Serial.print("0 auf");
Serial.println();
warten(50);
minutenservos.setPWM(3, 0, 550);//auf
Serial.print("3 auf");
Serial.println();
warten(50);
minutenservos.setPWM(4, 0,550);//auf
Serial.print("4 auf");
Serial.println();
warten(50);
minutenservos.setPWM(5, 0, 550);//auf
Serial.print("5 auf");
Serial.println();
warten(50);
Wire.endTransmission();
break;
case 2:
Wire.beginTransmission(0x41);
minutenservos.setPWM(0, 0, 300);//zu
Serial.print("0 zu");
Serial.println();
warten(50);
minutenservos.setPWM(2, 0, 530);//auf
Serial.print("2 auf");
Serial.println();
warten(50);
minutenservos.setPWM(3, 0, 300);//zu
Serial.print("3 zu");
Serial.println();
warten(50);
minutenservos.setPWM(4, 0, 300);//zu
Serial.print("4 zu");
Serial.println();
warten(50);
minutenservos.setPWM(6, 0, 150);//zu
Serial.print("6 zu");
Serial.println();
warten(50);
Wire.endTransmission();
break;
}
}
void warten(int zeit){
delay(zeit);
}