Arduino Mega Server

Модератор: Alex

cahek2202
Сообщения: 23
Зарегистрирован: Пт окт 07, 2016 7:35 pm
Откуда: Москва
Благодарил (а): 0
Поблагодарили: 1 раз

Re: Arduino Mega Server

Сообщение cahek2202 » Пт окт 28, 2016 10:16 pm

Добрый вечер! В скетче сенсора обнаружил небольшой недочет. В данной реализации температура не будет передаваться на сервер если дельта температуры за исходный промежуток времени не превышает 0,5 градуса (то есть отправил сенсор на сервер показание 27,5 градуса, следующее измерение дает значение 27,1 градуса, статус "отправка не требуется" и он это значение сохраняет в переменную temp1Back, и следующее значение например, 26,7 градуса, от начального показания разница составляет уже 0,8 градуса и отправка на сервер нужна, но скетч считает разницу 0,4 градуса и отправки не происходит. Опытным путем у меня вышло нерегистрируемое изменение температуры до 4 градусов.
Если нужно - могу выложить свой скетч, но я его подправил под себя немного, и выглядит он несколько топорно, опыта еще маловато, по ходу дела изучаю...

Если не сложно - подскажите что значат вот эти символы "->" и "*" вот в этой части кода например:

Код: Выделить всё

void makePacket(struct Sender *p, byte tpe, byte cmd, byte dest, String pwd, String dta) {
  // sender
  if (p->required) {p->active = true;  p->success = false;}
              else {p->active = false; p->success = true;}

  p->command = cmd;
  p->timer   = millis();
  
  byte type;
  if (p->type) {type = p->type;}
          else {type = tpe;} 
не могу понять что значат вот эти строки "struct Sender *p" и "p->required". Подскажите, пожалуйста, что это значит или ткните где почитать можно, гугл символы не воспринимает)
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server

Сообщение serghei » Пт окт 28, 2016 10:29 pm

Обязательно выкладывайте!!! У меня ситуация еще хуже - при старте температура передается сразу , а по мере быстрого прогрева бойлера в сериале вижу алармы, но АМС их не обрабатывает. Температура так и стоит , как при старте. Вообще хочется ,чтобы передавалась тупо каждый настраиваемый промежуток времени ( ну хотя бы раз в минуту или пять). Интересно смотреть за нагревом в двух баках одного бойлера.)))
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Пт окт 28, 2016 10:34 pm

В данной реализации температура не будет передаваться на сервер если дельта температуры за исходный промежуток времени не превышает 0,5 градуса
Это сделано специально, чтобы и за температурой можно было следить и не загружать эфир постоянными посылками. И эти параметры можно изменять в зависимости от вашей задачи.
Если не сложно - подскажите что значат вот эти символы "->" и "*" вот в этой части кода например:

не могу понять что значат вот эти строки "struct Sender *p" и "p->required". Подскажите, пожалуйста, что это значит или ткните где почитать можно, гугл символы не воспринимает)
Это нужно целую лекцию читать и не одну. Если коротко, то

p->active = true;

Значит присвоить свойству active объекта p значение true.

“*” - это большая тема про сылочные типы и указатели — смотрите в поиске — статей огромное количество в Интернет.
cahek2202
Сообщения: 23
Зарегистрирован: Пт окт 07, 2016 7:35 pm
Откуда: Москва
Благодарил (а): 0
Поблагодарили: 1 раз

Re: Arduino Mega Server

Сообщение cahek2202 » Пт окт 28, 2016 10:45 pm

Alex писал(а):
В данной реализации температура не будет передаваться на сервер если дельта температуры за исходный промежуток времени не превышает 0,5 градуса
Это сделано специально, чтобы и за температурой можно было следить и не загружать эфир постоянными посылками. И эти параметры можно изменять в зависимости от вашей задачи.
Я описание читал, и логику работы понял, но в данном скетче она не соответствует описанию. В данном случае получается что если на сервер отправил температуру например 27,5 градуса, а последующие, скажем пять измерений имели такие значения 27,1; 26,8; 26,4; 26,1; 25,7. То на сервере так и останется температура 27,5 градуса. Хотя изменение температуры составило уже 1,8 градуса. Суть в том что temp1Back=temp1 выполняется на каждом цикле измерения температуры, а по факту необходимо это действие выполнять только при отправлении данных о температуре на сервер.

я это вот так у себя реализовал:

Код: Выделить всё

case 0: 
        temp1 = getTemperature(0);
      #ifdef NRF24_FEATURE
        if      (temp1 == TEMP_NOT_PRESENT) {temp1NeedSend = NEED_SEND_NOT_PRESENT;}
        else if (temp1 == TEMP_NOT_DEFINED) {temp1NeedSend = NO_NEED_SEND;}        
        else if (temp1 == TEMP_REMOVED)     {temp1NeedSend = NEED_SEND_REMOVED;}
        else if (temp1 == TEMP_ERROR)       {temp1NeedSend = NEED_SEND_ERROR;}        
        else {
          if (temp1Back != TEMP_NOT_DEFINED) {
            float t1 = temp1 - temp1Back;
            if (abs(t1) > 0.5) {temp1NeedSend = NEED_SEND_TEMP; temp1Back = temp1;}
            if (temp1 - temp1Back > 3)   {temp1NeedSend = NEED_SEND_ALARM_UP; }
            if (temp1Back - temp1 > 3)   {temp1NeedSend = NEED_SEND_ALARM_DOWN;}
          } else {        
          temp1Back = temp1;
          }
        } // else
      #endif // NRF24_FEATURE
        break; 
За это сообщение автора cahek2202 поблагодарил:
serghei (Пт окт 28, 2016 10:56 pm)
Рейтинг: 1.16%
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Пт окт 28, 2016 10:50 pm

Я описание читал, и логику работы понял, но в данном скетче она не соответствует описанию. В данном случае получается что если на сервер отправил температуру например 27,5 градуса, а последующие, скажем пять измерений имели такие значения 27,1; 26,8; 26,4; 26,1; 25,7. То на сервере так и останется температура 27,5 градуса. Хотя изменение температуры составило уже 1,8 градуса. Суть в том что temp1Back=temp1 выполняется на каждом цикле измерения температуры, а по факту необходимо это действие выполнять только при отправлении данных о температуре на сервер.
Вполне возможно. Когда я буду заниматься этим кодом - обращу внимание на этот момент. А пока кто-нибудь может проверить ваше решение и подтвердить его работоспособность.
За это сообщение автора Alex поблагодарил:
serghei (Пт окт 28, 2016 10:56 pm)
Рейтинг: 1.16%
cahek2202
Сообщения: 23
Зарегистрирован: Пт окт 07, 2016 7:35 pm
Откуда: Москва
Благодарил (а): 0
Поблагодарили: 1 раз

Re: Arduino Mega Server

Сообщение cahek2202 » Пт окт 28, 2016 10:57 pm

serghei писал(а):Обязательно выкладывайте!!!
https://drive.google.com/file/d/0B6zA4V ... sp=sharing
здесь архив со скетчем для сенсора. Из изменений - на сенсоре 3 датчика температуры, на начальной стадии попытка подружить его с датчиком DHT. Так же по 1-wire добавил обязательную отправку температуры раз в 5 минут с последней отправки данных (если в течении 5 минут данные отправляются по условию изменения температуры на 0,5 градуса, счетчик сбрасывается и начинается новый отсчет). На этих выходных в планах разобраться окончательно с DHT, подружить с реле, начать работу с адресами (возможно каналами) для стабильной работы нескольких модулей.
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server

Сообщение serghei » Пт окт 28, 2016 10:57 pm

Обязательно проверю и отпишусь.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
cahek2202
Сообщения: 23
Зарегистрирован: Пт окт 07, 2016 7:35 pm
Откуда: Москва
Благодарил (а): 0
Поблагодарили: 1 раз

Re: Arduino Mega Server

Сообщение cahek2202 » Пт окт 28, 2016 11:04 pm

serghei писал(а):при старте температура передается сразу
а можете свой вариант тоже показать? Пытался сделать первую передачу температуры сразу после старта сенсора, но внятного ничего не получилось, решил это оставить на потом, пока есть более насущные вопросы.
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Пт окт 28, 2016 11:30 pm

что не так делаю?

почему Parasite power OFF ?
Причин может быть множество, см. здесь:

http://hi-lab.ru/arduino-mega-server/do ... re-sensors
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Arduino Mega Server

Сообщение alexsis_76 » Сб окт 29, 2016 6:06 am

Если не сложно - подскажите что значат вот эти символы "->" и "*" вот в этой части кода например:
Это нужно целую лекцию читать и не одну
никаких лекций читать не надо.
в функцию передается указатель на структуру
struct Sedenr *p
где p указатель на структуру Sender в данном случае Sender это обычная переменная только определенная пользователем.
"->
доступ к элементам структуры,используется если вы работаете со структурой через указатель.
* - это большая тема про сылочные типы и указатели
используется такая возможность микроконтроллера как косвенная адресация(есть еще прямая) в avr есть аппаратные регистры в которые можно положить адрес операнда и затем использовть эти данные в программе (допустим в регистре A расположенном по адресу 0xff записано число 100,ложим в регистр косвенной адресации адрес регистра A -0xff,затем программа может обратится по этому адресу и сделать что нибудь с его содержимым)вот вам и указатель.
Ответить