Schrittmotor über RTC (DS1307) anfahren lassen

Hallo Leute,
ich habe ein Projekt am laufen und würde gerne einen Schrittmotor (200 Steps/1.8°) in Verbindung mit einem Schrittmotortreiber (Pololu a4988) per RTC morgens in eine Richtung starten, und abends wieder in die andere Richtung zurücklaufen lassen. Ich habe mir schon Gedanken gemacht wie, allerdings habe ich programmiertechnisch nicht alzu viel drauf.

Im Prinzip würde ich es gerne so umsetzten, dass ich sage:

" 1. Starte den Schrittmotor morgens um 8 Uhr und mach X schritte in eine Richtung, 2. Sobald es 21 Uhr ist, Fahre diese X Schritte wieder zurück, 3. Wenn möglich, sollte der Schrittmotor dies jeden Tag wieder aufs neue tun. ".

Der Dataloggingsketch und der Schrittmotorsketch laufen. Allerdings ist der Dataloggingsketch relativ umfangreich, wodurch ich garnicht weiß, wie ich starten könnte.

#include <SD.h>
#include <Wire.h>
#include "RTClib.h"

//Eingefügt aus TempSketch


#include <OneWire.h>
#include <DallasTemperature.h>




// Data wire is plugged into pin 9 on the Arduino
#define ONE_WIRE_BUS 9

// Setup a oneWire instance to communicate with any OneWire devices 
// (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

// Ende eingefügt TempSketch

// A simple data logger for the Arduino analog pins

// how many milliseconds between grabbing data and logging it. 1000 ms is once a second
#define LOG_INTERVAL  1000 // mills between entries (reduce to take more/faster data)

// how many milliseconds before writing the logged data permanently to disk
// set it to the LOG_INTERVAL to write each time (safest)
// set it to 10*LOG_INTERVAL to write all data every 10 datareads, you could lose up to 
// the last 10 reads if power is lost but it uses less power and is much faster!
#define SYNC_INTERVAL 1000 // mills between calls to flush() - to write data to the card
uint32_t syncTime = 0; // time of last sync()

#define ECHO_TO_SERIAL   1 // echo data to serial port
#define WAIT_TO_START    0 // Wait for serial input in setup()

// the digital pins that connect to the LEDs
#define redLEDpin 2
#define greenLEDpin 3

// The analog pins that connect to the sensors
#define photocellPin 0           // analog 0
#define tempPin 1                // digital 9
#define BANDGAPREF 14            // special indicator that we want to measure the bandgap


RTC_DS1307 RTC; // define the Real Time Clock object

// for the data logging shield, we use digital pin 10 for the SD cs line
const int chipSelect = 10;

// the logging file
File logfile;

void error(char *str)
{
  Serial.print("error: ");
  Serial.println(str);
  
  // red LED indicates error
  digitalWrite(redLEDpin, HIGH);

  while(1);
}

void setup(void)
{
  Serial.begin(9600);
  Serial.println();



//eingefügt aus TempSketch

 // Start up the library
 sensors.begin();


// Ende eingefügt TempSketch

  
  // use debugging LEDs
  pinMode(redLEDpin, OUTPUT);
  pinMode(greenLEDpin, OUTPUT);
  
#if WAIT_TO_START
  Serial.println("Type any character to start");
  while (!Serial.available());
#endif //WAIT_TO_START

  // initialize the SD card
  Serial.print("Initializing SD card...");
  // make sure that the default chip select pin is set to
  // output, even if you don't use it:
  pinMode(10, OUTPUT);
  
  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    error("Card failed, or not present");
  }
  Serial.println("card initialized.");
  
  // create a new file
  char filename[] = "LOGGER00.CSV";
  for (uint8_t i = 0; i < 100; i++) {
    filename[6] = i/10 + '0';
    filename[7] = i%10 + '0';
    if (! SD.exists(filename)) {
      // only open a new file if it doesn't exist
      logfile = SD.open(filename, FILE_WRITE); 
      break;  // leave the loop!
    }
  }
  
  if (! logfile) {
    error("couldnt create file");
  }
  
  Serial.print("Logging to: ");
  Serial.println(filename);

  // connect to RTC
  Wire.begin();  
  if (!RTC.begin()) {
    logfile.println("RTC failed");
#if ECHO_TO_SERIAL
    Serial.println("RTC failed");
#endif  //ECHO_TO_SERIAL
  }
  

  logfile.println("millis,stamp,datetime,light,temp");    
#if ECHO_TO_SERIAL
  Serial.println("millis,stamp,datetime,light,temp");
#endif //ECHO_TO_SERIAL
 
  // If you want to set the aref to something other than 5v
  // falls Aref benötigt wird --> analogReference(EXTERNAL);
}

void loop(void)
{

  DateTime now;

  // delay for the amount of time we want between readings
  delay((LOG_INTERVAL -1) - (millis() % LOG_INTERVAL));
  
  digitalWrite(greenLEDpin, HIGH);
  
  // log milliseconds since starting
  uint32_t m = millis();
  logfile.print(m);           // milliseconds since start
  logfile.print(", ");    
#if ECHO_TO_SERIAL
  Serial.print(m);         // milliseconds since start
  Serial.print(", ");  
#endif

  // fetch the time
  now = RTC.now();
  // log time
  logfile.print(now.unixtime()); // seconds since 1/1/1970
  logfile.print(", ");
  logfile.print('"');
  logfile.print(now.year(), DEC);
  logfile.print("/");
  logfile.print(now.month(), DEC);
  logfile.print("/");
  logfile.print(now.day(), DEC);
  logfile.print(" ");
  logfile.print(now.hour(), DEC);
  logfile.print(":");
  logfile.print(now.minute(), DEC);
  logfile.print(":");
  logfile.print(now.second(), DEC);
  logfile.print('"');
#if ECHO_TO_SERIAL
  Serial.print(now.unixtime()); // seconds since 1/1/1970
  Serial.print(", ");
  Serial.print('"');
  Serial.print(now.year(), DEC);
  Serial.print("/");
  Serial.print(now.month(), DEC);
  Serial.print("/");
  Serial.print(now.day(), DEC);
  Serial.print(" ");
  Serial.print(now.hour(), DEC);
  Serial.print(":");
  Serial.print(now.minute(), DEC);
  Serial.print(":");
  Serial.print(now.second(), DEC);
  Serial.print('"');
#endif //ECHO_TO_SERIAL




//Eingefügt aus TempSketch


 // call sensors.requestTemperatures() to issue a global temperature
 // request to all devices on the bus
 sensors.requestTemperatures(); // Send the command to get temperatures


   // Ende eingefügt aus TempSketch



   
  analogRead(photocellPin);
  delay(10); 
  int photocellReading = analogRead(photocellPin);



  //Eingefügt TempSketch
  float temperatur = sensors.getTempCByIndex(0);  
  
  //Ende Eingefügt TempSketch
  
  logfile.print(", ");    
  logfile.print(photocellReading);
  logfile.print(", ");
  logfile.print(temperatur);   
#if ECHO_TO_SERIAL
  Serial.print(", ");   
  Serial.print(photocellReading);
  Serial.print(", ");    
  Serial.print(temperatur);
#endif //ECHO_TO_SERIAL

  // Log the estimated 'VCC' voltage by measuring the internal 1.1v ref
  analogRead(BANDGAPREF); 
  delay(10);
  int refReading = analogRead(BANDGAPREF); 

  
  logfile.print(", ");
#if ECHO_TO_SERIAL
  Serial.print(", ");   
#endif // ECHO_TO_SERIAL

  logfile.println();
#if ECHO_TO_SERIAL
  Serial.println();
#endif // ECHO_TO_SERIAL

  digitalWrite(greenLEDpin, LOW);

  // Now we write data to disk! Don't sync too often - requires 2048 bytes of I/O to SD card
  // which uses a bunch of power and takes time
  if ((millis() - syncTime) < SYNC_INTERVAL) return;
  syncTime = millis();
  
  // blink LED to show we are syncing data to the card & updating FAT!
  digitalWrite(redLEDpin, HIGH);
  logfile.flush();
  digitalWrite(redLEDpin, LOW);
  
}

Die Zeile logfile.print(now.hour(), DEC); gibt mir ja die Stunden aus. Gibt es vlt schon jemanden, der so etwas schonmal realisiert hat, bzw. mir vlt. ein kleines Beispiel geben könnte? Oder gibt es vlt schon ähnliche Projekte, welche den Schrittmotor über eine RTC starten/stoppen? ich habe wirklich viel gesucht und leider nicht viel gefunden. Wäre nett wenn mir jemand antworten könnte, sodass ich das iwie hinbekomme. Vielen Dank schonmal. MfG Phil

Wenn ich von Deiner verbalen Beschreibung ausgehe, passt Der Sketch nicht dazu. Von Temperatur sagst Du nichts in der Beschreibung. Ist das ein Überbleibsel von Copy & Paste oder stimmt die Beschreibung nicht?

Wie hoch soll die Genauigkeit sein? Der DS1307 ist nicht sehr langzeitstabil.

Gruß Tommy

Tommy56:
Wenn ich von Deiner verbalen Beschreibung ausgehe, passt Der Sketch nicht dazu. Von Temperatur sagst Du nichts in der Beschreibung. Ist das ein Überbleibsel von Copy & Paste oder stimmt die Beschreibung nicht?

Wie hoch soll die Genauigkeit sein? Der DS1307 ist nicht sehr langzeitstabil.

Gruß Tommy

Entschuldigung, den Temperatursensor und die Fotodiode habe ich nicht erwähnt. Die Temperaturdaten und die Daten der Fotodiode möchte ich loggen,das klappt auch. Der Sketch ist für ein "ArdafruitDataloggingshield, welches ich auf dem Arduino betreibe. Das loggen der Daten auf einer Sd-Karte klappt auch wunderbar.

Zur Frage der Genauigkeit: Es ist nicht schlimm, wenn die Zeit sich über einen Zeitraum von etwa einem Monat um ein paar Minuten verschiebt, dessen bin ich mir bewusst! Das steuern des Motors, von "A nach B" , und von "B nach A" würde ich über millies realisieren, sodass der motor z.B. jede 10 min eine Umdrehung (200 Schritte) macht. Danke schonmal für den Hinweis und die Rückmeldung.

Wenn du ein kleines Beispiel willst, dann schmeiss doch erstmal den ganzen SD- und Temperatur-Kram raus und schreib selbst ein kleines Schrittmotor-Beispiel.

Dann schau in deiner Lieblings RTC-Library, wieviele Zeilen das reine Auslesen der Uhrzeit braucht.

Wenn du dann noch merkst, dass du nichtmal das ominöse bcdtobin bräuchtest, kannst du
#include “RTClib.h”
ersetzen durch

int getBCDHour() {
  // returns hhmm BCD-coded. Readable if printed as HEX 
  Wire.beginTransmission(0x68);
  Wire._I2C_WRITE((byte)0);	
  Wire.endTransmission();

  Wire.requestFrom(0x68, 3); // read time (3 bytes h:mm:ss)
  Wire._I2C_READ(); // sec ignore
  byte min = Wire._I2C_READ()); // min ignore
  return Wire._I2C_READ() << 8 | min;
}

bool tag;
void loop() {
  int time = getBCDHour();
  if (time >= 0x0800) tag = true;
  if (time >= 0x2100) tag = false;

  // zwischen 0 und 8 Uhr wird nichts gemacht
  // zwischen 8 und 21 Uhr ist tag : Schrittmotor bei Bedarf  Richtung +
  // ab 21 Uhr : tag = false : Schrittmotor bei Bedarf Richtung - 
...
  delay(60000L); // 1 Minute Pause

}

Zum Testen ist das natürlich Käse, weil es 13 Stunden dauert, in denen man kaum sieht was los ist.

Ausserdem:
wofür soll das gut sein?
woher weisst du wo der Motor steht, wenn der Arduino startet?

michael_x:
Wenn du ein kleines Beispiel willst, dann schmeiss doch erstmal den ganzen SD- und Temperatur-Kram raus und schreib selbst ein kleines Schrittmotor-Beispiel.

Dann schau in deiner Lieblings RTC-Library, wieviele Zeilen das reine Auslesen der Uhrzeit braucht.

Wenn du dann noch merkst, dass du nichtmal das ominöse bcdtobin bräuchtest, kannst du
#include “RTClib.h”
ersetzen durch

int getBCDHour() {

// returns hhmm BCD-coded. Readable if printed as HEX
  Wire.beginTransmission(0x68);
  Wire._I2C_WRITE((byte)0);
  Wire.endTransmission();

Wire.requestFrom(0x68, 3); // read time (3 bytes h:mm:ss)
  Wire._I2C_READ(); // sec ignore
  byte min = Wire._I2C_READ()); // min ignore
  return Wire._I2C_READ() << 8 | min;
}

bool tag;
void loop() {
  int time = getBCDHour();
  if (time >= 0x0800) tag = true;
  if (time >= 0x2100) tag = false;

// zwischen 0 und 8 Uhr wird nichts gemacht
  // zwischen 8 und 21 Uhr ist tag : Schrittmotor bei Bedarf  Richtung +
  // ab 21 Uhr : tag = false : Schrittmotor bei Bedarf Richtung -

  delay(60000L); // 1 Minute Pause

}



Zum Testen ist das natürlich Käse, weil es 13 Stunden dauert, in denen man kaum sieht was los ist.

Ausserdem: 
wofür soll das gut sein?
woher weisst du wo der Motor steht, wenn der Arduino startet?

Danke erstmal für die schnelle Antwort und das Beispiel!!ich werde mich erstmal reinfuchsen, das problem ist/war, ich brauche erstmal nen Anfang, den habe ich nun! vielen Dank!

In einem anderen Thema habe ich die RTC-Bibliothek von jurs verwendet. Die Funktion zeit() liefert true, wenn die aktuelle Zeit innerhalb der Zeitspanne liegt. Bei positiver Flanke in die eine Richtung, bei negativer in die andere. C&P ist erlaubt :slight_smile:

agmue:
In einem anderen Thema habe ich die RTC-Bibliothek von jurs verwendet. Die Funktion zeit() liefert true, wenn die aktuelle Zeit innerhalb der Zeitspanne liegt. Bei positiver Flanke in die eine Richtung, bei negativer in die andere. C&P ist erlaubt :slight_smile:

-hehe vielen Dank schonmal! mit c&p wirds nich getan sein, aber ich arbeite mich rein und hangel mich mal an dem Beispeil entlang! Vielen Dank!

Wenn du beim Hangeln stolperst, kannst du ja mal diese Version, die immerhin kompiliert, verwenden :wink:

#include <Wire.h>

int getBCDHour() {
  // returns hhmm BCD-coded. Readable if printed as HEX
  Wire.beginTransmission(0x68);
  Wire.write((byte)0);  
  Wire.endTransmission();

  Wire.requestFrom(0x68, 3); // read time (3 bytes h:mm:ss)
  Wire.read(); // sec ignore
  byte minute = Wire.read(); 
  return Wire.read() << 8 | minute;
}

michael_x:
Wenn du beim Hangeln stolperst, kannst du ja mal diese Version, die immerhin kompiliert, verwenden :wink:

#include <Wire.h>

int getBCDHour() {
  // returns hhmm BCD-coded. Readable if printed as HEX
  Wire.beginTransmission(0x68);
  Wire.write((byte)0); 
  Wire.endTransmission();

Wire.requestFrom(0x68, 3); // read time (3 bytes h:mm:ss)
  Wire.read(); // sec ignore
  byte minute = Wire.read();
  return Wire.read() << 8 | minute;
}

Besten Dank! allerdings muss ich erstmal “kleiner” Anfangen. Verstehe teilweise nur Bahnhof, aber ich denke, ich werde das/die Beispiele demnächst, wenn ich mich richtig eingearbeitet habe, bestimmt gebrauchen können! Vielen Dank schonmal!

Philovic:
mit c&p wirds nich getan sein, aber ich arbeite mich rein und hangel mich mal an dem Beispeil entlang!

So hatte ich es gemeint, erst Gehirn einschalten, dann C&P&L (Copy&Paste&Learn) :slight_smile:

Bei der Bibliothek habe ich zunächst das Beispiel zum Laufen gebracht, dann auf die für mich notwendige Funktionalität reduziert. Anschließend in den “großen” Sketch eingebaut.

Anbei mein Testsketch mit Bibliothek.

12.11.2017: Version ohne Warnungen hier im originalen Thema abgelegt.

dateTimeLibEasyDemo.ino (1.75 KB)

jursRTCtimeEasy.h (8.75 KB)

.. dann auf die für mich notwendige Funktionalität reduziert. Anschließend in den "großen" Sketch eingebaut.

Sehr richtig!
Laut deiner Beschreibung brauchst du nur Stunden ( und evtl. Minuten ) zu lesen. Die ganzen tollen Bibliotheken liefern Datum, Wochentag, Sekunden seit 1970, und allerlei anderen Pipapo. Bei einer DS1307 braucht man auch keine automatische So/Wi Umschaltung, die muss sowieso alle halbe Jahre gestellt werden.
Willst du zum Stellen der Uhr einen anderen Sketch laden? Wenn nicht, ist das nur nebenbei eine Frage der RTCLib sondern "wie teilst du dem Arduino die gewünschte neue Zeit mit?"

agmue:
So hatte ich es gemeint, erst Gehirn einschalten, dann C&P&L (Copy&Paste&Learn) :slight_smile:

Bei der Bibliothek habe ich zunächst das Beispiel zum Laufen gebracht, dann auf die für mich notwendige Funktionalität reduziert. Anschließend in den "großen" Sketch eingebaut.

Anbei mein Testsketch mit Bibliothek.

Vielen Dank, der Sketch ist deutlich übersichtlicher und da kann ich schon eher folgen :slight_smile: Ich arbeite mich langsam rein ! werde mich bei Gelegenheit sicher nochmal melden,besten dank!

michael_x:
Sehr richtig!
Laut deiner Beschreibung brauchst du nur Stunden ( und evtl. Minuten ) zu lesen. Die ganzen tollen Bibliotheken liefern Datum, Wochentag, Sekunden seit 1970, und allerlei anderen Pipapo. Bei einer DS1307 braucht man auch keine automatische So/Wi Umschaltung, die muss sowieso alle halbe Jahre gestellt werden.
Willst du zum Stellen der Uhr einen anderen Sketch laden? Wenn nicht, ist das nur nebenbei eine Frage der RTCLib sondern "wie teilst du dem Arduino die gewünschte neue Zeit mit?"

Genau, ich brauche wahrscheinlich nur Stunden. Und richtig, die Bibliotheken liefern mir Datum und Sekunden seit 1970, das habe ich schon mitbekommen,das werde ich natürlich nicht brauchen! Die SO/WI- Umstellung werde ich sicher auch nicht brauchen! Ja, ich möchte natürluc einen anderen Sketch laden, nur ich bin noch ziemlich am Anfang und habe echt wenig Basiswissen. Die Zeit gesetzt habe ich ja über rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));, wobei das Datum für meine Messwerte eventuell sinnvoll ist. Über DateTime now = rtc.now(); kann ich mir die aktuelle Zeit ja ausgeben lassen. Allerdings fragtest du ich einem vorigen post " Woher weißt du wo der Motor steht, wenn der Arduino startet". Das hatte ich erst nich berücksichtigt, und würde dies gerne über einen Schalter machen, Ich habe einen Motor mit einer gewindestange drauf, auf die Gewindestange ist eine Mutter geschraubt. Vom Prinzip her : 1. Arduino starten und den den Motor so weit drehen, dass die Mutter gegen den Schalter fährt. 2. Wenn Schalter betätigt, die Uhrzeit auslesen. 3. Je nachdem welche Uhrzeit, sollte der Motor dann X Schritte nach links oder rechts drehen (Um in die aktuelle Position zu fahren). 4. Wenn aktuelle Position erreicht, wahrscheinlich dann über die loop in ca. 10 min Schritten immer ein bisschen weiter fahren, bis Endposition (Abends ca. 21 Uhr) erreicht ist, und dann wieder in Anfangsposition fahren und morgens wieder um ca. 8 UHr das gleiche...Wie gesagt, ich bin noch am Anfang und arbeite mich langsam rein. Danke schonmal für eure/deine Tipps bzw. Fragen, welche sehr hilfsreich sind! MfG

Philovic:
Vielen Dank, der Sketch ist deutlich übersichtlicher und da kann ich schon eher folgen :slight_smile:

Wenn Du ohne Bibliothek einsteigen möchtest und Du Englisch verstehst, ist dies mein Favorit: Tutorial – Using DS1307 and DS3231 Real-time Clock Modules with Arduino

Ich habe mit diesem Text angefangen, weil es zumindest für mich leichter war, als so manche RTC-Bibliothek zu verstehen. Aber das hängt natürlich vom Vorwissen ab. Etwas bei jurs abschauen und etwas bei John Boxall sollte Dich zum Ziel führen :slight_smile:

agmue:
Wenn Du ohne Bibliothek einsteigen möchtest und Du Englisch verstehst, ist dies mein Favorit: Tutorial – Using DS1307 and DS3231 Real-time Clock Modules with Arduino

Ich habe mit diesem Text angefangen, weil es zumindest für mich leichter war, als so manche RTC-Bibliothek zu verstehen. Aber das hängt natürlich vom Vorwissen ab. Etwas bei jurs abschauen und etwas bei John Boxall sollte Dich zum Ziel führen :slight_smile:

Hehe danke mal wieder! Also mit der Uhr komme ich sowit klar. Aber werde mir den Link auch mal zu Gemühte führen :slight_smile: Ich habe mir jetzt mal nur die Stunden ausgeben lassen und Datum , Sekunden usw. weggelassen.
Somit bekomme ich gerade nur “16” ausgegeben, ihr werdet lachen aber so werde ich nicht unnötig verwirrt mit zig Zeilen Code (auch wenn er wahrscheinlich “einfach” ist)

// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
#include <Wire.h>
#include "RTClib.h"


RTC_DS1307 rtc;

void setup () {



  Serial.begin(57600);
  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    // !!! auskommentiert rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    //rtc.adjust(DateTime(2016, 7, 5, 14, 26, 0));
  }
}

void loop () {
    DateTime now = rtc.now();
    
    Serial.print(now.hour(), DEC);
    Serial.println();
    delay(2000);
    
    
    

}

Jetzt bin ich dabei eine If-else Anweisung zu schreiben, mit einem Button der abfragt ob die Zeit = “16” ist, wenn ja

digitalWrite(StepPin, HIGH);

, wenn nein

digitalWrite(StepPin, LOW);

, meint ihr damit bin ich auf dem richtigen weg? Ich versuchs einfach mal, komme langsam, sehr langsam vorran aber merke dass ich immer ein bisschen weiter vorran komme.Danke schonmal. MfG

Jetzt bin ich dabei eine If-else Anweisung zu schreiben, mit einem Button der abfragt ob die Zeit = "16" ist

Ich verstehe jetzt nicht, was ein "Button" ist.

Was hältst du davon die LED_BUILTIN (üblicherweise Pin 13) leuchten zu lassen: Wenn die Stunde == 16 ist an, sonst aus.

Zum Testen würde ich erstmal natürlich lieber Sekunde statt Stunde nehmen, ist nicht so zeitraubend und erheblich spannender.

Die nächste Herausforderung wäre dann: im Bereich 8 bis 21 LED an, sonst aus.

Dann erstmal im setup deinen Schrittmotor per Endschalter auf einen gewünschte Anfangsposition fahren.

Die übernächste Herausforderung: je nach Phase (an /aus) deinen Schrittmotor langsam in die zugehörige Sollposition zu fahren und dort zu bleiben.

michael_x:
Ich verstehe jetzt nicht, was ein “Button” ist.

Was hältst du davon die LED_BUILTIN (üblicherweise Pin 13) leuchten zu lassen: Wenn die Stunde == 16 ist an, sonst aus.

Zum Testen würde ich erstmal natürlich lieber Sekunde statt Stunde nehmen, ist nicht so zeitraubend und erheblich spannender.

Die nächste Herausforderung wäre dann: im Bereich 8 bis 21 LED an, sonst aus.

Dann erstmal im setup deinen Schrittmotor per Endschalter auf einen gewünschte Anfangsposition fahren.

Die übernächste Herausforderung: je nach Phase (an /aus) deinen Schrittmotor langsam in die zugehörige Sollposition zu fahren und dort zu bleiben.

Heyho, mit Button meinte ich einen Schalter/taster, sry. Das mit der LED ist eine super Idee! xD Ja klar und dann werde ich es natürlich erstmal mit Sekunden testen! xD macht sonst wenig Sinn :slight_smile: Danke schonmal für die Anregungen! Ich werde berichten! MfG

Heyho, mit Button meinte ich einen Schalter/taster, sry

Das dachte ich mir schon, nur warum brachst du für dein großartigesifeinen Button/Schalter/taster ?

Viel Spass!

michael_x:
Das dachte ich mir schon, nur warum brachst du für dein großartigesifeinen Button/Schalter/taster ?

Viel Spass!

Ich dachte, dass es mit einer If-Else-Schleife ein einfacher weg wäre, im Prinzip zu sagen WENN der Wert 20 (Sekunde) dann HIGH ansonsten LOW, wie gesagt ich bin totaler Anfänger aber ich teste mal einfach rum, auch wenn ich bei Dir bestimmt starkes Kopfschütteln verursache :slight_smile: MfG

#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 rtc;

int GreenLedPin = 3;
int RedLedPin = 2;
int TasterPin = 13;

int MeinWert;

void setup(){

Serial.begin(57600);
  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
  }

  pinMode(GreenLedPin,OUTPUT);
  pinMode(TasterPin,INPUT);
}

void loop(){

DateTime now = rtc.now();
    
    Serial.print(now.second(), DEC);
    Serial.println();
    delay(1000);
  
  if (now.second()==10 )
  {
  digitalWrite(GreenLedPin, HIGH);
  delay(1000);
  digitalWrite(GreenLedPin, LOW);
  }
  /*
  else if (now.second()==15 )
  {
  digitalWrite(GreenLedPin, LOW);
  }*/
}

So, das hab ich nun hinbekommen mit ner LED, und mit dem Motor wär das dann das gleiche Prinzip, also StepPin dann auf High oder Low? Danke schonmal, bin froh das ich wenigstens schonmal einen Schritt (auch wenns ein kleiner ist) weiter bin! MfG