PDA

Επιστροφή στο Forum : Arduino IR remote control



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;

}

info@kalarakis.com
23-06-18, 07:55
Βαλε μμια παραμετρο Εχεπερασει25 εαν ναι στειλε 30βαθμους αν οχι μη κανεις τιποτα
Τη οποια τη μηδενιζεις στους 25

kostas_90210
23-06-18, 10:43
Καλημέρα και ευχαριστώ για την απάντηση!

Ότι δοκίμασα, το μόνο που κατάφερα ήταν να παγώσει όλο το πρόγραμμα μετά τους 30 και να επανέλθει πάλι κάτω από τα 30. Σίγουρα δεν το κατάλαβα σωστά. :confused1:

Kernel Panic
23-06-18, 14:40
δοκίμασε το έτσι, εκτιμώ οτι θα σου δουλέψει, μετά ψάξε για το λάθος σου.


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;
}
}

kostas_90210
23-06-18, 18:24
δοκίμασε το έτσι, εκτιμώ οτι θα σου δουλέψει, μετά ψάξε για το λάθος σου.


Όχι, δεν το δέχεται καν έτσι. Βγάζει expected '}' before 'else.
Αν βάλω '}' πριν το 'elseΆ το δέχεται αλλά δεν αλλάζει όπως το θέλω

FreeEnergy
23-06-18, 19:49
bool over_30 = false;

void loop() {

if (rtc.getTemp() - 18.7 >= 33 && !over_30 ) {
over_30 = true;
[Εδώ ο κώδικας για το τι θες να κάνει όταν η θερμοκρασία είναι πάνω από 30 βαθμούς]
}

if (rtc.getTemp() - 18.7 <= 25) {
over_30 = false;
[Εδώ ο κώδικας για το τι θες να κάνει όταν η θερμοκρασία είναι κάτω από 25 βαθμούς]
}
}

Μήπως έτσι είναι πιο ...απλό;

kostas_90210
23-06-18, 21:21
Μήπως έτσι είναι πιο ...απλό;


Νομίζω ότι λειτουργεί σωστά. Βέβαια με κάποιες μικρές αλλαγές. Σε ευχαριστώ πάρα πολύ όπως και όλα τα παιδιά που ασχολήθηκαν!!!!
:001_rolleyes:





bool over_33 = false;
bool over_30 = false;



void loop() {

if (rtc.getTemp() - 18.7 >= 33 && !over_33 ) {
over_33 = true;
over_30 = false;
Beep();
digitalWrite(relay, LOW);
irsend.sendRaw(power, 67, 32);
digitalWrite(relay, HIGH);
delay(500); }

if (rtc.getTemp() - 18.7 <= 30 && !over_30) {
over_30 = true;

over_33 = false;
Beep();
digitalWrite(relay, LOW);
irsend.sendRaw(power, 67, 32);
digitalWrite(relay, HIGH);
delay(500);
}
}