INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 2 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Code funktioniert nicht - Motor startet nicht, trotz das die Bedingungen erfüllt sind
04.02.2014, 07:41 (Dieser Beitrag wurde zuletzt bearbeitet: 04.02.2014 07:46 von demokrit.)
Beitrag #9
RE: Code funktioniert nicht ...
Hey,

du bist auf dem Weg in die richtige Richtung.

Was mir als erstes auffällt: du speicherst du die Endlagenabfrage gar nicht.

Die Zeilen

Code:
digitalRead(Endlage_oben);
digitalRead(Endlage_unten);

machen funktional leider gar nichts. Der digitale Wert wird ausgelesen aber nicht verwendet. Du kannst an dieser Stelle entweder temporäre Variablen deklarieren, oder das digitalRead() direkt in deine if-Abfragen schreiben.

Kleiner Tipp noch am Rande: defines schreibt man groß, damit du und andere Leser wissen, dass es ein define ist (z.B. #define DUNKEL 300) Wink

Kommentiere deinen Code IMMER, IMMER, IMMER, IMMER... aus. Lieber ein Kommentar zu viel als zu wenig.

In der Uni wird es teilweise so praktiziert, dass man erst nur Kommentare schreibt, und dann Zeile für Zeile mit Code füllt.

Viel Erfolg

MfG demo

EDIT: Noch mal kurz zur Formatierung:
Code:
funktion()
{
  //dieser Teil ist eingerückt
}

funktion1()
{
  //diesr Teil ist eingerückt
  funktion2()
  {
    //dieser Teil ist wieder eingerückt
  }
}

usw. Wink
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.02.2014, 08:27
Beitrag #10
RE: Code funktioniert nicht
Hallo demo,

da bin ich ja froh das ich wenigstens auf dem richtigen Weg bin...Wink
Das mit den Kommentaren muss ich mir noch angewöhnen, noch eine kurze Frage:

Hier ein Stück Code
Code:
void loop()
{
Zustand = analogRead(Sensor)

    Serial.println(Zustand);                            

  if(Zustand >> HELL && digitalRead(Endlage_unten) == HIGH)
  {
    while(!digitalRead(Endlage_oben) == LOW)
    {
      digitalWrite(Motor_vor, HIGH);

ist hiermit eine Abfrage gewährleistet, oder muss ich noch etwas einfügen was mir die Zustände beider Endschalter speichert?

Danke und VG
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.02.2014, 09:20
Beitrag #11
RE: Code funktioniert nicht
(04.02.2014 08:27)Daniel Zorn schrieb:  Hallo demo,

da bin ich ja froh das ich wenigstens auf dem richtigen Weg bin...Wink
Das mit den Kommentaren muss ich mir noch angewöhnen, noch eine kurze Frage:

Hier ein Stück Code
Code:
void loop()
{
Zustand = analogRead(Sensor)

    Serial.println(Zustand);                            

  if(Zustand >> HELL && digitalRead(Endlage_unten) == HIGH)
  {
    while(!digitalRead(Endlage_oben) == LOW)
    {
      digitalWrite(Motor_vor, HIGH);

ist hiermit eine Abfrage gewährleistet, oder muss ich noch etwas einfügen was mir die Zustände beider Endschalter speichert?

Danke und VG

Der Operator ">>" ist ein Bitschiebeoperator Wink Auch wenn du den wohl nur versehentlich genutzt hast: Lass als Anfänger die Finger davon Smile Ersetze diesen durch ">".

Schau dir dazu mal diesen Link an:
Klick

Dein Code ist zwar nur ein Ausschnitt aber du solltest trotzdem darauf achten, dass die "{}"-Balance stimmt!

An sonsten sieht das gar nicht so schlecht aus.

MfG demo

PS: Zu deinem nächsten Codeausschnitt sage ich nur etwas, wenn dieser kommentiert ist. Blush
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.02.2014, 21:11
Beitrag #12
RE: Code funktioniert nicht
So, hier mein dokumentierter Code...ein Erfolg hat sich eingestellt, der Motor ist angesprungen als es "HELL" war, und der untere Taster gedrückt, also "HIGH" war.
ABER: der Motor wollte einfach nicht stoppen, das würde im wahren Leben bedeuten das der Stallschieber um die Achse des Motor gewickelt wird. Sad

Code:
void loop()
{
Zustand = analogRead(Sensor);

    Serial.println(Zustand);

  if(Zustand > HELL && digitalRead(Endlage_unten) == HIGH) //LDR meldet HELL und der Endlagenschalter unten meldet Schieber geschlossen.
  {
    while(!digitalRead(Endlage_oben) == HIGH) //wenn das wirklich so ist und der Endlagenschalter oben nicht "HIGH" dann öffne geschwind den Schieber, denn die Hühner wollen raus.
    {
      digitalWrite(Motor_vor, HIGH); //also Motor auf was wartest du, mach den Schieber auf und lass die Hühner raus...aber wie hält er wieder an...?
    }
  }
       else // den Rest des Kommentars spare ich mir, denn es muss erst mal der eine Teil des Codes funktionieren.
       {
       if (Zustand < DUNKEL && digitalRead(Endlage_unten) == LOW)
      {
        while(!digitalRead(Endlage_oben) == LOW)
         {
           digitalWrite(Motor_back, HIGH);
         }
           }
            else
           {
            for(int i = 0; i < 10; i++)
           {
            delay(1000);
           }  
      }
    }
   }

also Memo der Code ist Kommentiert, nun Bitte hilf mir weiter...Danke

VG Daniel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.02.2014, 10:25 (Dieser Beitrag wurde zuletzt bearbeitet: 05.02.2014 10:32 von demokrit.)
Beitrag #13
RE: Code funktioniert nicht
(04.02.2014 21:11)Daniel Zorn schrieb:  [...]

also Memo der Code ist Kommentiert, nun Bitte hilf mir weiter...Danke

VG Daniel

Ich hab das Gefühl, dass ich dir alles vorkauen muss Wink

Du änderst immer nur genau die 2-3 Zeilen, die ich dir sage... Spiel doch mal selbst ein wenig rum. Programmieren heißt experimentieren. Nicht nur Copy&Paste und wenn man eine Zeile ergänzen muss, ist das schon zu viel.


Also ich hab jetzt ein fertiges Programm hier liegen Wink (30min Arbeit)

MfG demo
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.02.2014, 10:39
Beitrag #14
RE: Code funktioniert nicht
mmmh...Sad

Experimente sind dem ja vorausgegangen, habe z.B. noch eine if abrage eingefügt, das wenn der Motor läuft und der obere Taster dann gedrückt wird, der Motor sofort stoppt, das funktionierte aber nur wenn ich sofort nach den Startbedingungen den oberen Taster gedrückt hatte. Habe dann noch ein delay eingefügt damit der CODE "auf die Eingabe vom oberen Taster wartet bis er reagiert, das hat aber auch nichts gebracht, sobald ich mehr als eine Sekunde mit Taster drücken gewartet hatte lief der Motor immer weiter...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.02.2014, 11:14
Beitrag #15
RE: Code funktioniert nicht -...
Hier eine Lösung, die auch funktioniert (getestet mit LEDs statt Motor)

An dem Beispiel kannst du dich orientieren, wie ein Programm aufgebaut ist und wie es formatiert/kommentiert wird.

Code:
/*###############################################################################​###############################################################
Dateiname:               tuersteuerung_test.ino
Autor:                   demokrit
Letzte Änderung:         05.02.2014
Kurzbeschreibung:        Programm zur automatischen Steuerung einer Schiebetür. Wenn es hell genug ist, fährt die Tür auf. Wenn es dunkel genug
                         ist, wieder herunter.
Historie:                05.02.2014  Ersterstellung
Info:                    Beim eigentlichen Einsatz alle 'Serial.xyz' auskommentieren, da diese nur zum Debuggen dienen
################################################################################​##############################################################*/

// defines
#define LICHTSCHWELLE 300        // Schwelle, bei dem die Tür bewegt werden soll (evtl. anpassen)
#define END_UNTEN       2        // Eingang für den unteren Endlagenschalter (bei HIGH aktiviert, Pulldownwiderstand nicht vergessen (oder Wechselschalter!))  
#define END_OBEN        3        // Eingang für den oberen Endlagenschalter (bei HIGH aktiviert, Pulldownwiderstand nicht vergessen(oder Wechselschalter!))
#define M_LINKS         4        // Ausgang für Linksdrehung des Motors
#define M_RECHTS        5        // Ausgang für Rechtsdrehung des Motors
#define LICHT_IN       A0        // Eingang für den Lichtsensor

int lichtmessung = 0;            // Variable zum Zwischenspeichern der eingelesenen Werte

void setup() {
  Serial.begin(115200);          // Serielle Kommunikation
  
  // I/O festlegen
  pinMode(END_OBEN,  INPUT);
  pinMode(END_UNTEN, INPUT);
  pinMode(LICHT_IN,  INPUT);
  pinMode(M_LINKS,   OUTPUT);
  pinMode(M_RECHTS,  OUTPUT);
}

//################################################################################​##############################################################

void loop() {
  lichtmessung = analogRead(LICHT_IN);       // Lichtsensoreingang einlesen (0...1023)
  
  // Status über eingelesenen Wert und Endschalterlagen
  Serial.print("Lichtsensor: ");
  Serial.println(lichtmessung);
  Serial.print("Endlage unten: ");
  Serial.println(digitalRead(END_UNTEN));
  Serial.print("Endlage oben: ");
  Serial.println(digitalRead(END_OBEN));
  
    
  if(lichtmessung > (LICHTSCHWELLE + 50) && (digitalRead(END_UNTEN) == HIGH)) // Wenn hell genug und Tür auf und Tür unten; Schwelle + 50 (evtl. anpassen), damit die Tür bei leichten Schwankungen nicht direkt wieder herunter fährt
  {
    while(!digitalRead(END_OBEN)){           // Fahre die Tür so lange hoch, bis die obere Endlage erreicht ist
      digitalWrite(M_LINKS, HIGH);
      digitalWrite(M_RECHTS, LOW);
      Serial.println("Tuer faehrt hoch");    // Status
    }
    digitalWrite(M_LINKS, LOW);              // Danach den Motor anhalten
  }
  else if(lichtmessung < (LICHTSCHWELLE - 50) && (digitalRead(END_OBEN) == HIGH)) // Wenn dunkel genug für Tür zu und Tür oben;  Schwelle - 50 (evtl. anpassen), damit die Tür bei leichten Schwankungen nicht direkt wieder hoch fährt
  {
    while(!digitalRead(END_UNTEN)){          // Fahre die Tür so lange runter, bis die unterer Endlage erreicht ist
      digitalWrite(M_RECHTS, HIGH);
      digitalWrite(M_LINKS, LOW);
      Serial.println("Tuer faehrt runter");  // Status
    }
    digitalWrite(M_RECHTS, LOW);             // Danach den Motor anhalten
  }
  else                                       // keine Aktion
  {
    digitalWrite(M_LINKS, LOW);              // Vorsichtshalber Motor aus
    digitalWrite(M_RECHTS, LOW);
    Serial.println("idle, warte 5min...");   // Status
    for(int i = 0; i < 30; i++)              // ca. 5min warten (30*9999ms = 300s = 5min), Zu Testzwecken ändern
    {
      delay(9999);                            
    }
  }
}

MfG demo
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.02.2014, 08:32
Beitrag #16
RE: Code funktioniert nicht
Big GrinBig GrinBig Grin...es funktioniert,

DANKE demo das du dir Zeit genommen hast für einen "neuling" mit einem vielleicht gleich zu komplizierten vorhaben. Die Programmiersprache muss erst noch in Fleisch und Blut übergehen, habe ja auch erst vor 3 Wochen damit angefangen...

VG Daniel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Arduino lässt sich nicht installieren bergfrei 4 151 20.11.2016 18:34
Letzter Beitrag: bergfrei
  Arduino Mega 2560 läuft nicht Wolfgang50 6 187 13.11.2016 10:50
Letzter Beitrag: Wolfgang50
  Ardublock übertragt nicht an IDE oder UNO R3 tobi83 5 359 16.10.2016 14:07
Letzter Beitrag: Pit
  Einfacher Tacho für niedrige Geschwindigkeiten – Code optimieren Bastelo 2 261 12.10.2016 20:31
Letzter Beitrag: Bastelo
  Code mit Verifikation über Keypad & LCD machnetz 5 216 10.10.2016 15:01
Letzter Beitrag: torsten_156
  Upload funktioniert nicht Levi 5 250 22.09.2016 20:19
Letzter Beitrag: hotsystems
  ESP8266 tuts nicht sowerum 7 396 19.09.2016 21:01
Letzter Beitrag: sowerum
  If-Bedingung funktioniert nicht bei Serial1.write Datatom 6 226 16.09.2016 20:36
Letzter Beitrag: Datatom
  SD Karte wird nicht erkannt... Maxi290997 2 208 16.08.2016 14:36
Letzter Beitrag: Maxi290997
  Arduino lässt sich nicht mehr beschreiben Maxi290997 15 988 07.08.2016 11:40
Letzter Beitrag: Maxi290997

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste