# Συζήτηση Κυκλωμάτων > Ψηφιακά Κυκλώματα > Μικροελεγκτές >  >  Arduino IR remote control

## kostas_90210

Καλησπέρα.
 Έχω ένα 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

Βαλε μμια παραμετρο Εχεπερασει25 εαν ναι στειλε 30βαθμους αν οχι μη κανεις τιποτα 
Τη οποια τη μηδενιζεις στους 25

----------


## kostas_90210

Καλημέρα  και  ευχαριστώ για  την απάντηση!

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

----------


## Kernel Panic

δοκίμασε το έτσι, εκτιμώ οτι θα σου δουλέψει, μετά ψάξε για το λάθος σου.



```
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

> δοκίμασε το έτσι, εκτιμώ οτι θα σου δουλέψει, μετά ψάξε για το λάθος σου.



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

----------


## FreeEnergy

```
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

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




                         Νομίζω ότι λειτουργεί σωστά.  Βέβαια  με  κάποιες  μικρές αλλαγές.    Σε  ευχαριστώ πάρα πολύ όπως και  όλα τα παιδιά που ασχολήθηκαν!!!!
 :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);
  }
 }
```

----------

