Совмещение библиотек TVOut и IRremote

Тема в разделе "Arduino & Shields", создана пользователем Цшлдн, 2 фев 2015.

  1. Цшлдн

    Цшлдн Нуб

    Доброго всем времени суток.

    Такое дело:

    при использовании библиотек TVOut И IRremote на экране ничего не отображается и приемник ИК не работает. т.е. Совсем ничего не функционирует.

    По отделности же - всё работает.

    Я так понимаю конфликтуют таймеры в библиотеках.

    Может кто сталкивался с подобным, подскажите как решить проблему.
     
  2. X-Dron

    X-Dron Гик

  3. Цшлдн

    Цшлдн Нуб

    Похоже дело не в твоут и ирремот,
    при подключении этих двух библиотек - все работает.
    при добавлении библиотеки wire.h все компилится, но ничего не работает. При компиляции нет никаких ошибок.
    wire.h для работы с RTC
     
  4. X-Dron

    X-Dron Гик

    Wire - для работы с I2C. Это не только часы.
    RTC какие? сам вчера бодался 2 часа, пока нашел правильную библиотеку для DS3231.
    Вроде бы работает, но через некоторое время опрос с часами встает. Посмотрел библиотеку, а там обращение по адресу на I2C вообще не понятно как реализовано. Зато как все отдокументировано.
    Нашел тестовую библиотеку - из документации только примеры, но работает.
     
  5. Цшлдн

    Цшлдн Нуб

    RTC - DS1307 AT24C32
    работают вроде норм, время и дата выводятся на Китайский 3.2" мониторчик.
    но беда с IRRemote, как только подкидываю эту библиотеку, компилится норм, но ничего не работает.

    Всё таки Wire тут не причём.
    ТВоут и ирремот не хотят вместе работать.. блин... куда ковырять не пойму.
     
    Последнее редактирование: 2 фев 2015
  6. Цшлдн

    Цшлдн Нуб

    Не подскажите, может есть какие либо другие библиотеки для работы с ИК?
     
  7. X-Dron

    X-Dron Гик

    Попробуй скачать
    https://github.com/shirriff/Arduino-IRremote/archive/master.zip

    Заархивировать дирректорий
    C:\Program Files\Arduino\libraries\RobotIRremote
    или
    C:\Program Files (x86)\Arduino\libraries\RobotIRremote
    Удалить его содержимое

    Скопировать туда содержимое файла-архива Аrduino-IRremote-master.

    В пакете установки Arduino идет старая библиотека.
     
  8. Цшлдн

    Цшлдн Нуб

    Ок, спасибо. завтра попробую.
    Только вот либы "C:\Program Files (x86)\Arduino\libraries\RobotIRremote" у меня такой нет, наверное потому что у меня IDE 1,05 Завтра обновлю.
     
    Последнее редактирование: 3 фев 2015
  9. Цшлдн

    Цшлдн Нуб

    Нашел исходник для работы с ИК приемником:
    Код (Text):
    void loop()
    {
    if (digitalRead(9)==0) //Если сигнал есть..
      {
        starttime=micros();
      while (digitalRead(9)==0); //..ждем пока он не прекратися.
      endtime=micros();
      time=endtime-starttime; // Высчитываем время.
      if (time>1000) //если это не шум, а скорее стартовый бит, начинаем слушать.
      {
      while (n<Intervals) //В цикле слушаем бит за битом.
      {

        if (digitalRead(9)==0) //Если сигнал есть (1)..
        {
     
        starttime=micros();
        while (digitalRead(9)==0);
        endtime=micros();
        time=endtime-starttime; // ...высчитываем его время.

        if (digitalRead(10)==1) //Если кнопка нажата..

        arrayfix[n]=time/100;  //..записываем в массив "опорный код"
    //в виде промежутков времени наличия сигнала.
        array[n]=time/100;    // Также записываем в массив текущий код.
        n++;
        }
        if (digitalRead(9)==1) //Если сигнала нет (0)..
        {
       
        starttime=micros();
     
        while (digitalRead(9)==1) //пока ждем появления сигнала проверим, не остановка ли это передачи...
        {
        endtime=micros();
        time=endtime-starttime;
      if (time>10000)  //  ...ага, отсановка. Тогда заполняем
    //остаток масива 0-ми, и выходим из цикла.
      {
      while (n<Intervals)
      {
        if (digitalRead(10)==1)
        arrayfix[n]=0;
        array[n]=0 ;
      n++;
        }
      goto out;
        }
        }
        endtime=micros();
        time=endtime-starttime;
        if (digitalRead(10)==1)
        //EEPROM.write(n, time);
        arrayfix[n]=-time/100; //для отсутствия сигнала запишим время с (-).
        //Делим на 100 для того, чтобы можно было запихнуть данные в 1 байт, а не использовать растачительно int.
        array[n]=-time/100;  
        n++;
        }
     
        }
        out: // Если остановка, то выходим сюда.
     
        if (digitalRead(10)==1)//Если кнопка нажата, записываем все в EEPROM
        {
        for (byte x=0; x<Intervals; x++)
      {
      EEPROM.write(x, arrayfix[x]);

        }
        }
     
     
     
        /*for (byte x=0; x<Intervals; x++) // Этот цикл необязателен. Я его закоментил.
    //Он наглядно выводит то, что записано в опорном коде, и что передал нам ДУ. Это полезно для отладки
    //или поиска ошибок.

        {  
          Serial.print(x);
          Serial.print("  ");        
          Serial.print(int(arrayfix[x]));
          Serial.print("  ");
            Serial.println(int(array[x]));
        }*/
     
     
      n=0;

      for (byte x=0; x<Intervals; x++) //В этом цикле мы ищем отличия в преданном коде и опорном.
      {      
       
        if (abs(array[x]-arrayfix[x])>5 && array[x]!=0 && arrayfix[x]!=0) // Здесь мы отслеживаем,
    // где есть отличия на логическом уровне.
        //Если отличие больше 500 мкс, то это однозначно разные логичесике уровни.
        {
        distinction++;
        code=code+(x+1)*distinction; //генерируем код
        }
        }
     
        Serial.println("========Result==========");  // Выводим, что имеем на выходе
     
        Serial.print("Otlichiya  ");
        Serial.println(distinction);
        Serial.print("Code  ");
        Serial.println(code);
     
        distinction=0;
        code=0;

    }
    }




    }
    без тваут всё норм работает.
    С ТВаут опять не хочет, но если закоментить строки где есть запись типа "array[n]", ТВаут нормально работает, с arrayfix проблем таких нет, изображение выводится на экран. но естественно ИК не работает...

    Может можно как то эти строки обойти?