Moin Gemeinde, ich benötige hilfe um die Servos mit dem gleichen Taster auch wieder Retour zu stellen. Habe da einiges gelesen von wegen `bounce´ oder ´toogle´, aber ich blick da nicht durch und weiß gar nicht ob ich damit richtig liege. Bin recht frisch dabei, das was bis jetzt da ist, funzt, aber noch nicht nach meinen Wünschen.
Bitte Danke
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
// Platinen-Objekte mit spezifischer Adresse erstellen
Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(0x40); // Adresse 0x40 für Platine 1
Adafruit_PWMServoDriver pwm2 = Adafruit_PWMServoDriver(0x41); // Adresse 0x41 für Platine 2
#define SERVOMIN 150 // Minimaler Pulswert (abhängig vom Servo)
#define SERVOMAX 600 // Maximaler Pulswert (abhängig vom Servo)
// Pins für Taster (D2 bis D13)
const int buttonPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
const int numButtons = 12;
void setup() {
Serial.begin(9600);
pwm1.begin();
pwm2.begin();
pwm1.setPWMFreq(60); // Servos laufen meist mit ~60 Hz
pwm2.setPWMFreq(60);
// Taster-Pins als INPUT_PULLUP initialisieren
for (int i = 0; i < numButtons; i++) {
pinMode(buttonPins[i], INPUT_PULLUP);
}
}
// Hilfsfunktion zur Winkelkonvertierung
uint16_t angleToPulse(int angle) {
int pulse = map(angle, 0, 180, SERVOMIN, SERVOMAX);
return pulse;
}
void loop() {
// Beispiel: Beim Drücken des ersten Tasters (Pin 2), Servo 0 auf Platine 1 bewegen
if (digitalRead(buttonPins[0]) == LOW) {
pwm1.setPWM(0, 0, angleToPulse(90)); // Bewege Servo 0+1 auf 90 Grad
pwm1.setPWM(1, 1, angleToPulse(0));
delay(500);
}
if (digitalRead(buttonPins[1]) == LOW) {
pwm1.setPWM(2, 2, angleToPulse(90)); // Bewege Servo 2+3 auf 90 Grad
pwm1.setPWM(3, 3, angleToPulse(0));
delay(500);
}
if (digitalRead(buttonPins[2]) == LOW) {
pwm1.setPWM(4, 4, angleToPulse(0)); // Bewege Servo 4+5 auf 90 Grad
pwm1.setPWM(5, 5, angleToPulse(90));
delay(500);
}
if (digitalRead(buttonPins[3]) == LOW) {
pwm1.setPWM(6, 6, angleToPulse(0)); // Bewege Servo 6+7 auf 90 Grad
pwm1.setPWM(7, 7, angleToPulse(90));
delay(500);
}
if (digitalRead(buttonPins[4]) == LOW) {
pwm1.setPWM(8, 8, angleToPulse(0)); // Bewege Servo 8+9 auf 90 Grad
pwm1.setPWM(9, 9, angleToPulse(90));
delay(500);
}
if (digitalRead(buttonPins[5]) == LOW) {
pwm1.setPWM(10, 10, angleToPulse(0)); // Bewege Servo 10+11 auf 90 Grad
pwm1.setPWM(11, 11, angleToPulse(90));
delay(500);
}
if (digitalRead(buttonPins[6]) == LOW) {
pwm1.setPWM(12, 12, angleToPulse(0)); // Bewege Servo 12+13 auf 90 Grad
pwm1.setPWM(13, 13, angleToPulse(90));
delay(500);
}
if (digitalRead(buttonPins[7]) == LOW) {
pwm1.setPWM(14, 14, angleToPulse(0)); // Bewege Servo 14+15 auf 90 Grad
pwm1.setPWM(15, 15, angleToPulse(90));
delay(500);
}
if (digitalRead(buttonPins[8]) == LOW) {
pwm2.setPWM(0, 0, angleToPulse(0)); // Bewege Servo 16+17 auf 90 Grad
pwm2.setPWM(1, 1, angleToPulse(90));
delay(500);
}
if (digitalRead(buttonPins[9]) == LOW) {
pwm2.setPWM(2, 2, angleToPulse(0)); // Bewege Servo 18+19 auf 90 Grad
pwm2.setPWM(3, 3, angleToPulse(90));
delay(500);
}
if (digitalRead(buttonPins[10]) == LOW) {
pwm2.setPWM(4, 4, angleToPulse(0)); // Bewege Servo 20+21 auf 90 Grad
pwm2.setPWM(5, 5, angleToPulse(90));
delay(500);
}
if (digitalRead(buttonPins[11]) == LOW) {
pwm2.setPWM(6, 6, angleToPulse(90)); // Bewege Servo 22+23 auf 90 Grad
pwm2.setPWM(7, 7, angleToPulse(0));
delay(500);
}
// Fügen Sie hier Logik für die anderen 11 Taster und 23 Servos hinzu
}
Ich hoffe das war alles richtig so.
