Ich habe den Code jetzt soweit zum laufen bekommen. Leider bekomme ich ein paar Funktionen selbst nicht hin. Könnt Ihr mir bitte helfen?
-
Beim Schalter 7, 8 und 9 soll das Lied solange laufen bis der Schalter wieder aus ist
-
Bei Schalter 10 soll der Sound nur einmal abspielen obwohl der Schalter auf on ist, da über das Relais noch ein Licht geschalten ist. Die anderen Programme sollen dann trotzdem laufen nachdem der Sound beim einschalten des Schalters 10 abgespielt worden ist.
-
Eine Möglichkeit die Geschwindigkeit der Servos zu verlangsamen wäre auch super.
Ich würde mich freuen, wenn Ihr mir helfen könntet.
```cpp
#include <SoftwareSerial.h>
#include <DFPlayerMini_Fast.h>
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
SoftwareSerial mySerial(10, 11); // RX, TX
DFPlayerMini_Fast myDFPlayer;
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
const int numServos = 8;
const int servoPins[numServos] = {0, 1, 2, 3, 4, 5, 6, 7}; // Servo PWM Pins
const int Taster1 = 2; // Pin für Wall-E ws/gb
const int Taster2 = 3; // Pin für Tatttaaaaa ws/sw
const int Taster3 = 4; // Pin für EVA gr/sw
const int Taster4 = 5; // Pin für Yuuhuuu ws/bl
const int Taster5 = 6; // Pin für woah bl/rosa
const int Taster6 = 7; // Pin für ohhhh braun/sw
const int Schalter7 = A0; // Pin für Lied 3 gelb/br
const int Schalter8 = A1; // Pin für Lied 1 braun
const int Schalter9 = A2; // Pin für Lied 2 ws/gr
const int Schalter10 = A3; // Pin Solar Charger br/bl
const int Taster11 = 8 ; // Pin für den Gehäusetaster ws/gr
void setup() {
Wire.begin();
pwm.begin();
pwm.setPWMFreq(60); // Set the PWM frequency to 60 Hz
pinMode(Taster1, INPUT_PULLUP);
pinMode(Taster2, INPUT_PULLUP);
pinMode(Taster3, INPUT_PULLUP);
pinMode(Taster4, INPUT_PULLUP);
pinMode(Taster5, INPUT_PULLUP);
pinMode(Taster6, INPUT_PULLUP);
pinMode(Schalter7, INPUT_PULLUP);
pinMode(Schalter8, INPUT_PULLUP);
pinMode(Schalter9, INPUT_PULLUP);
pinMode(Schalter10, INPUT_PULLUP);
pinMode(Taster11, INPUT_PULLUP);
mySerial.begin(9600);
myDFPlayer.begin(mySerial);
myDFPlayer.volume(25); // Lautstärke einstellen (0-30)
}
void loop() {
if (digitalRead(Taster1) == LOW) {
myDFPlayer.play(1); // Wall-E abspielen
setServoAngle(0,-90); //Hand links zur mitte
setServoAngle(1,140); //Finger links zu
setServoAngle(2,120); //Finger rechts zu
setServoAngle(3,130); //Hand rechts zur mitte
setServoAngle(4,-25); //Augenbrauen zu
setServoAngle(5, 10); //Arm rechts mitte
setServoAngle(6, 10); //Arm links mitte
setServoAngle(7,-90); //Klappe zu
delay(2000); // Verzögerung, um mehrfaches Auslösen zu vermeiden
}
if (digitalRead(Taster2) == LOW) {
myDFPlayer.play(2); // Tataaaaa abspielen
setServoAngle(0,-180); //Hand links nach unten
setServoAngle(1,-100); //Finger links auf
setServoAngle(2,-120); //Finger rechts auf
setServoAngle(3,230); //Hand rechts nach unten
setServoAngle(4,110); //Augenbrauen auf
setServoAngle(5,-60); //Arm rechts unten
setServoAngle(6,60); //Arm links unten
setServoAngle(7,0); //Klappe auf
delay(2000);
}
if (digitalRead(Taster3) == LOW) {
myDFPlayer.play(3); // EVA abspielen
setServoAngle(0,120); //Hand links nach oben
setServoAngle(1,140); //Finger links zu
setServoAngle(2,120); //Finger rechts zu
setServoAngle(3,-70); //Hand rechts nach oben
setServoAngle(4,-25); //Augenbrauen zu
setServoAngle(5,10); //Arm rechts mitte
setServoAngle(6, 10); //Arm links mitte
setServoAngle(7,-90); //Klappe zu
delay(2000);
}
if (digitalRead(Taster4) == LOW) {
myDFPlayer.play(4); // Yuhuuu winken abspielen
setServoAngle(0,120); //Hand links nach oben
setServoAngle(3,-70); //Hand rechts nach oben
setServoAngle(5,-30); //Arm rechts oben
setServoAngle(6,10); //Arm links mitte
setServoAngle(7,-90); //Klappe zu
setServoAngle(1,90); //Finger links winken
delay(500);
setServoAngle(1,-90);
delay(500);
setServoAngle(1,90);
delay(500);
setServoAngle(1,-90);
delay(500);
setServoAngle(1,90);
delay(500);
setServoAngle(1,-90);
delay(500);
setServoAngle(1,90);
delay(2000); // Verzögerung, um mehrfaches Auslösen zu vermeiden
}
if (digitalRead(Taster5) == LOW) {
myDFPlayer.play(9); // Ahhhhhh abspielen
setServoAngle(4,110); //Augenbrauen auf
delay(1500);
setServoAngle(4,-25); //Augenbrauen zu
delay(2000);
}
if (digitalRead(Taster6) == LOW) {
myDFPlayer.play(8); // traurig abspielen
delay(2000);
}
if (digitalRead(Schalter7) == LOW) {
myDFPlayer.play(10); // Lied 1 abspielen
delay(2000);
}
if (digitalRead(Schalter8) == LOW) {
myDFPlayer.play(11); // Lied 2 abspielen
delay(2000);
}
if (digitalRead(Schalter9) == LOW) {
myDFPlayer.play(9); // Lied3 abspielen
delay(2000);
}
if (digitalRead(Schalter10) == LOW) {
myDFPlayer.play(6); // Solar Charger abspielen
delay(6000);
}
if (digitalRead(Taster11) == LOW) { //Taster am Gehäuse
myDFPlayer.play(5); // wow abspielen
delay(2000);
}
}
void setServoAngle(int servoNumber,int angle){
int pulse = map(angle , -180 ,180 ,150 ,600); // Map the angle to the PCA9685 pulse length range
pwm.setPWM(servoPins[servoNumber],0 ,pulse);
}