Hallo,
benutze für ein Projekt einen Arduino UNO, NEMA 17, RTC mit DS1302, Stepperdriver A4988 und einen Expansion Board für den Stepperdriver. Der Schrittmotor soll zu bestimmten Uhrzeiten sich drehen.
Wenn die Uhrzeiten ein paar Minuten in der Zukunft liegen, dann funktioniert alles einwandfrei, sobald die zeitgesteuerte Aktion weiter weg liegt, passiert nichts mehr.
Hier ist der Code den ich geschrieben habe, nicht elegant mit den If-Abfragen-Verschachtelungen, aber dadran liegt es nicht?
#include <DS1302.h>
DS1302 rtc(10, 9 ,8);
int stepCounter;
int steps = 1600;
void setup() {
Serial.begin(9600);
pinMode(6, OUTPUT); // Enable
pinMode(5, OUTPUT); // Step
pinMode(4, OUTPUT); // Richtung
digitalWrite(6,LOW);
}
void loop() {
Serial.println(rtc.getTimeStr());
Serial.println(rtc.getMonthStr());
if(strcmp(rtc.getMonthStr(), "August") == 0)
{
if(strcmp(rtc.getTimeStr(FORMAT_SHORT), "21:45") == 0)
{
digitalWrite(4,HIGH); // gegen den Uhrzeigersinn
for(stepCounter = 0; stepCounter < steps; stepCounter++)
{
digitalWrite(5,LOW);
delayMicroseconds(800);
digitalWrite(5,HIGH);
delayMicroseconds(800);
}
delay(60000);
};
if(strcmp(rtc.getTimeStr(FORMAT_SHORT), "11:10") == 0)
{
digitalWrite(4,LOW); // im Uhrzeigersinn
for(stepCounter = 0; stepCounter < steps; stepCounter++)
{
digitalWrite(5,LOW);
delayMicroseconds(800);
digitalWrite(5,HIGH);
delayMicroseconds(800);
}
delay(60000);
};
};
if(strcmp(rtc.getMonthStr(), "September") == 0)
{
if(strcmp(rtc.getTimeStr(FORMAT_SHORT), "21:00") == 0)
{
digitalWrite(4,HIGH); // gegen den Uhrzeigersinn
for(stepCounter = 0; stepCounter < steps; stepCounter++)
{
digitalWrite(5,LOW);
delayMicroseconds(800);
digitalWrite(5,HIGH);
delayMicroseconds(800);
}
delay(60000);
};
if(strcmp(rtc.getTimeStr(FORMAT_SHORT), "06:30") == 0)
{
digitalWrite(4,LOW); // im Uhrzeigersinn
for(stepCounter = 0; stepCounter < steps; stepCounter++)
{
digitalWrite(5,LOW);
delayMicroseconds(800);
digitalWrite(5,HIGH);
delayMicroseconds(800);
}
delay(60000);
};
};
if(strcmp(rtc.getMonthStr(), "October") == 0)
{
if(strcmp(rtc.getTimeStr(FORMAT_SHORT), "19:30") == 0)
{
digitalWrite(4,HIGH); // gegen den Uhrzeigersinn
for(stepCounter = 0; stepCounter < steps; stepCounter++)
{
digitalWrite(5,LOW);
delayMicroseconds(800);
digitalWrite(5,HIGH);
delayMicroseconds(800);
}
delay(60000);
};
if(strcmp(rtc.getTimeStr(FORMAT_SHORT), "07:30") == 0)
{
digitalWrite(4,LOW); // im Uhrzeigersinn
for(stepCounter = 0; stepCounter < steps; stepCounter++)
{
digitalWrite(5,LOW);
delayMicroseconds(800);
digitalWrite(5,HIGH);
delayMicroseconds(800);
}
delay(60000);
};
};
if(strcmp(rtc.getMonthStr(), "November") == 0)
{
if(strcmp(rtc.getTimeStr(FORMAT_SHORT), "18:30") == 0)
{
digitalWrite(4,HIGH); // gegen den Uhrzeigersinn
for(stepCounter = 0; stepCounter < steps; stepCounter++)
{
digitalWrite(5,LOW);
delayMicroseconds(800);
digitalWrite(5,HIGH);
delayMicroseconds(800);
}
delay(60000);
};
if(strcmp(rtc.getTimeStr(FORMAT_SHORT), "08:30") == 0)
{
digitalWrite(4,LOW); // im Uhrzeigersinn
for(stepCounter = 0; stepCounter < steps; stepCounter++)
{
digitalWrite(5,LOW);
delayMicroseconds(800);
digitalWrite(5,HIGH);
delayMicroseconds(800);
}
delay(60000);
};
};
if(strcmp(rtc.getMonthStr(), "December") == 0)
{
if(strcmp(rtc.getTimeStr(FORMAT_SHORT), "18:00") == 0)
{
digitalWrite(4,HIGH); // gegen den Uhrzeigersinn
for(stepCounter = 0; stepCounter < steps; stepCounter++)
{
digitalWrite(5,LOW);
delayMicroseconds(800);
digitalWrite(5,HIGH);
delayMicroseconds(800);
}
delay(60000);
};
if(strcmp(rtc.getTimeStr(FORMAT_SHORT), "09:00") == 0)
{
digitalWrite(4,LOW); // im Uhrzeigersinn
for(stepCounter = 0; stepCounter < steps; stepCounter++)
{
digitalWrite(5,LOW);
delayMicroseconds(800);
digitalWrite(5,HIGH);
delayMicroseconds(800);
}
delay(60000);
};
};
delay(1000);
}
Hat jemand eine Idee? :-[