Совместная работа библиотек 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.