РЕШЕНО ИК приемник VS 1838B

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

  1. ffffff

    ffffff Нерд

    Доброго времени суток есть вопрос по поводу Ик приемника VS 1838В , залил скетч для проверки вышеуказанного приемника у Дмитрия Осипова https://yadi.sk/d/YRfu9uaP0Lcjc , только для 2 светодиодов , не работает . Точнее работает но как то отдельно , отдельно можно узнать код кнопок скетчем из примеров в IDЕ, отдельно можно проверить светодиоды Blinkом , а вот чтоб вместе не хотят . И как бы все понятно в плане скетча что да как , но вот почему не работает хз. Взял другой скетч у другого товарища конденсатор не ставил ибо нет в наличии сейчас , но скетч заработал , но почему то виснет после 1-2ух нажатий ,приходит сигнал на последовательный порт и все, зависает . Подскажите в чем могут быть проблемы.Библиотека IRremote последняя обновленная да и с предыдущими такая же проблема.Скетч и фото (ИК приемника не нашел в библиотеки датчик расстояния воткнул) прилагаю.
     

    Вложения:

    Последнее редактирование: 25 июн 2016
  2. Slaiterx

    Slaiterx Гик

    Код добавьте чтобы не файлом был быстрее помогут многие смотрят с телефонов
     
  3. ffffff

    ffffff Нерд

    добавил скетч в блокноте
     
  4. ZAZ-965

    ZAZ-965 Гуру

    @ffffff, в примере "код кнопки" вы лишний раз вызываете irrecv.decode, поэтому второе нажатие кнопки (0xFF18E7) не выключит светодиод, а будет потерено\проигнорировано.
    Попробуйте так
    Код (C++):

    #include <IRremote.h>
    #include <IRremoteInt.h>
    int LED_Y = 9;//Зелёный светодиод
    int LED_R = 10;//Красный светодиод
    int state1 = 0; //переменная для хранения состояния Зелёного светодиод
    int state2 = 0;// переменная для хранения состояния Красный светодиод
    //int state3 = 0;
    int RECEIVE_PIN = 2;// Объявляем новую переменную для хранения вывода ик датчика
    IRrecv irrecv(RECEIVE_PIN, 13);
    decode_results results;
    void setup() {
        Serial.begin(9600);// Активируем Serial-соединение
        irrecv.enableIRIn();
        pinMode(LED_Y, OUTPUT);//Далее объявляем светодиоды как "выход"
        pinMode(LED_R, OUTPUT);
    }
    void loop()    {
        if (irrecv.decode(&results))
        {
          switch(results.value)
          {

            case 0xFF18E7:
                if (state1 == 0)
                {
                    state1 = 1;
                    digitalWrite(LED_Y, HIGH);
                    Serial.println("1 - HIGH");
                }
                  else
                    {
                        state1 = 0;
                        digitalWrite(LED_Y, LOW);
                        Serial.println("1 - LOW");
                        }
            break;
     
            case 0xFF30CF:
                if (state2 == 0)
                {
                    state2 = 1;
                    digitalWrite(LED_R, HIGH);
                    Serial.println("2 - HIGH");
                }
                  else
                    {
                        state2 = 0;
                        digitalWrite(LED_R, LOW);
                        Serial.println("2 - LOW");
                     }
                 break;

                 default:
                    Serial.println(results.value, HEX);

            }//end switch
         }    

            delay(10);
            irrecv.resume();
        }
     
    Последнее редактирование: 25 июн 2016
  5. ffffff

    ffffff Нерд

    не подошел код ,сингалы не стал принимать ИК приемник
     
  6. ffffff

    ffffff Нерд

    хотя и со старым кодом тоже не принимает сигнал,
     
  7. ZAZ-965

    ZAZ-965 Гуру

    Добавьте в блок switch
    Код (C++):
     default:
           Serial.println(results.value, HEX);
    и посмотрите какие значения выводит
     
  8. ZAZ-965

    ZAZ-965 Гуру

    Подождите, в датчике расстояния нет детектирования 38кГц ИК сигнала. Просто ИК фотодиод не подойдет.
     
  9. ffffff

    ffffff Нерд

    Если добавил правильно то не компилируется

    void loop() {
    if (irrecv.decode(&results))
    {
    switch(results.value)
    default:
    Serial.println(results.value, HEX);
    {
     
  10. ffffff

    ffffff Нерд

    там не датчик расстояния а ИК приемник
     
  11. ffffff

    ffffff Нерд

    просто не нашел я IR приемника в схемах fritzing , а по сути у меня стоит ИК приемник а не датчик расстояния
     
  12. ZAZ-965

    ZAZ-965 Гуру

    Добавил код в сообщение 4 (default последний блок).
    В irrecv добавил второй параметр, моргание встроенным светодиодом при приеме команды
    Код (C++):
    IRrecv irrecv(RECEIVE_PIN, 13);
     
    Последнее редактирование: 25 июн 2016
  13. ffffff

    ffffff Нерд

    exit status 1
    case label '16718055l' not within a switch statement
    ошибка компиляции
     
  14. ffffff

    ffffff Нерд

    Если думаете что деле в записи, декодировки двоичного шестнадцатеричной записи , то нет я пробовал и без перевода в двоичный вид
     
  15. ZAZ-965

    ZAZ-965 Гуру

    А что такое '16718055l'. Если это код вашей кнопки, поробуйте так 0xFF18E7
     
  16. ffffff

    ffffff Нерд

    она и указана в коде ), их там 2 кнопки соответсвенно 2 светодиода, но проблема в том что приемник не воспринимает их попросту не принмает сигнал внезависимости от расположения пинов, кодировки. Хотя отдельно все работает и приемник и светодиоды
     
  17. ffffff

    ffffff Нерд

    Значения никаких не выводит так как зависает и не принимает сигнал Ик приемник
     
  18. ffffff

    ffffff Нерд

    ZAZ ты сдулся чтоли ?
     
  19. ZAZ-965

    ZAZ-965 Гуру

    Занялся своими делами, не сидеть же все выходные в инете. Или я взялся за работу и получил аванс?
    Попробуйте так (раньше похоже ошибся с точкой вызова irrecv.resume())
    Код (C++):

    #include <IRremote.h>
    #include <IRremoteInt.h>
    int LED_Y = 9;//Зелёный светодиод
    int LED_R = 10;//Красный светодиод
    int state1 = 0; //переменная для хранения состояния Зелёного светодиод
    int state2 = 0;// переменная для хранения состояния Красный светодиод
    //int state3 = 0;
    int RECEIVE_PIN = 2;// Объявляем новую переменную для хранения вывода ик датчика
    IRrecv irrecv(RECEIVE_PIN, 13);
    decode_results results;
    void setup() {
        Serial.begin(9600);// Активируем Serial-соединение
        irrecv.enableIRIn();
        pinMode(LED_Y, OUTPUT);//Далее объявляем светодиоды как "выход"
        pinMode(LED_R, OUTPUT);
    }
    void loop()    {
        if (irrecv.decode(&results))
        {
          switch(results.value)
          {

            case 0xFF18E7:
                if (state1 == 0)
                {
                    state1 = 1;
                    digitalWrite(LED_Y, HIGH);
                    Serial.println("1 - HIGH");
                }
                  else
                    {
                        state1 = 0;
                        digitalWrite(LED_Y, LOW);
                        Serial.println("1 - LOW");
                        }
            break;
            case 0xFF30CF:
                if (state2 == 0)
                {
                    state2 = 1;
                    digitalWrite(LED_R, HIGH);
                    Serial.println("2 - HIGH");
                }
                  else
                    {
                        state2 = 0;
                        digitalWrite(LED_R, LOW);
                        Serial.println("2 - LOW");
                     }
                 break;

                 default:
                    Serial.println(results.value, HEX);

            }//end switch
            delay(10);
            irrecv.resume();
         }  //end if (irrecv.decode)
        }//end loop
     
     
    ffffff нравится это.
  20. ffffff

    ffffff Нерд

    Заработало спс большое , значит проблема была в программном , просто не пойму в моем скетче оно тоже
    работало но почему то в любом месте зависало то есть пульт просто не передавал сигналы , вот вопрос почему ?