Pages: [1] 2 3   Go Down
Author Topic: Einfache if-Abfrage  (Read 2156 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo erstmals

und zwar ich habe eine einfache If Abfrage die nicht ganz so funktioniert wie sie soll.

In der Variable StandortErde steht ob ein Eingang HIGH oder LOW ist.

Wenn der Befehl "stepper.step(1);" nicht in der If Schleife steht funktioniert er.
Wenn der Eingang auf HIGH ist passiert garnichts.
Doch beim Wechsel von HIGH auf LOW macht der Schrittmotor 1 Schritt.

Die Else Verwzeigung ist nur dazu da den Schrittmotor abzuschalten.
Diese funktioniert einwandfrei.

if (StandortErde == HIGH){
    stepper.step(1);
    delay(100);
    zaehler = zaehler + 1;
}
else{
     digitalWrite(8,LOW);
     digitalWrite(9,LOW);
     digitalWrite(10,LOW);
     digitalWrite(11,LOW);
     zaehler = 0;
}
Logged

Germany
Offline Offline
Edison Member
*
Karma: 44
Posts: 2261
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bitte den gesamten Code, und zwar in Code-Tags (#-Zeichen). smiley-wink
Logged

Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Also der Motor hängt an pin 8,9,10,11

und der Taster an Pin 4

Code:
#include <Time.h>
#include <DCF77.h>
#include <Utils.h>
#include <Stepper.h>

// change this to the number of steps on your motor


// create an instance of the stepper class, specifying
// the number of steps of the motor and the pins it's
// attached to
Stepper stepper(100, 8, 9, 10, 11);

boolean debug = true;
int serspeed = 9600 ;
int StandortErde = 0;
int zaehler = 0;


#define DCF_PIN 2          // Connection pin to DCF 77 device
#define DCF_INTERRUPT 0 // Interrupt number associated with pin

time_t time;
DCF77 DCF = DCF77(DCF_PIN,DCF_INTERRUPT);


void setup()
{

  Serial.begin(serspeed);
  stepper.setSpeed(1);

  if(debug)
  {
    Serial.println("Debugging aktiviert");
  }
  DCF.Start();
}


void loop(){

  time_t DCFtime = DCF.getTime(); // Check if new DCF77 time is available

    if ((DCFtime!=0) && (debug = true))
  {
    Serial.println("Time is updated");
    setTime(DCFtime);
  }
  digitalClockDisplay(); 



  if(debug = true){

    //  Serial.print("Zähler: ");
    //Serial.println(zaehler);
    Serial.print("Standort: ");
    Serial.println(digitalRead(4)); 
  }


  StandortErde = digitalRead(4);   


  if (StandortErde == HIGH){
    stepper.setSpeed(1);
    stepper.step(1);
    zaehler = zaehler + 1;
  }
  else{
    digitalWrite(8,LOW);
    digitalWrite(9,LOW);
    digitalWrite(10,LOW);
    digitalWrite(11,LOW);
    zaehler = 0;
  }

  delay(1000); 


}


void digitalClockDisplay(){
  // digital clock display of the time
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.print(" ");
  Serial.print(day());
  Serial.print(" ");
  Serial.print(month());
  Serial.print(" ");
  Serial.print(year());
  Serial.println();
}

void printDigits(int digits){
  // utility function for digital clock display: prints preceding colon and leading 0
  Serial.print(":");
  if(digits < 10)
    Serial.print('0');
  Serial.print(digits);
}
Logged

Germany
Offline Offline
Edison Member
*
Karma: 44
Posts: 2261
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich stelle mal einfach ein
Code:
pinMode(4, INPUT);
in den Raum, besser noch in die setup(). smiley-grin

[edit] Pull-Down-Widerstand nicht vergessen!
Logged

Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich habe einen Pull up Widerstand verwendet.

Funktioniert auch.
Logged

Germany
Offline Offline
Edison Member
*
Karma: 44
Posts: 2261
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich habe einen Pull up Widerstand verwendet.

Funktioniert auch.

Wenn du in der if-Anweisung auf HIGH prüfst, der Pin aber per Pullup permanent auf HIGH gezogen wird, so läuft dein Motor die ganze Zeit. Oder hast du deinen Code auf die Abfrage nach LOW-Pegel umgestellt? Interner oder externer Pullup verwendet?
Logged

Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oh entschuldige ich habe mich verschaut.

Es ist ein externer Pulldown Widerstand

Edit:

Mir ist aufgefallen wenn ich den Taster auslasse dass der Schrittmotor 1 Schritt macht und danach wieder aufhört.
« Last Edit: November 15, 2012, 06:18:52 am by stock95 » Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 96
Posts: 4682
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
  delay(1000); 

Wenn Du Deinen Taster länger als ein Sekunde drückst, wird sich der Motor langsam bewegen.

Nimm den delay() raus und der Taster funktioniert wahrscheinlich wie gewünscht.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nein tut er nicht.

ich habe ihn schon länger als 10 Sekunden gedrückt
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 49
Posts: 2725
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Du hast doch eine Menge Debug-Ausgaben eingebaut, deren Ergebnis wir aber nicht kennen.
Hängt das ganze evtl. für 2 Minuten in    DCF.getTime();    bis die DCF-Uhr ein Signal hat?

Du solltest einen guten Wissens-Vorsprung haben gegen unsere Rate-Versuche.

Übrigens, nur am Rande: 
Code:
  if(debug = true){
sorgt dafür, dass debug eingeschaltet wird. Aber das willst du ja sowieso smiley-wink
Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1397
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

kleiner Tipp, schalte doch einfach erstmal alle anderen Fehlerquellen aus und lass nur das Abfragen Deines Tasters und den "if-Block" in der loop(). Dann wirst Du sehen, ob Du bei gedrücktem Taster jede Sekunde einen Step bekommst.
Im übrigen ist es sicher nicht notwendig jede Sekunde die DCF-Zeit zu prüfen.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nein es verhält sich genauso wie vorher.
Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1397
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

wie sieht der abgespeckte Test-Sketch denn nun aus?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
#include <Stepper.h>

Stepper stepper(100, 8, 9, 10, 11);


void setup(){
    stepper.setSpeed(1);
 
}


void loop(){
 
   if (digitalRead(4) == HIGH){
    stepper.setSpeed(1);
    stepper.step(1);
  }
  else{
    digitalWrite(8,LOW);
    digitalWrite(9,LOW);
    digitalWrite(10,LOW);
    digitalWrite(11,LOW);
   
  }

  delay(1000);
 
 
 
 
 
 
 
 
 
 
}
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 96
Posts: 4682
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
  delay(1000);

Nimm das delay() raus, das erschwert Dir nur die Arbeit beim Debuggen, da Du immer eine Sekunde auf jeden Step warten musst. Dein Motor macht eine hundertstel Umdrehung pro Sekunden, Du wirst also mit dem delay() kaum eine Aktivität registrieren, selbst wenn sie stattfindet.
Logged

Pages: [1] 2 3   Go Up
Jump to: