kostas_90210
23-06-18, 03:04
Καλησπέρα.
Έχω ένα mega 2560 και θέλω να ανοίγω – κλείνω ένα κλιματιστικό ανάλογα την θερμοκρασία με υπέρυθρες.
Όταν φτάνει 30 στέλνει το σήμα μια φορά και ξανά το ίδιο σήμα στους 25 βαθμούς.
Το πρόβλημα είναι ότι αν φτάνοντας στους 30 θα στείλει σήμα για να ενεργοποιηθεί το κλιματιστικό αλλά στην περίπτωση που αρχίσει η θερμοκρασία να ανεβαίνει θα ξαναστείλει με αποτέλεσμα να κλείσει το κλιματιστικό.
Εγώ θα ήθελα να μην στείλει δεύτερη φορά σήμα στους 30 βαθμούς αν δεν έχει φτάσει πρώτα στους 25.
Αυτό το έχω καταφέρει μόνο στην περίπτωση των 25 βαθμών.
bool gotHot = false;
bool doCold = false;
void loop() {
if (rtc.getTemp() - 18.7 >= 33) {
if ( !gotHot )
{
Beep();
digitalWrite(relay, LOW);
irsend.sendRaw(power, 67, 32);
digitalWrite(relay, HIGH);
delay(500);
doCold = true;
} // if
gotHot = true;
} else {
gotHot = false;
}
if ( doCold && (rtc.getTemp() - 18.7 <= 29) ) {
doCold = false;
Beep();
digitalWrite(relay, LOW);
irsend.sendRaw(power, 67, 32);
digitalWrite(relay, HIGH);
delay(500);
gotHot = true;
}
Έχω ένα mega 2560 και θέλω να ανοίγω – κλείνω ένα κλιματιστικό ανάλογα την θερμοκρασία με υπέρυθρες.
Όταν φτάνει 30 στέλνει το σήμα μια φορά και ξανά το ίδιο σήμα στους 25 βαθμούς.
Το πρόβλημα είναι ότι αν φτάνοντας στους 30 θα στείλει σήμα για να ενεργοποιηθεί το κλιματιστικό αλλά στην περίπτωση που αρχίσει η θερμοκρασία να ανεβαίνει θα ξαναστείλει με αποτέλεσμα να κλείσει το κλιματιστικό.
Εγώ θα ήθελα να μην στείλει δεύτερη φορά σήμα στους 30 βαθμούς αν δεν έχει φτάσει πρώτα στους 25.
Αυτό το έχω καταφέρει μόνο στην περίπτωση των 25 βαθμών.
bool gotHot = false;
bool doCold = false;
void loop() {
if (rtc.getTemp() - 18.7 >= 33) {
if ( !gotHot )
{
Beep();
digitalWrite(relay, LOW);
irsend.sendRaw(power, 67, 32);
digitalWrite(relay, HIGH);
delay(500);
doCold = true;
} // if
gotHot = true;
} else {
gotHot = false;
}
if ( doCold && (rtc.getTemp() - 18.7 <= 29) ) {
doCold = false;
Beep();
digitalWrite(relay, LOW);
irsend.sendRaw(power, 67, 32);
digitalWrite(relay, HIGH);
delay(500);
gotHot = true;
}