Ok,
Ich habe S1 und S2 definiert wie du angegeben hat. Aber mit Großbuchstaben S, weil klein nicht erlaubt ist. (Verstehe ich auch nicht warum.) Jedenfals nicht ein einziges Kleinbuchstabe s (mit oder ohne weitere Nummer):
Und naturlich jeder stelle von s1 und s2 in den Code geändert zu S1, S2.
Und dann Kompiliert den IDE den Code ziemlich ohne Problemen. Ja, den Kompiler hat es Prima gefunden. Leider nicht für den Code-Polizei.Code:#define S1 4 #define S2 6
Weil du auf verschiedene stellen ein if-Befehl macht wie das hier:
Den Komma ist ein gültige Operator, aber es wird nicht ausgewertet wie du wahrscheinlich möchtest. (ausführen wenn Kranstart pin HIGH ist, oder nicht wann es LOW ist) Bei einer derartige if-Befehl wirdt den Komma-operator die erste Gesetzen vor den (letzte) Komma jedenfalls ausführen (den Variabel Kranstart macht nichts alleine). Aber nur das letzte Gesetz hinter der Komma wird für den Entscheidung sorgen. (HIGH=1, und alles was nicht gleich 0 ist wird immer als Wahr gekennzeichnet) Alles da vorne macht nichts dazu. Also was hier oben steht ist:Code:if (Kranstart,HIGH) digitalWrite (RELAISAUF, HIGH);
Deshalb wird das digitalWrite jedenfalls ausgeführt. Nur nicht wenn den Variabele Kranstart die wert 0 bekommen hat.Code:if ( 1!=0 ) digitalWrite (RELAISAUF, HIGH); // '1 ist nicht gleich an 0'
Die richtige Verwendung von ein if Befehl ist:
Das gleiche passiert bei den while- loop am ende. Das hat nähmlich auch ein Quasi-if-Befehl in sich.Code:if ( digitalRead(Kranstart)==HIGH ) digitalWrite (RELAISAUF, HIGH);
Das ist ein Endloss-schleife, und dein Programm wird da niemals rauskommen. Arduino loop() wirdt nicht weiter loop-en.Code:while(S2,HIGH);
Ok, dann haben wir nun die Logik Befehlen korrigiert. Dann stimmt es doch? Nein leider noch nicht.
Zurück zum anfang von den loop() Funktion:
- - - Aktualisiert - - -void loop()
{ //Anfang der loop-Funktion
value = digitalRead(S2); // Endschalter wird eingelesen
digitalWrite(Kranstart,value); // Warte mall!! Kranstart ist als int definiert, und hat den wert HIGH (1) bekommen. Das ist doch kein Pin-bezeichnung!!!
// das ist gleich: digitalWrite(1, value); Wird kommisches verhalten geben mit den Seriele port (TX) Keine ahnung was Kranstart hier bedeuten soll.
{ // Wieso alles hiernach in ein {} scope einfassen? Sollte den { nicht gerade nach den ) kommen?
if ( digitalRead(Kranstart)==HIGH ) digitalWrite (RELAISAUF, HIGH);
// Hier ist das if-Befehl schon am ende, wegen der ; am ende des if-Befehls, und den fehlende { dazwischen. Alles hiernach wird jedenfalls ausgeführt.
delay(2600);
digitalWrite (RELAISAUF, LOW);
delay(2000);
myStepper1.step(-3600); //Kran ausdrehen (Winkel einstellen)
delay(2000); //Warten
digitalWrite (RELAISAB, HIGH);
delay(13000); //Seil ab für 13 sec
digitalWrite (RELAISAB, LOW);
delay(20000);
digitalWrite (RELAISAUF, HIGH);
delay(13000);
digitalWrite (RELAISAUF, LOW);
delay(2000);
myStepper1.step(3600); //Kran eindrehen
delay(3000);
digitalWrite (RELAISAB, HIGH);
delay(2600);
digitalWrite (RELAISAB, LOW);
delay(5000);
} // Ende von if-Befehl Wahr-code
{
while(S2,HIGH); //Aber nür eines mall! Hängt hier ab. Gleich wie bei if Korrigieren.
}
} //Ende von loop()
Ok,
Ich habe S1 und S2 definiert wie du angegeben hat. Aber mit Großbuchstaben S, weil klein nicht erlaubt ist. Jedenfals nicht ein einzige Kleinbuchstabe s (mit oder ohne weiteres Nummer):
Und naturlich jeder stelle von s1 und s2 in den Code geändert zu S1, S2.
Und dann Kompiliert den IDE den Code ziemlich ohne Problemen. Ja, den Kompiler hat es Prima gefunden. Leider nicht für den Code-Polizei.Code:#define S1 4 #define S2 6
Weil du auf verschiedene stellen ein if-Befehl macht wie das hier:
Den Komma ist ein gültige Operator, aber es wird nicht ausgewertet wie du wahrscheinlich möchtest. (ausführen wenn Kranstart pin HIGH ist, oder nicht wann es LOW ist) Bei einer derartige if-Befehl wirdt den Komma-operator die erste Gesetzen vor den (letzte) Komma jedenfalls ausführen (den Variabel Kranstart macht nichts alleine), aber nur das letzte Gesetz hinter der Komma wird für den Entscheidung sorgen. (HIGH=1, und alles was nicht gleich 0 ist wird immer als Wahr gekennzeichnet) Alles da vorne macht nichts dazu. Also was hier oben steht ist:Code:if (Kranstart,HIGH) digitalWrite (RELAISAUF, HIGH);
Deshalb wird das digitalWrite jedenfalls ausgeführt. Eben wenn Kranstart möglicherweise LOW oder 0 ist.Code:if ( HIGH==1 ) digitalWrite (RELAISAUF, HIGH);
Die richtige Verwendung von ein if Befehl ist:
Das gleiche passiert bei den while- loop am ende. Das hat nähmlich auch ein Quasi-if-Befehl in sich.Code:if ( digitalRead(Kranstart)==HIGH ) digitalWrite (RELAISAUF, HIGH);
Das ist ein Endloss-schleife, und dein Programm wird da niemals rauskommen. Arduino loop() wirdt nicht weiter loop-en.Code:while(S2,HIGH);
Ok, dann haben wir nun die Logik Befehlen korrigiert. Dann stimmt es doch? Nein leider noch nicht.
Zurück zum anfang von den loop() Funktion:
void loop()
{ //Anfang der loop-Funktion
value = digitalRead(S2); // Endschalter wird eingelesen
digitalWrite(Kranstart,value); // Warte mall!! Kranstart ist als int definiert, und hat den wert HIGH (1) bekommen. Das ist doch kein Pin-bezeichnung!!!
// das ist gleich: digitalWrite(1, value); Wird kommisches verhalten geben mit den Seriele port (TX) Keine ahnung was Kranstart hier bedeuten soll.
{ // Wieso alles hiernach in ein {} scope einfassen? Sollte den { nicht gerade nach den ) kommen?
if ( digitalRead(Kranstart)==HIGH ) digitalWrite (RELAISAUF, HIGH);
// Hier ist das if-Befehl schon am ende, wegen der ; am ende des if-Befehls, und den fehlende { dazwischen. Alles hiernach wird jedenfalls ausgeführt.
delay(2600);
digitalWrite (RELAISAUF, LOW);
delay(2000);
myStepper1.step(-3600); //Kran ausdrehen (Winkel einstellen)
delay(2000); //Warten
digitalWrite (RELAISAB, HIGH);
delay(13000); //Seil ab für 13 sec
digitalWrite (RELAISAB, LOW);
delay(20000);
digitalWrite (RELAISAUF, HIGH);
delay(13000);
digitalWrite (RELAISAUF, LOW);
delay(2000);
myStepper1.step(3600); //Kran eindrehen
delay(3000);
digitalWrite (RELAISAB, HIGH);
delay(2600);
digitalWrite (RELAISAB, LOW);
delay(5000);
} // Ende von if-Befehl Wahr-code
{
while(S2,HIGH); //Aber nür eines mall! Hängt hier ab. Gleich wie bei if Korrigieren.
}
} //Ende von loop()
Lesezeichen