Совместная работа библиотек LedControl и VirtualWire -проблема!
- Войдите на сайт для отправки комментариев
Пнд, 18/08/2014 - 23:22
Несколько месяцев назад сделал часики на МАХ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);//и выключаем модуль
}
Решено! Проблема была в использовании по умолчанию библиотеками Wire и VirtualWire одного и того же пина. После правки библиотеки все заработало.
Добрый день!
А можно подробнее про правку библиотек? У меня подобная проблема, только связана уже с приёмником -- не идёт приём на контроллер с матрицей при использовании VirtualWire.