Hi Plumps,
danke fuer die Erklaerung, Das ist exact mein Wissensstand und das noch gar nicht so lange. Nur leider die Umsetzung, sprich alles noch Theorie fuer mich.
Hier mal einfach mein Projekt erklaert, um mal einen Gegenstand zu haben. Zwei Schalter, mit jeweils AN und AUS. Ein Servo
Schalter_1 AN
Servor geht Pos_1
Schalter_1 AUS
Servo geht Pos_0
Schalter_2 AN
Servo geht Pos_1
Pause
Servo geht Pos_0
Schalter_2 AUS
Servo geht Pos_0
Und um hier mein Verstaendnis zu staerken, das obige Skript. Was alles so kompliziert macht ist wohl der loop(), eine wiederholende Stuktur ist wohl deutlich einfacher.
Vielleicht sollte das ein neuer Post werden, oder?
Hier ein Teil des Loops, der es nicht tut, weiter unten das ganze Skript.
if (kanalState_2 == HIGH) {
digitalWrite(LED_2, HIGH);
winkel = schalten(170, winkel, 70);
currentMillis = millis();
Serial.print("currentMillis:");
Serial.println(currentMillis);
stateMillis = currentMillis;
Serial.print("stateMillis:");
Serial.println(stateMillis); //dies Informationen kommen im Monitor an, aber auch nur die.
// pause steht auf 6000
if (currentMillis - stateMillis > pause){
Serial.println("If Bedingung erfuellt."); // If wird nie erfuellt.
winkel = schalten(0, winkel, 70);
x = 1;
}
} else {
digitalWrite(LED_2, LOW);
Serial.println("else Zweig"); // das jetzt doch, aber halt anders als gedacht.
winkel = schalten(0, winkel, 70);
}
Alles.
#include <Servo.h>
int BUTTON_Tester = 2;
int LED_1 = 3;
int LED_2 = 4;
int LED_3 = 5;
int LED_4 = 6;
int buttonState = 0;
int KANAL_1 = A0;
int KANAL_2 = A1;
int KANAL_3 = A2;
int KANAL_4 = A3;
int kanalState_1 = 0;
int kanalState_2 = 0;
int kanalState_3 = 0;
int kanalState_4 = 0;
Servo MyServo;
int winkel = 0;
int SCHALTER = 8;
int schalterState = 0;
unsigned long currentMillis = 0;
unsigned long previousMillis = 0;
unsigned long pause = 6000;
unsigned long stateMillis = 0;
int pausen_wert = 6000;
int x = 0;
int y = 0;
void setup() {
Serial.begin(9600);
pinMode(BUTTON_Tester, INPUT_PULLUP);
pinMode(LED_1, OUTPUT);
pinMode(LED_2, OUTPUT);
pinMode(LED_3, OUTPUT);
pinMode(LED_4, OUTPUT);
pinMode(KANAL_1, INPUT_PULLUP);
pinMode(KANAL_2, INPUT_PULLUP);
pinMode(KANAL_3, INPUT_PULLUP);
pinMode(KANAL_4, INPUT_PULLUP);
pinMode(SCHALTER, OUTPUT);
MyServo.attach(7);
}
int schalten (int soll, int ist, int Pause){
MyServo.attach(7);
if (soll > ist){
for (ist; ist<=soll; ist++){
MyServo.write(ist);
delay(Pause);
}
}
if (soll < ist){
for (ist; ist>=soll; ist--){
MyServo.write(ist);
delay(Pause);
}
}
MyServo.detach();
return soll;
}
void loop() {
buttonState = digitalRead(BUTTON_Tester);
kanalState_1 = digitalRead(KANAL_1);
kanalState_2 = digitalRead(KANAL_2);
kanalState_3 = digitalRead(KANAL_3);
kanalState_4 = digitalRead(KANAL_4);
// Kanal 1 ist Gruen
if (kanalState_1 == HIGH) {
digitalWrite(LED_1, HIGH);
digitalWrite(SCHALTER, HIGH);
winkel = schalten(170, winkel, 70);
} else {
digitalWrite(LED_1, LOW);
digitalWrite(SCHALTER, LOW);
winkel = schalten(0, winkel, 70);
}
// Kanal 2 ist Grau
if (kanalState_2 == HIGH) {
digitalWrite(LED_2, HIGH);
winkel = schalten(170, winkel, 70);
currentMillis = millis();
Serial.print("currentMillis:");
Serial.println(currentMillis);
stateMillis = currentMillis;
Serial.print("stateMillis:");
Serial.println(stateMillis);
// pause steht auf 6000
if (currentMillis - stateMillis > pause){
Serial.println("If Bedingung erfuellt.");
winkel = schalten(0, winkel, 70);
x = 1;
}
} else {
digitalWrite(LED_2, LOW);
Serial.println("else Zweig");
winkel = schalten(0, winkel, 70);
}
if (kanalState_3 == HIGH) {
digitalWrite(LED_3, HIGH);
} else {
digitalWrite(LED_3, LOW);
}
if (kanalState_4 == HIGH) {
digitalWrite(LED_4, HIGH);
} else {
digitalWrite(LED_4, LOW);
}
if (buttonState == LOW) {
digitalWrite(LED_1, HIGH);
digitalWrite(LED_2, HIGH);
digitalWrite(LED_3, HIGH);
digitalWrite(LED_4, HIGH);
} else {
digitalWrite(LED_1, LOW);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, LOW);
digitalWrite(LED_4, LOW);
}
}
Sollte wohl echt ein neues Topic werden! Mache ich auch gleich.