Совместная работа библиотек LedControl и VirtualWire -проблема!

nikolaki
nikolaki аватар
Offline
Зарегистрирован: 14.02.2013

Несколько месяцев назад сделал часики на МАХ7219 и DS1307. Накидал скетч с использованием библиотеки LedControl . Часы работали отлично. Добавил к часам передачу  времени через радио модуль RF433mHz на другое устройство. Но столкнулся с проблемой:при добавлении библиотеки VirtualWire нет индикации на семисигментных ЛЕД индикаторах.Передача по  радио на другую ардуину проходит нормально , время принимаемое отображается в сериале другой ардуины.

Менял и скорость передачи , пробовал без библиотеки DS1307-никак.Я так понял где-то конфликт библиотек LedControl и VirtualWire

Привожу  скетч.

// часы с библиотекой DS1307.h (проблема была и в скетче без библиотеки)
#include <Wire.h>
#include <DS1307.h>
#include <VirtualWire.h>
#include "LedControl.h"

          
long previousMillis = 0;
long interval = 500;//период мигания точки на 7сигм индикаторе
int blinkState = false; 
float t=0;
int a;



int hour ;
int minute ;

int transmit_pin = 9;
int powerPin=7;//нога управления питанием модуля RF 433
LedControl lc=LedControl(12,11,10,1); 
void setup()
{
  lc.clearDisplay(0);
  lc.shutdown(0,false);
  lc.setIntensity(0,15);
  vw_set_tx_pin(transmit_pin);//
  pinMode(powerPin,OUTPUT);//нога управления питанием модуля RF 433

  vw_setup(1000);  // ЕСЛИ КОМЕНТИРУЮ ЭТУ СТРОЧКУ -ВРЕМЯ НА ЛЕД ИНДИКАТОРАХ ОТОБРАЖАЕТСЯ И НЕ РАБОТАЕТ ПЕРЕДАЧА..
  //Serial.begin(9600);


}

void loop()
{
  
  /*******вывод времени***********/
  hour=RTC.get(DS1307_HR,true);
  minute=RTC.get(DS1307_MIN,false);


  if (hour<10)
  {
    lc.setDigit(0,3,0,false);
    lc.setDigit(0,2,hour,blinkState);
  } 
  else if (hour>=10)
  {
    t=hour/10;
    a=int(t);
    lc.setDigit(0,3,a,false);
    t=hour%10;
    lc.setDigit(0,2,t,blinkState);
  }
  if (minute<10)
  {
    lc.setDigit(0,1,0,false);
    lc.setDigit(0,0,minute,false);
  } 
  else if (minute>=10)
  {
    t=minute/10;
    a=int(t);
    lc.setDigit(0,1,a,false);
    t=minute%10;
    lc.setDigit(0,0,t,false);
  }
 /*******  мигание точки между индикаторами часов и минут ***********/
  unsigned long currentMillis = millis();

  if(currentMillis - previousMillis > interval) {

    previousMillis = currentMillis;   


    if (blinkState == false)//мигание точки
      blinkState = true;
    else
      blinkState = false;

  }
 /*******   проверка вывода времени в сериал   ***********/
  //  Serial.print(hour); //read the hour and also update all the values by pushing in true
  //  Serial.print(":");
  //  Serial.print(RTC.get(DS1307_MIN,false));//read minutes without update (false)
  //  Serial.print(":");
  //  Serial.print(RTC.get(DS1307_SEC,false));//read seconds
  //
  //  Serial.println();
  //
  //  delay(500); 
  
  /*******   включаем RF 433 на передачу  ***********/
  sender();
}


void sender()
{
  
  char msg[3] ;
  msg[0]=RTC.get(DS1307_HR,true);//   значение часов
  msg[1]=RTC.get(DS1307_MIN,false);// ---минут
  msg[2]=RTC.get(DS1307_SEC,false);//----секунд
  digitalWrite(powerPin,HIGH);//включаем питание на модуль 
  delay(10);
  vw_send((uint8_t *)msg, 3);//отсылаем....
  vw_wait_tx();
  digitalWrite(powerPin,LOW);//и выключаем модуль
}




 

nikolaki
nikolaki аватар
Offline
Зарегистрирован: 14.02.2013

Решено! Проблема была в использовании по умолчанию библиотеками Wire и VirtualWire одного и того же пина. После правки библиотеки все заработало.

sergejey
Offline
Зарегистрирован: 29.11.2013

Добрый день!

А можно подробнее про правку библиотек? У меня подобная проблема, только связана уже с приёмником -- не идёт приём на контроллер с матрицей при использовании VirtualWire.