Комфликт между двумя библиотеками.
- Войдите на сайт для отправки комментариев
Пт, 01/08/2014 - 15:47
Подскажите что я делаю не так. Задача отследить нажатие на ТВ пульте и отправить 433mhz сигнал на выключатель. После нажатия на кнопку пульта я вижу надпись "ok" но лампочка не включается.
#include <IRremote.h> int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; #include <livolo.h> Livolo livolo(8); // transmitter connected to pin #8 void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value); if (results.value==16738455) { Serial.println("ok"); livolo.sendButton(6400, 120); } irrecv.resume(); // Receive the next value } }
В то же время вот такой код работает, он включает и выключает каждые 3-4 секунды лампочку.
#include <livolo.h> Livolo livolo(8); // transmitter connected to pin #8 void setup() { } void loop() { livolo.sendButton(6400, 120); // blink button #3 every 3 seconds using remote with remoteID #6400 delay(3000); }
Что я делаю не так? Тесты провожу на Arduino Mega 2560.
В первом коде есть дополнительная библиотека IRremote. Первый код не работает.
Во втором коде нет библиотеки IRremote. Второй код работает.
Библиотеку Livolo нам всем, у кого её нет, придется искать (обычно достаточно хотя бы ссылку дать, откуда можно скачать, иначе может так случиться, что таких библиотек несколько и мы не будем знать, какой пользуетесь Вы), устанавливать. А у Вас она уже установлена и нужно всего лишь посмотреть, например, какие таймеры, прерывания, используют эти библиотеки (IRremote & Livolo).
На вопрос "Что я делаю не так?", ответ такой: не смОтрите исходники библиотек на предмет пересечения использования общих ресурсов, например, таймеров, прерываний.
Выкладываю библиотеку:
livolo.cpp
livolo.h
Нашел ее на хабре: http://habrahabr.ru/post/211594/
Прямая ссылка на библиотеку: https://drive.google.com/file/d/0B0DQ7La4EBHlU2ltTmlmeHhya3M/edit?usp=sharing
Точно такая же проблема с RC-Switch (https://code.google.com/p/rc-switch/)
После нажатия на кнопку пульта я вижу надпись "ok" но лампочка не включается.
В то же время такой код работает, включает лампочку и выключает каждые 3-4 секунды.:
Пофантазирую.
Первое.
Для вывода кода в выключатель запрещаем прерывания, после вывода - разрешаем.
Пробуем.
Что получилось?
А как запретить это прерывание и снова потом разрешить?
Скажи НЕТ прерываниям :)
for example
kisoft, помогло. Спасибо большое.
Не очень хорошо. Значит надо искать другой вариант реализации. Но если Вас устраивает этот вариант, тогда проще забить :)