Hallo liebe Community. Ich bin noch recht neu hier und noch nicht so erfahren mit der Programmierung (Arduino). Meistens verwende ich Sketches hier aus dem Forum und lerne so durch verändern und probieren.
Nun das Problem: Im folgenden Sketch sollen 2 LEDs abwechselnd blinken, eine rote und eine grüne. An einem Taster hängt ein Servo, der auf Tastendruck seine Bewegung ausführt. Beide Teile des Sketches (LED und Servo) funktionieren einzeln tadellos, nur zusammen eben nicht. Auslöser scheint die Zeile "servo.attach(3);" im Setup zu sein, die die rote LED dann außer Betrieb setzt oder stört, die grüne funktioniert weiterhin. Ich verstehe es einfach nicht... Kann mir da jemand weiterhelfen?
#include <Servo.h> // Servo Bibliothek
const byte LED_1 = 10; // rot-grün abwechselnd mit Dimmung
const byte LED_2 = 11;
int helligkeit = 1;
int increment = 1;
byte zyklus = 0;
unsigned long updateIntervall = 1;
unsigned long lastUpdate = 0;
int servo_pin = 3;
const int BUTTON = A5; // Pushbutton auf Board
int val = 0; // speichert Zustand des Tasters
int old_val = 0; // speichert den vorherigen wert von val
int state = 0; // 0 = Servo Position eins, 1 = Servo Position zwei
Servo servo; // Servo-Objekt zur Steuerung des Servos
long servo_movetime = 0; // Zeit in Millis Servo nächster Schritt
int servo_zPos = 0; // Zielposition
int servo_aPos = 0; // aktuelle postion servo
int pos1 = 0; // Variable zum Speichern der Servoposition Servo
int aPos1; // aktuelle position
int zPos1; // Zielposition
int tDelay1 = 40; // Verzögerung zwischen den Bewegungen
void setup()
{
Serial.begin(9600); // Startet die serielle Ausgabe (optional)
pinMode(LED_1, OUTPUT); //rot abwechelnd
pinMode(LED_2, OUTPUT); // mit grün
pinMode(BUTTON, INPUT_PULLUP); //Button ist ein Input
servo.attach(3); //Steuerkabel des Servo
servo.write(0); //Grundstellung des Servo bei Start
}
void loop() {
// ROT GRÜN abwechselnd mit Dimmung //
unsigned long currentMillis = millis();
if (currentMillis - lastUpdate >= updateIntervall) {
lastUpdate = millis();
helligkeit = helligkeit + increment;
analogWrite(zyklus % 2 ? LED_2 : LED_1, helligkeit);
if (helligkeit >= 200) {
increment = -increment;
} else if (helligkeit == 0) {
increment = -increment;
zyklus++;
}
}
// ENDE Rot grün -------------------------------//
// SERVO und LASER //
val = digitalRead(BUTTON); // liest den Input aus und prüft ob gedrückt
if ((val == LOW) && (old_val == HIGH)) {
state = 1 - state;
}
old_val = val; // aktueller val wird zu val alt
if (state == 1)
aPos1 = servo.read();
if (aPos1 == 0) zPos1 = 90;
if (aPos1 == 90) zPos1 = 0;
if (aPos1 != zPos1 && millis() >= servo_movetime) {
moveServo();
}
}
void moveServo() {
if (aPos1 < zPos1) servo.write(aPos1 + 1);
if (aPos1 > zPos1) servo.write(aPos1 - 1);
servo_movetime = millis() + tDelay1;
}
// ENDE Servo und Laser ------------------- //