rf-433 раз в сутки начинает считывать только первый символ сообщения.

byby22
Offline
Зарегистрирован: 24.01.2014

Добрый день, уважаемые форумчане. Хотел сделать сигнализацию подвала на rf-433 (самый дешевый из них). Иногда начинались сбои в работе. Включил через монитор порта отслеживание порта. В итоге после того как происходит такой сбой начинает принимать не слово (например "GOD" а просто символ "G". Принимал абсолютно каждый посыл, без пропусков, но почему-то только первый символ.. Думал шумы, помехи, но ведь доходили совершенно все сигналы (первая буква их). К тому же я походил по комнате в поисках полного сигнала, но безуспешно, только первая буква и всё. А после сброса ардуины-приёмника сразу же опять  начинало принимать полностью сигналы. Использовал библиотеку VirtualWire. питание от 18650 и ардуины и приемника (параллельно постоянно подзаряжаемой от блока питания телефонного или USB через плату подзарядки liion) .

текст прошивки (отрывок, зацикленный):

if (vw_get_message(message, &messageLength)) // Если есть данные..
     { if (message[0]=='b'&& message[1]=='a'&&message[2]=='d')
      {digitalWrite (8,HIGH);tone(10, 5000);}
      if (message[0]=='o'&&message[1]=='t'&&message[2]=='k')
      {p=true;}
      if (message[0]=='g'&&message[1]=='o'&&message[2]=='d')
       {digitalWrite (5,HIGH)}}
b707
Offline
Зарегистрирован: 26.05.2017

выкладывайте полный код

byby22
Offline
Зарегистрирован: 24.01.2014
#include <VirtualWire.h>
bool m,n,b,p,g; //f-для писка малого динамика g-показывает взломана ли дверь
unsigned long timer1,timer2,timer3,timer4; //для связи с сигнализацией,для заряда,для мигания,для писка малого динамика
byte message[VW_MAX_MESSAGE_LEN]; // Буфер для хранения принимаемых данных
byte messageLength = VW_MAX_MESSAGE_LEN; // Размер сообщения


void setup() {
vw_set_rx_pin(12); // Пин подключения приемника
vw_setup(2000); // Скорость передачи данных (бит в секунду)
vw_rx_start(); // Активация применика
 pinMode(3, OUTPUT);
   pinMode(5, OUTPUT);
      pinMode(6, OUTPUT);
    pinMode(8, OUTPUT);
    // pinMode(13, INPUT); ////УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       pinMode(9, OUTPUT);
     pinMode(10, OUTPUT);
    timer3=millis(); timer4=millis();
    b=true;
    //Serial.begin(9600); // для передачи на экран принятого (//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}

void loop() {
      if ((millis() - timer3) > 1000 )   { b=!(b);timer3=millis(); if (b==true) {digitalWrite (9,HIGH); }  else  {digitalWrite (9,LOW); }}
  if (vw_get_message(message, &messageLength)) // Если есть данные..
     {
     // for (int i = 0; i < messageLength; i++) {Serial.write(message[i]); } Serial.println(); if (digitalRead(13) == HIGH) {Serial.write('1');} //УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ!!!!!!!!!!!!!!!!
if ((message[0]=='v'&& message[1]=='k'&&message[2]=='l')||(message[0]=='g'&&message[1]=='o'&&message[2]=='d'))  // Если принято слово vkl
       {tone(10, 5000);delay (500);noTone(10);
        digitalWrite (3,HIGH);n=false; m=false;p=false ;g=false;timer1=millis();
      //  if (digitalRead(13) == HIGH) {Serial.write('2');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     while (p==false) //пока не пришло сообщение что дверь открыли ключом
     {
     //  if (digitalRead(13) == HIGH) {Serial.write('3');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      if (vw_get_message(message, &messageLength)) // Если есть данные..
     {
      // for (int i = 0; i < messageLength; i++) {Serial.write(message[i]); } Serial.println(); if (digitalRead(13) == HIGH) {Serial.write('4');} //УДАЛИТЬ ПОСЛЕ!!!!!!!!!!!!!!!!!!!
      //tone(10, 5000);delay (300);noTone(10);//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ (писк при любой приемке сигнала)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      if (message[0]=='b'&& message[1]=='a'&&message[2]=='d')// Если принято слово bad (взлом двери)
      {digitalWrite (8,HIGH);g=true;tone(10, 5000);}
      if (message[0]=='o'&&message[1]=='t'&&message[2]=='k')// Если принято слово otk (открыта дверь ключом)
      {p=true;}
      if (message[0]=='g'&&message[1]=='o'&&message[2]=='d')// Если принято слово god (проверка связи)
      { timer1=millis();m=false; digitalWrite (5,LOW); if ((n==false) && (g==false)) {noTone(10);}}
      if (message[0]=='l'&&message[1]=='o'&&message[2]=='w')// Если принято слово low (малый заряд)
      { n=true; timer2=millis();digitalWrite (6,HIGH); }
       //if (digitalRead(13) == HIGH) {Serial.write('5');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     }
     if ((millis() - timer1) > 6000000 )//если сигнал о связи не приходит долго
     {m=true; digitalWrite (5,HIGH);}
    //  if (digitalRead(31) == HIGH) {Serial.write('6');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!!
     if ((n==true)&&((millis() - timer2)> 70000))//если долго не приходит сигнал о выключеном питании
     {n=false;digitalWrite (6,LOW); if ((m==false) && (g==false)) {noTone(10);};}
    //  if (digitalRead(13) == HIGH) {Serial.write('7');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!
     if ((g==false)&&((m==true)||(n==true)))//если не взломали дверь и(отключено питание или долго не доходит заряд)
     { 
    //   if (digitalRead(13) == HIGH) {Serial.write('8');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      if ((millis() - timer4 )> 500 )   {noTone(10); }
       if ((millis() - timer4) > 9500 )   {  timer4=millis();tone(10, 5000);}
      }
     if ((millis() - timer3) > 1000 )   { b=!(b);timer3=millis(); if (b==true) {digitalWrite (9,HIGH); }  else  {digitalWrite (9,LOW); }}
   //   if (digitalRead(13) == HIGH) {Serial.write('9');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!!
       }
      digitalWrite (9,HIGH);
      noTone(10);g=false;digitalWrite (3,LOW);digitalWrite (5,LOW);digitalWrite (6,LOW);digitalWrite (8,LOW);
    tone(10, 5000);delay (500);noTone(10);};
       }
}

 

byby22
Offline
Зарегистрирован: 24.01.2014

я за 5 лет второй раз обращаюсь. Первый раз причем мне нахамили и не помогли в итоге. Не удивлюсь если снова так будет.

b707
Offline
Зарегистрирован: 26.05.2017

byby22 пишет:

я за 5 лет второй раз обращаюсь. Первый раз причем мне нахамили и не помогли в итоге. Не удивлюсь если снова так будет.

прочитайте прикрепленную тему в Песочнице - первое и второе сообщение. Вставьте код правильно. Без этого с Вами никто разговаривать не будет.

byby22
Offline
Зарегистрирован: 24.01.2014

Спасибо за рекомендацию! исправил (см. ранее). Заранее извиняюсь что не сделал так сразу.

b707
Offline
Зарегистрирован: 26.05.2017

byby22 - вот вы опять скажете, что вас троллят - но это не код... а просто какая-то помойка. Вы специально старались отформатить его так, чтоб было максимально неудобно разбираться? - неужели так трудно правильно расставить отступы и скобки, поместить по одному оператору на строчку? Вставить пробелы между членами логических выражений?

А если по делу -насколько я могу разобраться в этой каше - проблема на стороне передатчика. Думаю, его код нужен тоже. Но если там такая же жуть намешана - с вероятностью процентов 80% никто не полезет копаться в этой куче бессмысленных букв

byby22
Offline
Зарегистрирован: 24.01.2014

b707 пишет:

byby22 - вот вы опять скажете, что вас троллят - но это не код... а просто какая-то помойка. Вы специально старались отформатить его так, чтоб было максимально неудобно разбираться? - неужели так трудно правильно расставить отступы и скобки, поместить по одному оператору на строчку? Вставить пробелы между членами логических выражений?

А если по делу -насколько я могу разобраться в этой каше - проблема на стороне передатчика. Думаю, его код нужен тоже. Но если там такая же жуть намешана - с вероятностью процентов 80% никто не полезет копаться в этой куче бессмысленных букв

Попытка не пытка. Может кто попадется отзывчивый, например посоветует контроллер поменять или плату заэкранировать или еще какие-нибудь предположения.  В передатчик не лезу уже неделю-он безошибочно вещает, это подтверждено тем, что после сброса контроллера приемника он по прежнему работает почти полные сутки без сбоев, именно после перегрузки контроллера. Я просто ищу может у кого была похожая проблема? Может тонкость есть там какая-нибудь, например буфер какой-нибудь переполняется к примеру-я ведь в этой библиотеке не совсем ориентируюсь.

SLKH
Offline
Зарегистрирован: 17.08.2015

byby22 пишет:

b707 пишет:

byby22 - вот вы опять скажете, что вас троллят - но это не код... а просто какая-то помойка. Вы специально старались отформатить его так, чтоб было максимально неудобно разбираться? - неужели так трудно правильно расставить отступы и скобки, поместить по одному оператору на строчку? Вставить пробелы между членами логических выражений?

А если по делу -насколько я могу разобраться в этой каше - проблема на стороне передатчика. Думаю, его код нужен тоже. Но если там такая же жуть намешана - с вероятностью процентов 80% никто не полезет копаться в этой куче бессмысленных букв

Попытка не пытка. Может кто попадется отзывчивый, 

Я, например, дочитал до строки 25.  Может быть, кто-то прочитает дальше.

b707
Offline
Зарегистрирован: 26.05.2017

byby22 пишет:

Попытка не пытка. Может кто попадется отзывчивый

Вместо того, чтоб ждать "отзывчивого" - может все-таки сделаете над собой усилие и поможете тем, кто будет влезать в ваш код? стоило бы для начала код "причесать", чтобы его можно было читать нормально. Мне кажется, что у вас проблема с вложенностью циклов (то есть условия вложены неправильно) - но, повторюсь, в этой каше разобраться тяжело.

byby22
Offline
Зарегистрирован: 24.01.2014

SLKH пишет:

byby22 пишет:

b707 пишет:

byby22 - вот вы опять скажете, что вас троллят - но это не код... а просто какая-то помойка. Вы специально старались отформатить его так, чтоб было максимально неудобно разбираться? - неужели так трудно правильно расставить отступы и скобки, поместить по одному оператору на строчку? Вставить пробелы между членами логических выражений?

А если по делу -насколько я могу разобраться в этой каше - проблема на стороне передатчика. Думаю, его код нужен тоже. Но если там такая же жуть намешана - с вероятностью процентов 80% никто не полезет копаться в этой куче бессмысленных букв

Попытка не пытка. Может кто попадется отзывчивый, 

Я, например, дочитал до строки 25.  Может быть, кто-то прочитает дальше.

Спасибо за бесполезно потраченое время!) 

b707
Offline
Зарегистрирован: 26.05.2017

byby22 пишет:

Спасибо за бесполезно потраченое время!) 

а вы не юродствуйте, а лучше слушайте советы

byby22
Offline
Зарегистрирован: 24.01.2014

b707 пишет:

byby22 пишет:

Попытка не пытка. Может кто попадется отзывчивый

Вместо того, чтоб ждать "отзывчивого" - может все-таки сделаете над собой усилие и поможете тем, кто будет влезать в ваш код? стоило бы для начала код "причесать", чтобы его можно было читать нормально. Мне кажется, что у вас проблема с вложенностью циклов (то есть условия вложены неправильно) - но, повторюсь, в этой каше разобраться тяжело.

цикл там всего один. и ошибку я проверяю всего парой строчкой:

if (vw_get_message(message, &messageLength)) // Если есть данные..
     {
      for (int i = 0; i < messageLength; i++) {Serial.write(message[i]); } 

 

и читаю что он поймал. Так вот, когда он не "глючит"-монитор порта пишет полностью сообщения, а после того как глюканет-в монитор порта выводятся только первые буквы сообщения. Ну а скетч полностью Вы зачем-то попросили, зачем вам вдаваться в его подробности мне лично вообще не понятно совсем, но раз Вы попросили-я его предоставил. В любом случае СПАСИБО за то что не прошли мимо.

b707
Offline
Зарегистрирован: 26.05.2017

ну не хотите - как хотите. Вы за 5 лет не только код вставлять, но и вопросы правильно задавть не научились.

 ждите отзывчивого

kalapanga
Offline
Зарегистрирован: 23.10.2016

byby22, Для ловли подобной ошибки скетч нужен как можно более короткий, но рабочий. По-этому, кусочка из начального сообщения мало, а полного скетча много. Вы бы оставили в скетче только инициализацию приёмника и в лупе две строчки из сообщения #12. Посмотрели, воспроизводится ошибка или нет. Стало бы понятно - имеет значение остальной код или нет. Дальше, возможно, с передатчиком то же самое сделать нужно будет. Надо как-то локализовывать ошибку.

b707
Offline
Зарегистрирован: 26.05.2017

kalapanga - не вполне согласен. У него в коде сообщение читается как минимум в 2х местах (если не в трех - ХЗ что разберешь в этой мешанине), причем одно чтение вложено в другое. Так что сдается мне. что глюк надо искать в полном коде.

А обозначенного маленького куска в конечном коде ВООБЩЕ НЕТ...

kalapanga
Offline
Зарегистрирован: 23.10.2016

Это я видел. Написано конечно неудачно. И сообщения в двух местах читаются и while ещё там, в котором тоже небось застрять можно. Вот я и предлагаю оставить в скетче одно единственное чтение с выводом в порт. А то может передатчик, в котором автор так уверен, всё-таки не дело передаёт. Так хоть его отсеем.

byby22
Offline
Зарегистрирован: 24.01.2014

b707 пишет:

kalapanga - не вполне согласен. У него в коде сообщение читается как минимум в 2х местах (если не в трех - ХЗ что разберешь в этой мешанине), причем одно чтение вложено в другое. Так что сдается мне. что глюк надо искать в полном коде.

А обозначенного маленького куска в конечном коде ВООБЩЕ НЕТ...

количество мест в которых встречается прием можно посчитать, воспользовавшись Ctrl+F.

Очевидно что их всего 2 шт. И на мой взгляд очевидно что функцию отправки на монитор порта я оставил за комментариями, чтобы вас не отвлекать, но если присмотреться, то эта функция присутствует практически сразу же после каждого из 2-ух мест приёма сообщения (чтобы я не пропускал ни одного из входящих сообщений). Ну а одно вложено в другое, т.к. по алгоритму я так решил. И сам код рабочий-он у меня работает и срабатывает (причем не однократно проверян), но раз в сутки где-то происходит сбой, после которого начинает принимать почему-то не всё слово, а только первый символ. Вот и думаю-или контроллер глючит или есть где-то буфер который переполняется и который еще и обнулять нужно перед каждым приёмом.

b707
Offline
Зарегистрирован: 26.05.2017

byby22 - все что вам представляется "очевидным" - вы уже излагали в первом сообщении. Но мне очевидно, что ваших знаний в данной ситуации недостаточно, так как в противном случае вы не пришли бы на форум. Поэтому у вас два пути - либо вы слушаете советы и выполняете их, и мы попытаемся найти ошибку - либо вы поступаете по своему разумению -  и ищете ошибку сами.

byby22
Offline
Зарегистрирован: 24.01.2014

kalapanga пишет:

Это я видел. Написано конечно неудачно. И сообщения в двух местах читаются и while ещё там, в котором тоже небось застрять можно. Вот я и предлагаю оставить в скетче одно единственное чтение с выводом в порт. А то может передатчик, в котором автор так уверен, всё-таки не дело передаёт. Так хоть его отсеем.

За единственно пока логичный совет  спасибо. Единственный минус-сбой встречается где-то раз в сутки. Эксперимент довольно длительный(( Но если другого выхода не будет, придётся к нему прибегнуть.

Насчет передатчика даже не сомневайтесь. Я к нему не подхожу. И простой эксперимент-специально в подвале делаю чтобы сработала сигнализация. В таком случае он присылает каждую секунду сообщение "bad". Так вот, в этот момент если он еще не заглючил приходит это слово. Как только приемная сторона заглючила, каждую секунду, без пропусков приходит "b". Отключаю сигнализацию в подвале (приемник все еще работает)-вместо "otk" приходят сообщения "о". И так любые сообщения. Но как только сделаю сброс контроллеру приемника, даже не подходя к передатчику (3 этажа расстояние)-мгновенно сново начинают приходить сообщения в полном формате, т.е. "bad" и "otk"

byby22
Offline
Зарегистрирован: 24.01.2014

b707 пишет:

byby22 - все что вам представляется "очевидным" - вы уже излагали в первом сообщении. Но мне очевидно, что ваших знаний в данной ситуации недостаточно, так как в противном случае вы не пришли бы на форум. Поэтому у вас два пути - либо вы слушаете советы и выполняете их, и мы попытаемся найти ошибку - либо вы поступаете по своему разумению -  и ищете ошибку сами.

Всё правильно. Но есть вещи которых я сам могу отсеить опытным путём и путём логических размышлений. А есть области, в которых я мало разбираюсь. Например подскажите мне, пожалуйста, вначале программы стоит строка vw_setup(2000); -скорость передачи данных. Так вот, вопрос лично к вам например (сам я не могу на это ответить, но правда очень любопытно). В каком диапазоне эту скорость я могу изменять на данных модулях и влияет ли она на то, насколько устойчивым будет в итоге связь???

kalapanga
Offline
Зарегистрирован: 23.10.2016

Не Ваш ли это случай: http://forum.amperka.ru/threads/433%D0%9C%D0%93%D1%86-virtualwire.6962/ ?

Только у Вас присвоение messageLength = VW_MAX_MESSAGE_LEN нужно перед обоими чтениями воткнуть.
 

b707
Offline
Зарегистрирован: 26.05.2017

byby22 пишет:

За единственно пока логичный совет  спасибо. Единственный минус-сбой встречается где-то раз в сутки. Эксперимент довольно длительный(( Но если другого выхода не будет, придётся к нему прибегнуть.

советую добавить вывод в Сериал еще и переменной messageLength

if (vw_get_message(message, &messageLength)) // Если есть данные..
     {
      Serila.print("Message received, length: ");
      Serial.println(messageLength);
      for (int i = 0; i < messageLength; i++) {Serial.write(message[i]); } 

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

форматированный код

#include <VirtualWire.h>
bool m, n, b, p, g;                           //f-для писка малого динамика g-показывает взломана ли дверь
unsigned long timer1, timer2, timer3, timer4; //для связи с сигнализацией,для заряда,для мигания,для писка малого динамика
byte message[VW_MAX_MESSAGE_LEN];             // Буфер для хранения принимаемых данных
byte messageLength = VW_MAX_MESSAGE_LEN;      // Размер сообщения

void setup()
{
  vw_set_rx_pin(12); // Пин подключения приемника
  vw_setup(2000);    // Скорость передачи данных (бит в секунду)
  vw_rx_start();     // Активация применика
  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(8, OUTPUT);
  // pinMode(13, INPUT); ////УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  timer3 = millis();
  timer4 = millis();
  b = true;
  //Serial.begin(9600); // для передачи на экран принятого (//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}

void loop()
{
  if ((millis() - timer3) > 1000)
  {
    b = !(b);
    timer3 = millis();
    if (b == true)
    {
      digitalWrite(9, HIGH);
    }
    else
    {
      digitalWrite(9, LOW);
    }
  }
  if (vw_get_message(message, &messageLength)) // Если есть данные..
  {
    // for (int i = 0; i < messageLength; i++) {Serial.write(message[i]); } Serial.println(); if (digitalRead(13) == HIGH) {Serial.write('1');} //УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ!!!!!!!!!!!!!!!!
    if ((message[0] == 'v' && message[1] == 'k' && message[2] == 'l') || (message[0] == 'g' && message[1] == 'o' && message[2] == 'd')) // Если принято слово vkl
    {
      tone(10, 5000);
      delay(500);
      noTone(10);
      digitalWrite(3, HIGH);
      n = false;
      m = false;
      p = false;
      g = false;
      timer1 = millis();
      //  if (digitalRead(13) == HIGH) {Serial.write('2');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      while (p == false) //пока не пришло сообщение что дверь открыли ключом
      {
        //  if (digitalRead(13) == HIGH) {Serial.write('3');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        if (vw_get_message(message, &messageLength)) // Если есть данные..
        {
          // for (int i = 0; i < messageLength; i++) {Serial.write(message[i]); } Serial.println(); if (digitalRead(13) == HIGH) {Serial.write('4');} //УДАЛИТЬ ПОСЛЕ!!!!!!!!!!!!!!!!!!!
          //tone(10, 5000);delay (300);noTone(10);//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ (писк при любой приемке сигнала)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
          if (message[0] == 'b' && message[1] == 'a' && message[2] == 'd') // Если принято слово bad (взлом двери)
          {
            digitalWrite(8, HIGH);
            g = true;
            tone(10, 5000);
          }
          if (message[0] == 'o' && message[1] == 't' && message[2] == 'k') // Если принято слово otk (открыта дверь ключом)
          {
            p = true;
          }
          if (message[0] == 'g' && message[1] == 'o' && message[2] == 'd') // Если принято слово god (проверка связи)
          {
            timer1 = millis();
            m = false;
            digitalWrite(5, LOW);
            if ((n == false) && (g == false))
            {
              noTone(10);
            }
          }
          if (message[0] == 'l' && message[1] == 'o' && message[2] == 'w') // Если принято слово low (малый заряд)
          {
            n = true;
            timer2 = millis();
            digitalWrite(6, HIGH);
          }
          //if (digitalRead(13) == HIGH) {Serial.write('5');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        }
        if ((millis() - timer1) > 6000000) //если сигнал о связи не приходит долго
        {
          m = true;
          digitalWrite(5, HIGH);
        }
        //  if (digitalRead(31) == HIGH) {Serial.write('6');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!!
        if ((n == true) && ((millis() - timer2) > 70000)) //если долго не приходит сигнал о выключеном питании
        {
          n = false;
          digitalWrite(6, LOW);
          if ((m == false) && (g == false))
          {
            noTone(10);
          };
        }
        //  if (digitalRead(13) == HIGH) {Serial.write('7');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!
        if ((g == false) && ((m == true) || (n == true))) //если не взломали дверь и(отключено питание или долго не доходит заряд)
        {
          //   if (digitalRead(13) == HIGH) {Serial.write('8');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
          if ((millis() - timer4) > 500)
          {
            noTone(10);
          }
          if ((millis() - timer4) > 9500)
          {
            timer4 = millis();
            tone(10, 5000);
          }
        }
        if ((millis() - timer3) > 1000)
        {
          b = !(b);
          timer3 = millis();
          if (b == true)
          {
            digitalWrite(9, HIGH);
          }
          else
          {
            digitalWrite(9, LOW);
          }
        }
        //   if (digitalRead(13) == HIGH) {Serial.write('9');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!!
      }
      digitalWrite(9, HIGH);
      noTone(10);
      g = false;
      digitalWrite(3, LOW);
      digitalWrite(5, LOW);
      digitalWrite(6, LOW);
      digitalWrite(8, LOW);
      tone(10, 5000);
      delay(500);
      noTone(10);
    };
  }
}

 

byby22
Offline
Зарегистрирован: 24.01.2014

kalapanga пишет:

Не Ваш ли это случай: http://forum.amperka.ru/threads/433%D0%9C%D0%93%D1%86-virtualwire.6962/ ?

Только у Вас присвоение messageLength = VW_MAX_MESSAGE_LEN нужно перед обоими чтениями воткнуть.
 

ОГРОМНОЕ СПАСИБО ЗА ССЫЛКУ!!!! Попытаюсь переделать и посмотреть, прошел глюк или нет. Скорее всего именно в этом и есть беда, но откуда я мог это знать!!!!! СПАСИБО еще раз. Думаю пока мне информации достаточно.

byby22
Offline
Зарегистрирован: 24.01.2014

xDriver, тоже спасибо за помощь.

b707
Offline
Зарегистрирован: 26.05.2017

kalapanga пишет:

Не Ваш ли это случай: http://forum.amperka.ru/threads/433%D0%9C%D0%93%D1%86-virtualwire.6962/ ?

похоже что да :)

Функция "vw_get_message" криво написана в библиотеке. Только я бы "лечил" это не так - не выставлял бы messageLength = VW_MAX_MESSAGE_LEN перед каждым чтением, а передавал бы функции "vw_get_message" вместо глобала messageLength временную переменную.

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Оффтоп для администрации: впишите в правила размещения кода фразу типа "перед вставкой кода отформатируйте его, или находясь в Arduino IDE нажмите Ctrl+T".

FYI: стоит подумать как установить в форум это: https://github.com/prettier/prettier (мб написать какую-то php-затычку, которая будет передавать автоформаттеру содержимое bb-кода [code] из запощиваемого поста). Системные требования node.js+npm

byby22
Offline
Зарегистрирован: 24.01.2014

Voodoo Doll пишет:

Оффтоп для администрации: впишите в правила размещения кода фразу типа "перед вставкой кода отформатируйте его, или находясь в Arduino IDE нажмите Ctrl+T".

FYI: стоит подумать как установить в форум это: https://github.com/prettier/prettier (мб написать какую-то php-затычку, которая будет передавать автоформаттеру содержимое bb-кода [code] из запощиваемого поста). Системные требования node.js+npm

Насчет Ctrl+T даже не догадывался. Спасибо за обучение!

byby22
Offline
Зарегистрирован: 24.01.2014

Тему можно считать закрытой. Ошибка прошла благодаря вышеперечисленному предложению. Всем спасибо за помощь и неравнодушие!!!