Подскажите, пожалуйста, почему выше приведенный скетч работает ТОЛЬКО на 2 цифровом пине? При указании другого пина сигнал не читается, как будто его вообще нет. :(
Подскажите, пожалуйста, почему выше приведенный скетч работает ТОЛЬКО на 2 цифровом пине? При указании другого пина сигнал не читается, как будто его вообще нет. :(
я не гуру, но я отвечу :)
Потому что на втором пине доступны прерывания:
Внешнее прерывание: 2 и 3. Данные выводы могут быть сконфигурированы на вызов прерывания либо на младшем значении,
либо на переднем или заднем фронте, или при изменении значения.
Подробная информация находится в описании функции attachInterrupt().
Внешнее прерывание: 2 и 3. Данные выводы могут быть сконфигурированы на вызов прерывания либо на младшем значении,
либо на переднем или заднем фронте, или при изменении значения.
Подробная информация находится в описании функции attachInterrupt().
Есть замечательные железки на чипе SI4432 (готовый модуль RF22), поддерживает разные модуляции и частоты, есть готовая библиотека для Arduino.
Хороший модуль, мощьный, дальнобойный (с приличной антенной на несколько километров лупит). Для чего его использовать не принципиально, только учтите что он весьма прожорливый, если нужно автономное питание.
В общем, часы тикают и отображаются, а вот температура нет. По отдельности если закоментить вывод часов- все ок. переносил вывод температуры в глобальную переменную нарвался на отображение температуры в увеличенном в 2 раза размере. Как праивлно сделать вывод ??? Спасибо
Сталкивался с такой же проблемой. Понял, что если в loop вызывается тяжелая процедура, то сигнал с датчика часто не успевает считася.
сделайте вызов printTime(); раз в секунду например, все должно заработать.
увы, полином найти не удалось. если счастливый обладатель датчика предоставит посылки отличающиеся одним битом можно будет закодировать crc порождающей матрицей.
Продолжая тему, если кому интересно сделал веб серверок с отображением датчиков орегоновских. отличие - основной код вынесен в библиотеки. Пришлось так сделать, из-за понятности и структурности кода. В планах сделать страничку загружаемую с SD карты с нормлаьным оформлением. в UNO занимает 16кб, есть еще куда дописать.
// 2012-09-06 - Oregon V2 decoder modified - Olivier Lebrun <olivier.lebrun@connectingstuff.net>
// 2012-06-21 - Oregon V2 decoder added - Dominique Pierre (zzdomi)
// 2012-06-21 - Oregon V3 decoder revisited - Dominique Pierre (zzdomi)
// New code to decode OOK signals from weather sensors, etc.
// 2010-04-11 Jean-Claude Wippler <jcw@equi4.com>
#include "DecodeOOK.h"
#include "OregonDecoderV1.h"
#include "OregonDecoderV2.h"
#include "OregonDecoderV3.h"
#include <Ethernet.h>
//433
OregonDecoderV1 orscV1;
OregonDecoderV2 orscV2;
OregonDecoderV3 orscV3;
// MAC address from Ethernet shield sticker under board
byte mac[] = { 0xDE, 0xAD, 0xAE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 100);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(81); // create a server at port 80
/// переменные для записи значений с датчиков
#define PORT 2
byte b_hum[3],b_bat[3],b_type[3];
float f_temp[3];
unsigned int i_Counter[4];
volatile word pulse;
void ext_int_1(void) {
static word last;
// determine the pulse length in microseconds, for either polarity
pulse = micros() - last;
last += pulse;
}
///просто голый код
void reportSerial (const char* s, class DecodeOOK& decoder) {
byte pos;
const byte* data = decoder.getData(pos);
Serial.print(s);
Serial.print(' ');
for (byte i = 0; i < pos; ++i) {
Serial.print(data[i] >> 4, HEX);
Serial.print(data[i] & 0x0F, HEX);
}
Serial.println();
decoder.resetDecoder();
}
// вывод данных по орегоновским сенсорам
void reportSerial2 (const char* s, class DecodeOOK& decoder) {
byte pos;
const byte* data = decoder.getData(pos);
//выводит тип декодера
Serial.print(s);
Serial.print(F(" "));
//выводим голый принятый код
// for (byte i = 0; i < pos; ++i) {
// Serial.print(data[i] >> 4, HEX);
// Serial.print(data[i] & 0x0F, HEX);
// }
Serial.print(F(": "));
// Outside/Water Temp : THGN132N,...
if(data[0] == 0x1A && data[1] == 0x2D)
{
Serial.print(F("Type:"));
Serial.print(data[0], HEX);
Serial.print(data[1], HEX);
Serial.print(F(", ID:"));
Serial.print(data[3], HEX);
Serial.print(F(", Channel:"));
Serial.print(channel(data));
Serial.print(F(", temp:"));
Serial.print(temperature(data));
Serial.print(F(", hum:"));
Serial.print(humidity(data));
Serial.print(F(", bat:"));
Serial.println(battery(data));
}
// Outside/Water Temp : THN132N,...
if(data[0] == 0xEA && data[1] == 0x4C)
{
Serial.print(F("Type:"));
Serial.print(data[0], HEX);
Serial.print(data[1], HEX);
Serial.print(F(", ID:"));
Serial.print(data[3], HEX);
Serial.print(F(", Channel:"));
Serial.print(channel(data));
Serial.print(F(", temp:"));
Serial.print(temperature(data));
Serial.print(F(", hum:"));
Serial.print(humidity(data));
Serial.print(F(", bat:"));
Serial.println(battery(data));
}
if // Inside Temp-Hygro : THGR-810,...
(data[0] == 0xFA && data[1] == 0x28)
{
Serial.print(F("Type:"));
Serial.print(data[0], HEX);
Serial.print(data[1], HEX);
Serial.print(F(", ID:"));
Serial.print(data[3], HEX);
Serial.print(F(", Channel:"));
Serial.print(channel(data));
Serial.print(F(", temp:"));
Serial.print(temperature(data));
Serial.print(F(", hum:"));
Serial.print(humidity(data));
Serial.print(F(", bat:"));
Serial.println(battery(data));
}
if (channel(data) > 0 && channel(data) < 4){
f_temp[channel(data)-1] = temperature(data);
b_hum[channel(data)-1] = humidity(data);
b_bat[channel(data)-1] = battery(data);
b_type[channel(data)-1] = (data[3]);
i_Counter[channel(data)-1]++;
//тут пытаемся записать в массив имя датчика в строке
}
decoder.resetDecoder();
}
void setup () {
Serial.begin(115200);
Serial.println("\n[ookDecoder]");
Ethernet.begin(mac, ip);
server.begin();
//attach our interrupt handler on port int1 (arduino uno port2)
attachInterrupt(0, ext_int_1, CHANGE);
proc_ClearVar();
}
void loop () {
static int i = 0;
cli();
word p = pulse;
pulse = 0;
sei();
//433Mhz
if (p != 0) {
// Serial.println(p); // Печать что есть на выходе приемника
if (orscV1.nextPulse(p))
reportSerial2("OSV1", orscV1);
if (orscV2.nextPulse(p))
reportSerial2("OSV2", orscV2);
if (orscV3.nextPulse(p))
reportSerial("OSV3", orscV3);
}
listenForEthernetClients();
}
void proc_ClearVar(){
for(byte x=0; x<=2; x++){
f_temp[x] = 0;
b_hum[x] = 0;
b_bat[x] = 0;
b_type[x]= 0;
}
}
float temperature(const byte* data)
{
int sign = (data[6]&0x8) ? -1 : 1;
float temp = ((data[5]&0xF0) >> 4)*10 + (data[5]&0xF) + (float)(((data[4]&0xF0) >> 4) / 10.0);
return sign * temp;
}
byte humidity(const byte* data)
{
return (data[7]&0xF) * 10 + ((data[6]&0xF0) >> 4);
}
// Ne retourne qu'un apercu de l'etat de la baterie : 10 = faible
byte battery(const byte* data)
{
return (data[4] & 0x4) ? 10 : 100;
}
byte channel(const byte* data)
{
byte channel;
switch (data[2])
{
case 0x10:
channel = 1;
break;
case 0x20:
channel = 2;
break;
case 0x40:
channel = 3;
break;
}
return channel;
}
void listenForEthernetClients() {
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
Serial.println("Got a client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.print("<body style=background-color:bisque>"); //set background to white
client.println("<font color='red'><h1>Meteostation</font></h1>");
client.println();
client.println("<br />");
//тут сделать в цикле из сущестующего массива
for (int tx = 0; tx < 3; tx++){
client.println();
client.print("Sensor N : ");
client.println(tx);
client.println("<br />");
client.print("Sensor ID : ");
client.println(b_type[tx],HEX);
client.println("<br />");
client.print(" temperature C : ");
client.println(f_temp[tx]);
client.println("<br />");
client.println("Gydro %: ");
client.println( b_hum[tx]);
client.println("<br />");
client.println("V batt ");
client.println( b_bat[tx]);
client.println("<br />");
client.println();
client.println("<br />");
}
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
}
}
есть конечно. а по поводу esp8266 он шумит сильно, плохо на приемник влияет.. а так да, иделаьно-б было. ЕЩе вариант, если-б автор прошивки известной для esp8266 homes-smart.ru внес в нее чтение данных датчиков.
куда выложить-то?? тут чудной форум.. как в нем файлы-то прикреплять. А по автору прошивки, тут думаю материально надо его стимулировать.. + делать макетку для esp уменьшающую собственные шумы ( развяки по питанию, экраны и пр)
Добрый день ! такой вот модуль http://www.aliexpress.com/snapshot/6822989142.html?orderId=68533532401167 куплен и работает с антенной конечно , но иногда получает инфу орегона(THGN132N) с ошибками , причина не ясна. Код ведь используемый для приема чужой и он до конца не ясен. Сейчас использую в связке с Esp 8266-07. До этого с ардуино uno и приемник был вот этот http://www.aliexpress.com/snapshot/6425544719.html?orderId=65249433881167 ошибок не было ,но был прием плох мог раз за полчаса принять. В принципе esp стабильней работает и с интернетом соединение без дополнительных модулей, да и с прерываниями у нее лучше чем на ардуинке( на esp указываешь пин какой тебе нужен. Скетч можно компилировать и среды ардуино. P.S. фото если получится загружу
привет! в инструкции на амс пишут диапазон 795 – 1050mb, в исходниках декодеров давление вычисляется прибавлением к константе 856. кто может внести ясность?
я-б приемник экранировал.. а антенку использовал от рации на 433..
пробовал , пофиг, в скетче добавлена проверка приема данных, если разброс составит 5 гр. или 5% влажности между приемом значит ложь . За 40сек. между передачами так темп.и влажность скакануть не смогут.
В общем, часы тикают и отображаются, а вот температура нет. По отдельности если закоментить вывод часов- все ок. переносил вывод температуры в глобальную переменную нарвался на отображение температуры в увеличенном в 2 раза размере. Как праивлно сделать вывод ??? Спасибо
Сталкивался с такой же проблемой. Понял, что если в loop вызывается тяжелая процедура, то сигнал с датчика часто не успевает считася.
сделайте вызов printTime(); раз в секунду например, все должно заработать.
Добрый день!
Все верно. У меня раз в 10 минут обновляется дисплей, раз в 15 минут производится отправка данных на narodmon.ru. А часы метеостанции не нужны, имхо.
5) И самое главное - найти осциллографом или методом научного тыка временные интервалы для "TIME = 482". У меня три ардуины и у всех этот параметр пришлось подбирать индивидуально, из-за различий в работе внутреннего таймера. Приём на базе работает только если это время +/- 1-3 микросекунды от стандарта. Выключение прерываний сильно влияет на этот параметр, если их не выключать ардуина растягивает пакеты во времени на произвольное число и они не всегда понимаются базой. Если нет осциллографа можно попробовать перебрать по очереди все значения от 480-490... ;)
Кстати, представленный в первом посте код приёмника у меня "глуховат", почти не слышит датчики внешние, а вот тот что представлен в посте #113 вполне работает сносно, правда часто CRC в конце пакета не показывает, возможно из-за этого первый код и не работает... но тут уж я разбираться не стал, работает и ладно... ;)
Поделитесь опытом: кто какой приемник использует для приема орегоновских датчиков и как далеко они работают.
Мне бы добиться уверено приема на расстоянии 10 метров через пару гипсовых стен.
Экспериментировал с датчиками Oregon Scientific THN132N и таким копеечным приёмником
Если питать Arduino от USB, то без антенны приёмник ловит сигнал на расстоянии около 50 см, а с прикрученным куском провода около 17-18 см - на расстоянии около метра.
Если подать питание от адаптера на 12V, то происходит чудо — сигнал удаётся получить с расстояния >10 метров через три стены в панельном доме.
В процессе построения погодной станции на датчиках Oregon не смог на указанном здесь коде добиться нужной дальности приёма. Пришлось писать свой приёмник, а затем и передатчик . Думал разместить всё сюда, но решил создать отдельную тему. Всё-таки проект...
Чтоб работал прием с датчикав, надо использовать нормальный приемник. Дешёвые приёмники с али плохо настроены, видимо. У меня отличный прием в квартире через 2 толстые (60см) кирпичные стены 15метров по прямой. Приемник с али ловил в пределах 10см.
Я сравнивал дальность приёма приёмника с али и приёмника из погодной станции Oregon. Разницы не обнаружил. Да и по схеме они очень схожи, хотя орегоновский выполнен, конечно, солиднее. У него индуктивность входного контура выполнена дорожкой на плате.
Прикупил себе вот такую пару: приемник MX-RM-5V и передатчик FS1000A. Вместе они прекрасно работают, а вот сигнал с THN123N не ловится никак, ни с 10 см ни 10м. Сначала думал что мне попались модули на 315Mhz, но нет на кварце передатчика четко написано 433Mhz.
В идеале надо бы к выходу приёмника подключиться осциллографом, это дало ответы на все вопросы. Но понимаю, что далеко не у всех есть такая возможность. У меня была похожая ситуация в начале. Попробуйте загрузить мой скетч, установив #define RTC_PRESENT 0. Если приходят хоть какие-то импульсы с частотой 1024Гц, в Serial информация свалится. А там уж и видно будет, что не так.
На самом деле вы можете проверить непосредственно в скетче ловит ли приемник что либо: поставьте печать в консоль значения pulse как тут
Если приемник работает в консоль будет валиться куча байтов
Выглядит это как шум, шум, шум потом сигнал и опять шум. Причем сигнал меньше по аплитуде чем шум.
если сигнал мелкий - то частота не совпадает... или модуляция не АМ.
Выкладываю подчищенный скетч re3lex-а только под датчики. Надеюсь кому то пригодится:
если сигнал мелкий - то частота не совпадает... или модуляция не АМ.
Спасибо, уже удалось запустить. :)
Уважаемые гуру!
Подскажите, пожалуйста, почему выше приведенный скетч работает ТОЛЬКО на 2 цифровом пине? При указании другого пина сигнал не читается, как будто его вообще нет. :(
Уважаемые гуру!
Подскажите, пожалуйста, почему выше приведенный скетч работает ТОЛЬКО на 2 цифровом пине? При указании другого пина сигнал не читается, как будто его вообще нет. :(
я не гуру, но я отвечу :)
Потому что на втором пине доступны прерывания:
http://arduino.ru/Hardware/ArduinoBoardUno
я не гуру, но я отвечу :)
Потому что на втором пине доступны прерывания:
http://arduino.ru/Hardware/ArduinoBoardUno
Точно! Спасибо!
Уже понял что это связано со строкой
attachInterrupt(1, ext_int_1, CHANGE);
Только что запустил на 3 пине. Теперь осталось на меге это запустить на пинах выше 23-го.
Интуитивно понял по строке из другого скетча:
mySwitch.enableReceive(0); // Receiver on inerrupt 0 => that is pin #2
Но что это прерывание думал бы еше долго. )))))
Похоже для меги максимум по прерываниям 18-21 пины.
А они у меня под TFT экраном и какие то уже зняты. Завтра попробую подлезть.
Есть замечательные железки на чипе SI4432 (готовый модуль RF22), поддерживает разные модуляции и частоты, есть готовая библиотека для Arduino.
Кто-то использовал такой модуль для приема и отправки данных для погодных датчиков?
Есть замечательные железки на чипе SI4432 (готовый модуль RF22), поддерживает разные модуляции и частоты, есть готовая библиотека для Arduino.
Хороший модуль, мощьный, дальнобойный (с приличной антенной на несколько километров лупит). Для чего его использовать не принципиально, только учтите что он весьма прожорливый, если нужно автономное питание.
Почему когда подключаю на arduino nano pin a0, d2 или d12 - не принимаются показания с датчика - на какой пин нужно вешать приемник ???
2 и 3 цифровые ноги судя по всему
2 и 3 цифровые ноги судя по всему
Да, работает только на пинах где есть прерываение.
Всем привет. В общем прошло много времени уже с момента подключения oregon датчика. Собственно по теме: подключил дисплей 16x2 + RTC + 433 приемник. Код брал отсюда https://github.com/onlinux/OWL-CM180/blob/6d47a1003ffe4d00a5d72f01ffb347... весь не буду выкладывать.
Вот мой код переделанный:
Ну вот тишина (((( А вроде на вид не сложно ...
В общем, часы тикают и отображаются, а вот температура нет. По отдельности если закоментить вывод часов- все ок. переносил вывод температуры в глобальную переменную нарвался на отображение температуры в увеличенном в 2 раза размере. Как праивлно сделать вывод ??? Спасибо
Сталкивался с такой же проблемой. Понял, что если в loop вызывается тяжелая процедура, то сигнал с датчика часто не успевает считася.
сделайте вызов printTime(); раз в секунду например, все должно заработать.
Доброго вечера, уважаемые форумчане!
А эмуляцию Орегоновских датчиков никто не реализовал?
какой версии протокола?
Датчик типа THGN132N по моему 2 версия протокола.
увы, полином найти не удалось. если счастливый обладатель датчика предоставит посылки отличающиеся одним битом можно будет закодировать crc порождающей матрицей.
Эмулятор из самого первого поста использует 2 версию, он работает у вас?
Попробуй код отсюда https://github.com/onlinux/OWL-CM180/blob/6d47a1003ffe4d00a5d72f01ffb3477ba8083a4e/arduino/oregon_owl.ino
Привет! У меня такой датчки Assistant AH-1976
Я вижу, что я с него сигнал получаю, но данные вытащить не могу. Видео на YouTobe https://youtu.be/kDhrJ00as0Y
Скетч взял этот: http://arduino.ru/forum/proekty/chtenie-i-emulyatsiya-datchikov-oregon-scientific-433mhz?page=2#comment-143544 и дописал в него вывод пульс.
Что выводит pulse ? Что значут эти цифры?
Я так понимаю, что декодер под него не подходит и по этому я на выходе нечего нее вижу.
Есть смысл с ним мучатся или проще свой датчик на Arduino сделать?
P.S. На видео с лева SDR которая читает данные с китайского ТВ тюнера DVB-T вот такого вот: http://ru.aliexpress.com/item/USB2-0-DAB-FM-DVB-T-RTL2832-R820T-SDR-RTL-SDR-Dongle-Stick-Digital-TV-Tuner/32267130430.html
это же не орегон, и что он там шлет только китайцам известно.
Пульс- это оцифрованный сигнал, полученный за время прерывания
Спасибо! Понял, что декоддировать не выйдет и лучше делать свой датчик на Arduino или ESP8266
Продолжая тему, если кому интересно сделал веб серверок с отображением датчиков орегоновских. отличие - основной код вынесен в библиотеки. Пришлось так сделать, из-за понятности и структурности кода. В планах сделать страничку загружаемую с SD карты с нормлаьным оформлением. в UNO занимает 16кб, есть еще куда дописать.
а сами библиотеки есть?
PS оптимально вообще адаптировать код под ESP8266 и лить данные по WIFI :)
есть конечно. а по поводу esp8266 он шумит сильно, плохо на приемник влияет.. а так да, иделаьно-б было. ЕЩе вариант, если-б автор прошивки известной для esp8266 homes-smart.ru внес в нее чтение данных датчиков.
выложите пожалуйста, ок?
попробуйте написать автору, может добавит тоже
куда выложить-то?? тут чудной форум.. как в нем файлы-то прикреплять. А по автору прошивки, тут думаю материально надо его стимулировать.. + делать макетку для esp уменьшающую собственные шумы ( развяки по питанию, экраны и пр)
Добрый день ! такой вот модуль http://www.aliexpress.com/snapshot/6822989142.html?orderId=68533532401167 куплен и работает с антенной конечно , но иногда получает инфу орегона(THGN132N) с ошибками , причина не ясна. Код ведь используемый для приема чужой и он до конца не ясен. Сейчас использую в связке с Esp 8266-07. До этого с ардуино uno и приемник был вот этот http://www.aliexpress.com/snapshot/6425544719.html?orderId=65249433881167 ошибок не было ,но был прием плох мог раз за полчаса принять. В принципе esp стабильней работает и с интернетом соединение без дополнительных модулей, да и с прерываниями у нее лучше чем на ардуинке( на esp указываешь пин какой тебе нужен. Скетч можно компилировать и среды ардуино. P.S. фото если получится загружу

я-б приемник экранировал.. а антенку использовал от рации на 433..
Кто сможет помочь с выводом температуры с датчика орегон большими цифрами? Код есть сделал по этой статье https://geektimes.ru/post/255812/ , сам код просто очень большой получился - вот исходник https://cloud.mail.ru/public/KGdN/8QA7A3zx7 . В интернете ничего толкого не нашел. ((
Компилятор ругается так:
Big_LCD.ino: In function 'void reportSerial(const char*, DecodeOOK&)':
Big_LCD:491: error: at this point in file"
Ну вот (((
привет! в инструкции на амс пишут диапазон 795 – 1050mb, в исходниках декодеров давление вычисляется прибавлением к константе 856. кто может внести ясность?
Пробовал
я-б приемник экранировал.. а антенку использовал от рации на 433..
пробовал , пофиг, в скетче добавлена проверка приема данных, если разброс составит 5 гр. или 5% влажности между приемом значит ложь . За 40сек. между передачами так темп.и влажность скакануть не смогут.
В общем, часы тикают и отображаются, а вот температура нет. По отдельности если закоментить вывод часов- все ок. переносил вывод температуры в глобальную переменную нарвался на отображение температуры в увеличенном в 2 раза размере. Как праивлно сделать вывод ??? Спасибо
Сталкивался с такой же проблемой. Понял, что если в loop вызывается тяжелая процедура, то сигнал с датчика часто не успевает считася.
сделайте вызов printTime(); раз в секунду например, все должно заработать.
Добрый день!
Все верно. У меня раз в 10 минут обновляется дисплей, раз в 15 минут производится отправка данных на narodmon.ru. А часы метеостанции не нужны, имхо.
Добрый день!
Все верно. У меня раз в 10 минут обновляется дисплей, раз в 15 минут производится отправка данных на narodmon.ru. А часы метеостанции не нужны, имхо.
У меня это не просто метеостнция. Этот блок у меня ка основной для умного дома.
Если интересно:
https://www.youtube.com/watch?v=rQ4M4hDmMoA&index=1&list=PL2wwtsKwVVjL-t...
Подскажите, взял код передатчика из первого поста эмуляции орегона, всё подключил но база ничего не показывает.
Хотя в эфир всё уходит, проверял через код приёмника. У кого получилось эмулировать датчик для базы?
В общем код из шапки поста неполный, надо его чуток дохачивать...
1) Кроме чексуммы восьмого байта ещё и CRC считать в девятом байте пакета.
Заменив старую функцию новой
2) Увеличить размер буфера с 9 на 10 из-за CRC.
3) Увеличить размер тишины между посылками delayMicroseconds(TWOTIME*10); хотя это и не обязательно, обычно база читает только первый посыл.
4) защитить код передатчика от прерываний
5) И самое главное - найти осциллографом или методом научного тыка временные интервалы для "TIME = 482". У меня три ардуины и у всех этот параметр пришлось подбирать индивидуально, из-за различий в работе внутреннего таймера. Приём на базе работает только если это время +/- 1-3 микросекунды от стандарта. Выключение прерываний сильно влияет на этот параметр, если их не выключать ардуина растягивает пакеты во времени на произвольное число и они не всегда понимаются базой. Если нет осциллографа можно попробовать перебрать по очереди все значения от 480-490... ;)
Кстати, представленный в первом посте код приёмника у меня "глуховат", почти не слышит датчики внешние, а вот тот что представлен в посте #113 вполне работает сносно, правда часто CRC в конце пакета не показывает, возможно из-за этого первый код и не работает... но тут уж я разбираться не стал, работает и ладно... ;)
Поделитесь опытом: кто какой приемник использует для приема орегоновских датчиков и как далеко они работают.
Мне бы добиться уверено приема на расстоянии 10 метров через пару гипсовых стен.
Экспериментировал с датчиками Oregon Scientific THN132N и таким копеечным приёмником
Если питать Arduino от USB, то без антенны приёмник ловит сигнал на расстоянии около 50 см, а с прикрученным куском провода около 17-18 см - на расстоянии около метра.
Если подать питание от адаптера на 12V, то происходит чудо — сигнал удаётся получить с расстояния >10 метров через три стены в панельном доме.
В процессе построения погодной станции на датчиках Oregon не смог на указанном здесь коде добиться нужной дальности приёма. Пришлось писать свой приёмник, а затем и передатчик . Думал разместить всё сюда, но решил создать отдельную тему. Всё-таки проект...
http://arduino.ru/forum/proekty/pogodnaya-stantsiya-na-datchikakh-oregon...
Чтоб работал прием с датчикав, надо использовать нормальный приемник. Дешёвые приёмники с али плохо настроены, видимо. У меня отличный прием в квартире через 2 толстые (60см) кирпичные стены 15метров по прямой. Приемник с али ловил в пределах 10см.
Я сравнивал дальность приёма приёмника с али и приёмника из погодной станции Oregon. Разницы не обнаружил. Да и по схеме они очень схожи, хотя орегоновский выполнен, конечно, солиднее. У него индуктивность входного контура выполнена дорожкой на плате.
Прикупил себе вот такую пару: приемник MX-RM-5V и передатчик FS1000A. Вместе они прекрасно работают, а вот сигнал с THN123N не ловится никак, ни с 10 см ни 10м. Сначала думал что мне попались модули на 315Mhz, но нет на кварце передатчика четко написано 433Mhz.
В чем может быть причина???
В идеале надо бы к выходу приёмника подключиться осциллографом, это дало ответы на все вопросы. Но понимаю, что далеко не у всех есть такая возможность. У меня была похожая ситуация в начале. Попробуйте загрузить мой скетч, установив #define RTC_PRESENT 0. Если приходят хоть какие-то импульсы с частотой 1024Гц, в Serial информация свалится. А там уж и видно будет, что не так.
А где, собственно, ваш скетч?