(NRF24L01) кто сталкивался с такой проблемой
- Войдите на сайт для отправки комментариев
Ср, 24/09/2014 - 13:48
Данные передаются только при включении передатчика всего один раз. Насколько я понимаю они должны передаваться циклично
Код передатчика
#include <SPI.h> #include <nRF24L01.h> #include <RF24.h> #define CE_PIN 9 #define CSN_PIN 10 #include "DHT.h" #define DHTTYPE DHT11 #define DHTPIN 2 DHT dht(DHTPIN, DHTTYPE); const uint64_t pipe = 0xE8E8F0F0E1LL; RF24 radio(CE_PIN, CSN_PIN); int dannye[3]; void setup() { Serial.begin(9600); dht.begin(); radio.begin(); radio.openWritingPipe(pipe); } void loop() { dannye[0]=dht.readHumidity(); dannye[1]=dht.readTemperature(); radio.write(dannye, sizeof(dannye) ); //Serial.print("Humidity :"); //Serial.println(dannye[0]); // Serial.print("Temperature :"); // Serial.println(dannye[1]); }
Код приемника
#include <SPI.h> #include <nRF24L01.h> #include <RF24.h> #define CE_PIN 9 #define CSN_PIN 10 const uint64_t pipe = 0xE8E8F0F0E1LL; RF24 radio(CE_PIN, CSN_PIN); int dannye[3]; void setup() { Serial.begin(9600); radio.begin(); radio.openReadingPipe(1,pipe); radio.startListening(); Serial.print("Listening"); } void loop() { if ( radio.available() ) { bool done = false; while (!done) { done = radio.read( dannye, sizeof(dannye) ); Serial.print("Humidity :"); Serial.println(dannye[0]); Serial.print("Temperature :"); Serial.println(dannye[1]); } } }
В сериале выдает:
Listening
Humidity : 36
Temperature :25
В вашем коде приемника ,после изменения значения переменной done на !false оно не меняет обратно свое значиние,и поэтому цикл while происходит всего 1 раз.
еще вот такая "безумная" идея :
в программе приемнике :
при 1-ом заходе в цикл loop() создаеться переменная bool done = false; в памяти она сидит под неким псевдонимом - допустим done'1.первый заход в цикл while,в теле которого done принимает значение !true и уже в следующий раз в цикл while не захдит.
при втором заходе в loop() опять инициализируеться bool done = false; но в этот раз она сидит в памяти под псевдонимом done'2.а поскольку условие цикла все еще работает с переменной done'1 то и условие цикла while выполняеться всего 1 раз.
Прошу прощения не совсем разбираюсь в этом. false изменить на true?
Попробуйте
void loop()
{
if ( radio.available() )
{
radio.read( dannye, sizeof(dannye) );
Serial.print("Humidity :");
Serial.println(dannye[0]);
Serial.print("Temperature :");
Serial.println(dannye[1]);
}
}
хорошо, попробую отпишусь. Спасибо за совет
vankenshtein, добавьте в код передатчика после отправки паузу 1 сек. Вряд ли вам нужна информация чаще.
или можно отправлять только если показания изменились.
странно. а у меня в машинке управление работает, а код почти один в один как у тс, только указываю размер массива не используя sizeof, ну и массив у меня не int
а разница в следующем
у тс возвращается 6 а должно быть 3)) обращать надо внимание на типы данных
Попробуйте
void loop()
{
if ( radio.available() )
{
radio.read( dannye, sizeof(dannye) );
Serial.print("Humidity :");
Serial.println(dannye[0]);
Serial.print("Temperature :");
Serial.println(dannye[1]);
}
}
попробовал, к сожалению не помогло
паузу пробовал, не помогло. не могли бы вы помочь как сделать что б данные отправлялись только когда меняются
кому я написал. тс то пофиг))
простите я вас не понял, что такое тс?
топикстартер. человек открывший тему. ты короче
топикстартер. человек открывший тему. ты короче
что нужно поменять в коде? не могли бы вы подсказать
а ты читал мои посты?
вместо
надо
и можно заодно отказаться от sizeof и указывать размер массива, так как мы точно его знаем
спасибо большое, сейчас попробую
наоборот)) ты все перепутал
все сделал как я написал? массиву тип данных изменил?
код как был изначально все оставить также, только изменить тип данных еще
Передатчик
Приемник
перепутал
read в приемник, write в передатчик, тип данных изменил
и все равно не работает?
данные приходят не один раз как было, а два раза и потом все.... тишина
убери все про dht, и просто в цикле отправляй данные. данные принимай и в uart отправляй
надо исключить возможные глючные элементы
если расскоментировать строки
то в порте передатчика нормально выдает данные
я уже предложил что сделать чтобы выявить проблему
вы правы что то с dht
в приемнике сыпятся 10 и 15 все работает. Поискать другую библиотеку на dht?
я решил твою проблему и нашел еще в чем глюк. думаю дальше ты сам разберешься
не подскажете в приемнике или передатчике?
dht ))) там надо копать
передатчик
хорошо, спасибо большое за помощь. разберусь отпишу
убери все про радиомодуль и проверь отдельно dht, отсылай данные просто в uart
в сериале
Все работает нормально. В чем проблема?
не могу разобраться((
попробуй просто в передатчике добавить задержку ну например 1 секунду
а также ускорить uart
и постепенно убавляй задержку пока не определишь оптимально. на то чтобы отправить в uart тоже время ведь надо
а что за проблема была в dht?
так заработало или нет?
сейчас нету с собой ардуинок, завтра только
ну что ты за человек. арудина всегда должна быть с тобой, купи arduino micro, она размером меньше обычной флешки, и носи с собой
+10 к программированию ардуины сразу
хотя говорят лучше клизму с ардуиной сделать. не проверял, вот интересно кто бы проверил
но зато сразу +20 к программированию и +10 к харизме
))) и потом к проктологу
зачем практолог? есть же ардуино нано. берутся оттуда нано частицы и делается клизма
не изверги же. ладно там мини додумаются, а то вдруг кто додумается uno или mega запихать. нехорошо
но зато если посидишь на форуме поймешь кто как повышает свои навыки в программировании))
попробовал, не помогло(((
подключил барометр....... та же история(((
данные либо один раз, либо два раза приходят и все, может дело в библиотеке?
включаешь выключаешь приемник ничего не меняется. Включишь выключишь передатчик приходят данные
хз. получается дело только в передатчике
в приемнике так делал?
ога, не прокатило((
пока больше ничего в голову не приходит. либо дело в dht либе, либо может что то с типами данных
Помогли люди добрые))) Выложу может комуто пригодится
Передатчик:
Приемник:
Проверил, все работает
По поводу машинки, интересно) Какое железо стоит? какой регуль? можете весь скетч выложить?
Вот мой скетч на машинку.
Передатчик:
Приемник:
При повороте руля мигают поворотки, и фары включаются с кнопки)) Вместо регуля стоит электроника от сервы по этому слабовато гоняет(2 вольта всего выдает). Планирую собрать схемку на полевиках
Я бы не местое ТС сделал не массив, а структуру и передавал бы её по радио. И именовать поля удобно, и в индексах не запутаешься.
У меня тоже были проблемы с отправкой. Я указал минимальную скорость в 250 килобит и жестко забил канал передачи.
А sizeof() на то и нужна, чтобы байты не считать. :)
спасибо, понял, исправим