Guten Abend,
ich habe einen Lüfter (5V) an ein Arduino Nano Board angeschlossen, der regelmässig alle 10s für 5 Sekunden angeschalten werden soll. Zusätzlich dazu soll eine LED mit Vorwiderstand mit einem Verzug von 2s nach Einschalten des Lüfters aktiviert werden und 2 Sekunden nach Ausschalten des Lüfters deaktiviert werden.
Ich habe den ganzen Abend mit Versuchen verbracht - leider ohne das gewünschte Ergebnis. Nachfolgend meine vier Versuchsvarianten. Eine Korrektur beziehungsweise Aufklärung was hier falsch läuft würde mir sehr helfen.
Achja, falls es wichtig ist: Später soll der Lüfter nicht regelmässig an-und ausschalten sondern von der gemessenen Temperatur eines Sensors getriggert werden. Was aber absolut gleich bleibt sind die 2 Sekunden Verzug, mit denen die LED dem Status des Lüfters folgen soll.
Vielen Dank und gute Nacht
const int Luefter = 9;
const int LED = 5;
unsigned long LuefterPreviousTime = 0;
const long LuefterInterval = 10000;
const long LuefterTime = 5000;
unsigned long LEDMerkerON = 0;
unsigned long LEDMerkerOFF = 0;
const long LEDVerzug = 2000;
void setup() {
Serial.begin(9600);
pinMode(Luefter, OUTPUT);
digitalWrite(Luefter, LOW);
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
}
void loop() {
//Serial.println(String("LuefterPreviousTime: ") + String(LuefterPreviousTime));
//Serial.println(String("LEDMerkerON: ") + String(LEDMerkerON));
//Serial.println(String("LEDMerkerOFF: ") + String(LEDMerkerOFF));
if (millis() - LuefterPreviousTime > LuefterInterval){
digitalWrite(Luefter, HIGH);
LEDMerkerON = millis();
LuefterPreviousTime = millis();}
if (millis() - LuefterPreviousTime > LuefterTime){
digitalWrite(Luefter, LOW);
LEDMerkerOFF = millis();}
if (LEDMerkerON + LEDVerzug <= millis()){
digitalWrite (LED, HIGH);}
if (LEDMerkerOFF + LEDVerzug <= millis()){
digitalWrite (LED, LOW);}
}
--> LED und Lüfter laufen nicht synchron. Beispielsweise aktiviert die LED bevor der Lüfter überhaupt erstmals loslegt. Das kann nicht stimmen. Der Lüftertakt stimmt aber.
const int Luefter = 9;
const int LED = 5;
unsigned long LuefterPreviousTime = 0;
const long LuefterInterval = 10000;
const long LuefterTime = 5000;
unsigned long LEDMerkerON = 0;
unsigned long LEDMerkerOFF = 0;
const long LEDVerzug = 2000;
void setup() {
Serial.begin(9600);
pinMode(Luefter, OUTPUT);
digitalWrite(Luefter, LOW);
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
}
void loop() {
//Serial.println(String("LuefterPreviousTime: ") + String(LuefterPreviousTime));
//Serial.println(String("LEDMerkerON: ") + String(LEDMerkerON));
//Serial.println(String("LEDMerkerOFF: ") + String(LEDMerkerOFF));
if (millis() - LuefterPreviousTime > LuefterInterval){
digitalWrite(Luefter, HIGH);
LEDMerkerON = millis();
LuefterPreviousTime = millis();
if (LEDMerkerON + LEDVerzug <= millis()){
digitalWrite (LED, HIGH);}}
if (millis() - LuefterPreviousTime > LuefterTime){
digitalWrite(Luefter, LOW);
LEDMerkerOFF = millis();
if (LEDMerkerOFF + LEDVerzug <= millis()){
digitalWrite (LED, LOW);}}
}
--> Die LED aktiviert sich gar nicht (der Lüftertakt ist korrekt).
const int Luefter = 9;
const int LED = 5;
unsigned long LuefterPreviousTime = 0;
const long LuefterInterval = 10000;
const long LuefterTime = 5000;
unsigned long LEDMerkerON = 0;
unsigned long LEDMerkerOFF = 0;
const long LEDVerzug = 2000;
void setup() {
Serial.begin(9600);
pinMode(Luefter, OUTPUT);
digitalWrite(Luefter, LOW);
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
}
void loop() {
//Serial.println(String("LuefterPreviousTime: ") + String(LuefterPreviousTime));
//Serial.println(String("LEDMerkerON: ") + String(LEDMerkerON));
//Serial.println(String("LEDMerkerOFF: ") + String(LEDMerkerOFF));
if (millis() - LuefterPreviousTime > LuefterInterval){
digitalWrite(Luefter, HIGH);
LEDMerkerON = millis();
LuefterPreviousTime = millis();
if (Luefter == HIGH && LEDMerkerON + LEDVerzug <= millis()){
digitalWrite (LED, HIGH);}}
if (millis() - LuefterPreviousTime > LuefterTime){
digitalWrite(Luefter, LOW);
LEDMerkerOFF = millis();
if (Luefter == LOW && LEDMerkerOFF + LEDVerzug <= millis()){
digitalWrite (LED, LOW);}}
}
--> Auch hier bleibt die LED komplett inaktiv (der Lüftertakt ist wieder korrekt).
const int Luefter = 9;
const int LED = 5;
unsigned long LuefterPreviousTime = 0;
const long LuefterInterval = 10000;
const long LuefterTime = 5000;
unsigned long LEDMerkerON = 0;
unsigned long LEDMerkerOFF = 0;
const long LEDVerzug = 2000;
void setup() {
Serial.begin(9600);
pinMode(Luefter, OUTPUT);
digitalWrite(Luefter, LOW);
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
}
void loop() {
//Serial.println(String("LuefterPreviousTime: ") + String(LuefterPreviousTime));
//Serial.println(String("LEDMerkerON: ") + String(LEDMerkerON));
//Serial.println(String("LEDMerkerOFF: ") + String(LEDMerkerOFF));
if (millis() - LuefterPreviousTime > LuefterInterval){
digitalWrite(Luefter, HIGH);
LEDMerkerON = millis();
LuefterPreviousTime = millis();}
if (millis() - LuefterPreviousTime > LuefterTime){
digitalWrite(Luefter, LOW);
LEDMerkerOFF = millis();}
if (Luefter == HIGH && LEDMerkerON + LEDVerzug <= millis()){
digitalWrite (LED, HIGH);}
if (Luefter == LOW && LEDMerkerOFF + LEDVerzug <= millis()){
digitalWrite (LED, LOW);}
}
--> leider das gleiche Ergebnis wie 2) und 3).