Помогите подредактировать код

Тема в разделе "Arduino & Shields", создана пользователем Максим B, 18 янв 2014.

  1. Максим B

    Максим B Гуру

    Код (Text):
    #include <IRremote.h>

    int RECV_PIN = 2;
    int RELAY_PIN = 4;

    IRrecv irrecv(RECV_PIN);
    decode_results results;

    // Dumps out the decode_results structure.
    // Call this after IRrecv::decode()
    // void * to work around compiler issue
    //void dump(void *v) {
    //  decode_results *results = (decode_results *)v
    void dump(decode_results *results) {
      int count = results->rawlen;
      if (results->decode_type == UNKNOWN) {
        Serial.println("Could not decode message");
      }
      else {
        if (results->decode_type == NEC) {
          Serial.print("Decoded NEC: ");
        }
        else if (results->decode_type == SONY) {
          Serial.print("Decoded SONY: ");
        }
        else if (results->decode_type == RC5) {
          Serial.print("Decoded RC5: ");
        }
        else if (results->decode_type == RC6) {
          Serial.print("Decoded RC6: ");
        }
        Serial.print(results->value, HEX);
        Serial.print(" (");
        Serial.print(results->bits, DEC);
        Serial.println(" bits)");
      }
      Serial.print("Raw (");
      Serial.print(count, DEC);
      Serial.print("): ");

      for (int i = 0; i < count; i++) {
        if ((i % 2) == 1) {
          Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
        }
        else {
          Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
        }
        Serial.print(" ");
      }
      Serial.println("");
    }

    void setup()
    {
      pinMode(RELAY_PIN, OUTPUT);
      pinMode(13, OUTPUT);
        Serial.begin(9600);
      irrecv.enableIRIn(); // Start the receiver
    }

    int on = 0;
    unsigned long last = millis();

    void loop() {
      if (irrecv.decode(&results)) {
        // If it's been at least 1/4 second since the last
        // IR received, toggle the relay
        if (millis() - last > 250) {
          on = !on;
          digitalWrite(RELAY_PIN, on ? HIGH : LOW);
          digitalWrite(13, on ? HIGH : LOW);
          dump(&results);
        }
        last = millis();    
        irrecv.resume(); // Receive the next value
      }
    }
    Как сделать, чтобы только с одной единственной кнопки управлять ?? Код кнопки есть.
    Как правильно защитить МК от выгорания контактов ? Например как подключить оптрон?.
     
    Последнее редактирование: 18 янв 2014
  2. sanek1337

    sanek1337 Нерд

    Лично я своим реле управлял вот таким кодом:
    Код (Text):
    #include <IRremote.h>
    int LED = 13;
    int state = 0;  // 0 = LED off while 1 = LED on
    int RECEIVE_PIN = 2;
    IRrecv irrecv(RECEIVE_PIN);
    decode_results results;
    void setup() {
        Serial.begin(9600);
        irrecv.enableIRIn();
        pinMode(LED, OUTPUT);
    }
    void loop() {
        if ((irrecv.decode(&results)) && (results.value==0x20DF10EF) ) // сюда вводим код своей кнопки
     {
            if (state == 0) {
                state = 1;
                digitalWrite(LED, HIGH);
                Serial.println("Center - HIGH");
                } else {
                state = 0;
                digitalWrite(LED, LOW);
                Serial.println("Center - LOW");
            }
            delay(50);
            irrecv.resume();
        }
    }
     
  3. Максим B

    Максим B Гуру

    Реле стабильно работает (не отключается само по себе) ??? На реле ненужен радиатор???
     
  4. sanek1337

    sanek1337 Нерд

    У меня реле для Ардуино специальное, нагрева не замечал
     
  5. Максим B

    Максим B Гуру

  6. sanek1337

    sanek1337 Нерд

    У меня тоже типа такого только китайское, работает стабильно, не отключается и не греется.
     
  7. Максим B

    Максим B Гуру

    А не пробовал подключить его паралельно с выключателем для люстры??? Чтобы управлять и с пульта и вручную.
     
  8. sanek1337

    sanek1337 Нерд

    Не пробовал