Arduino Mega Server

Модератор: Alex

serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server

Сообщение serghei » Сб сен 22, 2018 10:06 pm

Возможно я изменил вкладку " Контакт". Привожу рабочий вариант. Сама вкладка

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

/*
  Module Contacts
  part of Arduino Mega Server project
*/

#ifdef CONTACTS_FEATURE

#define CONT1_PIN 27
#define CONT2_PIN 31

#define OPEN  1
#define CLOSE 0

char cont1object[] = "cont1";
char cont2object[] = "cont2";

char cont1openMess[] = "Open"; char cont1closeMess[] = "Closed";
char cont2openMess[] = "Down"; char cont2closeMess[] = "Norm";

// states
// 0 - open
// 1 - close
// 2 - not defined
byte cont1state = 2; byte old_cont1state = 2; byte cont1objectState = 2;
byte cont2state = 2; byte old_cont2state = 2; byte cont2objectState = 2;

void contactsInit() {
  pinMode(CONT1_PIN, INPUT);
  pinMode(CONT2_PIN, INPUT);
  moduleContacts = MODULE_ENABLE;
  started("Contacts");
}

void printContMess(char obj[], char mess[]) {
  timeStamp(); Serial.print(obj); Serial.print(F(": ")); Serial.println(mess);
}

void contactsWorks() {
  // cont1
  cont1state = digitalRead(CONT1_PIN);
  if (cont1state != old_cont1state) {
      old_cont1state = cont1state;
      if (cont1state == 0) {
        cont1objectState = OPEN;
        printContMess(cont1object, cont1openMess);
        #ifdef MAJORDOMO_FEATURE
          sendRequestM(cont1object, OPEN);
        #endif
        
      } else {
        cont1objectState = CLOSE;
        printContMess(cont1object, cont1closeMess);

             
                
        #ifdef MAJORDOMO_FEATURE
          sendRequestM(cont1object, CLOSE);
        #endif
      }
  }
  
  // cont2
  cont2state = digitalRead(CONT2_PIN);
  if (cont2state != old_cont2state) {
    old_cont2state = cont2state;
    if (cont2state == 1) {
      cont2objectState = OPEN;
      printContMess(cont2object, cont2openMess);
    } else {
        cont2objectState = CLOSE;
        printContMess(cont2object, cont2closeMess);
      }
  }
} // contactsWorks()

#endif // CONTACTS_FEATURE
В сервере ажакс

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

#ifdef CONTACTS_FEATURE
  String makeContacts() {
    String s = "";
    s += makeTag(BASE_CONTACT, "1", String(cont1objectState));
    s += makeTag(BASE_CONTACT, "2", String(cont2objectState));
    return s;
  }
#endif
----------------
    #ifdef CONTACTS_FEATURE
      s += makeContacts();// В void respDash(EthernetClient cl) {
    #endif  
В Dash.js

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

          // Contacts

          for (var i = 0; i < contName.length; i++) {
            try {
              var dcont = this.responseXML.getElementsByTagName(contXml[i])[0].childNodes[0].nodeValue;
            } catch (err) {
                dcont = '-1';
              }
            try {
              document.getElementById(contId[i]).innerHTML        = contName[i];
              document.getElementById(contId[i]).style.background = contactBackground(dcont);
              document.getElementById(contId[i]).style.color      = contactColor(dcont);
            } catch (err) { }
          }
Только работает в инверсном режиме - при D31 на +5 вольт и D27 на корпус оба контакта красных. При D31 на корпус и D27 на +5 вольт - оба зеленых.
За это сообщение автора serghei поблагодарил:
schel4ok (Сб сен 22, 2018 10:40 pm)
Рейтинг: 1.16%
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
schel4ok
Сообщения: 136
Зарегистрирован: Вс сен 02, 2018 8:03 am
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Arduino Mega Server

Сообщение schel4ok » Сб сен 22, 2018 10:40 pm

Спасибо. Этот вариант работает.
Я уже сам последовательно нашел, что проблема была именно в коде файла contacts.ino
Он всё время передавал состояние контакта = 1. И поэтому в шапке у меня ничего не менялось.
Но знаний C++ пока не хватает, чтобы написать этот код верно.

А в прошлом сообщении была ещё такая конструкция. Она для чего?

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

  if (cycle1m) {
    old_cont1state = cont1state;
    if (cont1state == 0) {
      printContMess(cont1object, cont1openMess);
      #ifdef MAJORDOMO_FEATURE
        sendRequestM(cont1object, OPEN);
      #endif
    } else {
        printContMess(cont1object, cont1closeMess);
        #ifdef MAJORDOMO_FEATURE
          sendRequestM(cont1object, CLOSE);
        #endif
      }
  }
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server

Сообщение serghei » Сб сен 22, 2018 10:55 pm

То сообщение относилось к Дуе еще 016 версии. Сейчас в 017 для Меги и Дуе код кардинально переделан в правильную сторону )). И кстати очень полезно посмотреть эволюцию развития кода от 010 до 017 версии. Это к вопросу о программировании. Хотя бы просто посмотреть что кардинально изменилось в 017 версии.

Я это прошел с 013 версии. И слежу за всеми сообщениями в теме. Так что мне проще в этом плане.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Arduino Mega Server

Сообщение nick7zmail » Пн сен 24, 2018 6:15 am

Alex писал(а):
Сб сен 22, 2018 7:02 am

Друзья! После того, как на главной странице сайта исчез список последних сообщений на форуме, я стал пропускать ваши вопросы потому, что просто не вижу их. Поэтому ответы либо задерживаются, либо вы их не получаете вовсе. Я уже поднимал этот вопрос, ещё раз хочу обратить на это внимание: Сергей, верните список последних сообщений! (Тот список, который есть, слишком короткий и работает по неправильному алгоритму.)
Вроде тут есть https://majordomo.smartliving.ru/forum/ ... ifications
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Пн сен 24, 2018 6:55 am

Вроде тут есть https://majordomo.smartliving.ru/forum/ ... ifications
Что-то это совсем не то. Я пользуюсь вот этой страницей

https://connect.smartliving.ru/forum.html

Но у неё два недостатка по сравнению с прошлой версией:

1. список слишком короткий и за ним нужно постоянно следить. В реальной жизни 50% постов пролетают незамеченными.

2. прошлая версия списка группировала однотипные сообщения в одно, вследствие чего информационная ёмкость списка была в 2-3 раза больше при том же количестве строк.

В общем, тот список был единственной удобной функцией на форуме — конечно же нужно было её упразднить (чтобы народ не расслаблялся и всегда был в тонусе).
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Arduino Mega Server

Сообщение nick7zmail » Вт сен 25, 2018 6:19 am

Да вроде как раз то...список всех последних сообщений по темам с момента последнего присутствия. Правда мусора много в виде благодарностей, цитат и т.п. Фильтр бы не помешал. А так вроде с тегом "Ответ" как раз то самое, сильно расширенный функционал списка сообщений))

Если честно того списка сообщений тоже по началу сильно не хватало. Ща вроде привык этой штукой уже пользоваться. Там надо просто 1 раз "отметить всё как прочитанное", а потом уже следить за динамикой (если что - доступ к этой странице по колокольчику в верхней панели. Там же кол-во новых уведомлений).
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Вт сен 25, 2018 6:52 am

Ща вроде привык этой штукой уже пользоваться.
Вот зачем нам лишние трудности и зачем нам к чему-то привыкать? Было прекрасное решение — зачем нужно было его убирать? Кому оно мешало7

А в предлагаемом варианте кроме неудобства и непривычности есть ещё один недостаток — необходимость входить на форум. Мне удобнее видеть список сообщений без входа на форум.

Ещё раз: зачем нужно было ломать то, что прекрасно работало? И почему нужно сохранять гробовое молчание в ответ на вопли юзеров (я тут не единственный кто просил вернуть список)?
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server

Сообщение serghei » Вт сен 25, 2018 7:22 am

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

Re: Arduino Mega Server

Сообщение Alex » Вт сен 25, 2018 7:31 am

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

Re: Arduino Mega Server

Сообщение Alex » Чт окт 18, 2018 9:43 am

Интересный вопрос по программированию: у нас есть таймер TIMER0 и его прерывание по переполнению TIMER0_OVF_vect, в исходниках есть следующий фрагмент

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

#if defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
ISR(TIM0_OVF_vect)
#else
ISR(TIMER0_OVF_vect)
#endif
{

	unsigned long m = timer0_millis;
	unsigned char f = timer0_fract;

	m += MILLIS_INC;
	f += FRACT_INC;
	if (f >= FRACT_MAX) {
		f -= FRACT_MAX;
		m += 1;
	}

	timer0_fract = f;
	timer0_millis = m;
	timer0_overflow_count++;
}
Вопрос: как отследить в скетче срабатывание по переполнению таймера TIMER0, не изменяя исходники среды Ардуино?
Ответить