2 input and 1 output

Тема в разделе "Arduino & Shields", создана пользователем miras, 12 июн 2016.

  1. miras

    miras Нуб

    Собственно вопрос от нуба (в пойске не нашел решений или плохо искал).
    Пытаюсь заставить работать Output пин который включает реле посредством фоторезистора и с пульта.
    В отдельности оба скетча работают без сбоя. А когда собираю вместе то фоторезистор отказывается включать реле когда пульт работает без изменений. Скетч брал готовый, пытался туда "запихнуть" фоторезистор. Несмотря на это в терминале порта (Serial.begin) фоторезистор работает высылая значения на порт, но реле включать отказывается. В чем проблема?
    Код:
    Код (C++):
    #include <IRremote.h> // это скачанная библиотека

    int RECV_PIN = 11; //вход ИК приемника
    IRrecv irrecv(RECV_PIN);
    decode_results results;

    unsigned long eventTime=0;
    //индикация таймера
    int timer = 12;
    int sensePin = 0;
    int L13 = 13; //пины управляющие моторами, светодиодами, или реле, чем угодно.
    int B13 = 13;
    int L2 = 2;
    int L3 = 3;
    int L4 = 4;
    int L5 = 5;
    int L6 = 6;
    int L7 = 7;
    int L8 = 8;

    void setup(){
      irrecv.enableIRIn(); // включить приемник
      Serial.begin(9600);
      pinMode(L13, OUTPUT); // назначаем пины как выходы
      pinMode(L2, OUTPUT);
      pinMode(B13, OUTPUT);
      pinMode(L3, OUTPUT);
      pinMode(L4, OUTPUT);
      pinMode(L5, OUTPUT);
      pinMode(L6, OUTPUT);
      pinMode(L7, OUTPUT);
      pinMode(L8, OUTPUT);

      pinMode(timer, OUTPUT);
    }
    void loop() {
      Serial.println(analogRead(sensePin));
      if (digitalRead(RECV_PIN) == LOW)
        eventTime=millis(),digitalWrite(timer, HIGH);
      if(millis()-eventTime>100) digitalWrite(timer, LOW)
        ,digitalWrite(L13, LOW),digitalWrite(L2, LOW),digitalWrite(L3, LOW)
          ,digitalWrite(L4, LOW),digitalWrite(L5, LOW),digitalWrite(L6, LOW),digitalWrite(L7, LOW),digitalWrite(L8, LOW);
         
    int sensePin = 0;
      if (irrecv.decode(&results)) {
        int VAL = analogRead(sensePin); {
        if (VAL < 300) digitalWrite(B13, HIGH); else digitalWrite(B13, LOW);}
        if (results.value == 0x20DF02FD || results.value == 0xFFFFFFFF && (digitalRead(timer) == HIGH) )digitalWrite(L13, HIGH);
        if (results.value == 0x1008889 || results.value == 0x757FB4DF && (digitalRead(timer) == HIGH) )digitalWrite(L2, HIGH);
        if (results.value == 0x1004849 || results.value == 0xB33B4597 && (digitalRead(timer) == HIGH) )digitalWrite(L3, HIGH);
        if (results.value == 0x100C8C9 || results.value == 0x3C03E507 && (digitalRead(timer) == HIGH) )digitalWrite(L4, HIGH);
        if (results.value == 0x1002829 || results.value == 0xE705551F && (digitalRead(timer) == HIGH) )digitalWrite(L5, HIGH);
        if (results.value == 0x100A8A9 || results.value == 0xA4A58EC7 && (digitalRead(timer) == HIGH) )digitalWrite(L6, HIGH);
        if (results.value == 0x1006869 || results.value == 0xE2E45F7F && (digitalRead(timer) == HIGH) )digitalWrite(L7, HIGH);
        if (results.value == 0x100E8E9 || results.value == 0x6BACFEEF && (digitalRead(timer) == HIGH) )digitalWrite(L8, HIGH);

        irrecv.resume();
      }
    }
     
  2. ZAZ-965

    ZAZ-965 Гуру

    Первое что бросилось в глаза L13 = B13 = 13
     
  3. miras

    miras Нуб

    Это то что пришло в голову от безвыходности. До этого юзал сам L = 13 без B = 13.
     
  4. ZAZ-965

    ZAZ-965 Гуру

    Второе, вынести чтение фоторезистора из irrecv.decode, по-моему, так у вас происходит чтение фоторезистора только при нажатии кнопок пульта
     
  5. miras

    miras Нуб

    Убрал второй irrecv.decode и начал работать только фоторезистор. Убрал первый и вот:
    Код (C++):
    exit status 1
    'results' was not declared in this scope
     
     
  6. ZAZ-965

    ZAZ-965 Гуру

    Код (C++):
    #include <IRremote.h> // это скачанная библиотека

    int RECV_PIN = 11; //вход ИК приемника
    IRrecv irrecv(RECV_PIN);
    decode_results results;

    unsigned long eventTime=0;
    //индикация таймера
    int timer = 12;
    int sensePin = 0;
    int L13 = 13; //пины управляющие моторами, светодиодами, или реле, чем угодно.
    int B13 = 13;
    int L2 = 2;
    int L3 = 3;
    int L4 = 4;
    int L5 = 5;
    int L6 = 6;
    int L7 = 7;
    int L8 = 8;

    void setup(){
      irrecv.enableIRIn(); // включить приемник
      Serial.begin(9600);
      pinMode(L13, OUTPUT); // назначаем пины как выходы
      pinMode(L2, OUTPUT);
      pinMode(B13, OUTPUT);
      pinMode(L3, OUTPUT);
      pinMode(L4, OUTPUT);
      pinMode(L5, OUTPUT);
      pinMode(L6, OUTPUT);
      pinMode(L7, OUTPUT);
      pinMode(L8, OUTPUT);

      pinMode(timer, OUTPUT);
    }
    void loop() {
      Serial.println(analogRead(sensePin));
      if (digitalRead(RECV_PIN) == LOW)
        eventTime=millis(),digitalWrite(timer, HIGH);
      if(millis()-eventTime>100) digitalWrite(timer, LOW)
        ,digitalWrite(L13, LOW),digitalWrite(L2, LOW),digitalWrite(L3, LOW)
          ,digitalWrite(L4, LOW),digitalWrite(L5, LOW),digitalWrite(L6, LOW),digitalWrite(L7, LOW),digitalWrite(L8, LOW);
       
    int sensePin = 0;
    int VAL = analogRead(sensePin);
        if (VAL < 300) digitalWrite(B13, HIGH); else digitalWrite(B13, LOW);
     
      if (irrecv.decode(&results)) {
        if (results.value == 0x20DF02FD || results.value == 0xFFFFFFFF && (digitalRead(timer) == HIGH) )digitalWrite(L13, HIGH);
        if (results.value == 0x1008889 || results.value == 0x757FB4DF && (digitalRead(timer) == HIGH) )digitalWrite(L2, HIGH);
        if (results.value == 0x1004849 || results.value == 0xB33B4597 && (digitalRead(timer) == HIGH) )digitalWrite(L3, HIGH);
        if (results.value == 0x100C8C9 || results.value == 0x3C03E507 && (digitalRead(timer) == HIGH) )digitalWrite(L4, HIGH);
        if (results.value == 0x1002829 || results.value == 0xE705551F && (digitalRead(timer) == HIGH) )digitalWrite(L5, HIGH);
        if (results.value == 0x100A8A9 || results.value == 0xA4A58EC7 && (digitalRead(timer) == HIGH) )digitalWrite(L6, HIGH);
        if (results.value == 0x1006869 || results.value == 0xE2E45F7F && (digitalRead(timer) == HIGH) )digitalWrite(L7, HIGH);
        if (results.value == 0x100E8E9 || results.value == 0x6BACFEEF && (digitalRead(timer) == HIGH) )digitalWrite(L8, HIGH);
        irrecv.resume();
      }
    }
     
  7. miras

    miras Нуб

    Теперь оба работают. Но когда я нажимаю на пульт в моем случае необходимо заживать клавишу. Вот когда я зажимаю клавишу реле начинает быстро щелкать вместо того чтобы гореть
     
  8. miras

    miras Нуб

    Как мне эти две функций отдельно вынести потому что таймер от фоторезистора влияет на управление пультом вследствие чего последний начинает быстро переключать реле.
     
  9. ZAZ-965

    ZAZ-965 Гуру

    miras, опишите алгоритм подробно, что требуется от устройства.
     
  10. miras

    miras Нуб

    Управляю реле. фоторезистор работает с вашим кодом отлично. но вот при зажиманий кнопки пульта он начинает быстро моргать.
    Вобщем требуется чтобы от пульта так же стабильно работал не моргая
     
  11. Tomasina

    Tomasina Сушитель лампочек Модератор

    просили написать что требуется от устройства, а не то, что оно вытворяет сейчас.
    Ибо задание "Output пин который включает реле посредством фоторезистора и с пульта" понятно только вам. ;)