Страница 277 из 328

Re: Arduino Mega Server

Добавлено: Сб сен 22, 2018 10:06 pm
serghei
Возможно я изменил вкладку " Контакт". Привожу рабочий вариант. Сама вкладка

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

/*
  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 вольт - оба зеленых.

Re: Arduino Mega Server

Добавлено: Сб сен 22, 2018 10:40 pm
schel4ok
Спасибо. Этот вариант работает.
Я уже сам последовательно нашел, что проблема была именно в коде файла 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
      }
  }

Re: Arduino Mega Server

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

Я это прошел с 013 версии. И слежу за всеми сообщениями в теме. Так что мне проще в этом плане.

Re: Arduino Mega Server

Добавлено: Пн сен 24, 2018 6:15 am
nick7zmail
Alex писал(а):
Сб сен 22, 2018 7:02 am

Друзья! После того, как на главной странице сайта исчез список последних сообщений на форуме, я стал пропускать ваши вопросы потому, что просто не вижу их. Поэтому ответы либо задерживаются, либо вы их не получаете вовсе. Я уже поднимал этот вопрос, ещё раз хочу обратить на это внимание: Сергей, верните список последних сообщений! (Тот список, который есть, слишком короткий и работает по неправильному алгоритму.)
Вроде тут есть https://majordomo.smartliving.ru/forum/ ... ifications

Re: Arduino Mega Server

Добавлено: Пн сен 24, 2018 6:55 am
Alex
Вроде тут есть https://majordomo.smartliving.ru/forum/ ... ifications
Что-то это совсем не то. Я пользуюсь вот этой страницей

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

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

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

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

В общем, тот список был единственной удобной функцией на форуме — конечно же нужно было её упразднить (чтобы народ не расслаблялся и всегда был в тонусе).

Re: Arduino Mega Server

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

Если честно того списка сообщений тоже по началу сильно не хватало. Ща вроде привык этой штукой уже пользоваться. Там надо просто 1 раз "отметить всё как прочитанное", а потом уже следить за динамикой (если что - доступ к этой странице по колокольчику в верхней панели. Там же кол-во новых уведомлений).

Re: Arduino Mega Server

Добавлено: Вт сен 25, 2018 6:52 am
Alex
Ща вроде привык этой штукой уже пользоваться.
Вот зачем нам лишние трудности и зачем нам к чему-то привыкать? Было прекрасное решение — зачем нужно было его убирать? Кому оно мешало7

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

Ещё раз: зачем нужно было ломать то, что прекрасно работало? И почему нужно сохранять гробовое молчание в ответ на вопли юзеров (я тут не единственный кто просил вернуть список)?

Re: Arduino Mega Server

Добавлено: Вт сен 25, 2018 7:22 am
serghei
Не единственный. И почему надо где то голосовать за то , чтобы нам вылечили форум УМНОГО дома?
Мне как бы достаточно подписаться на тему и на почту приходят уведомления о новых сообщениях.
Но это уже злой OffTop.

Re: Arduino Mega Server

Добавлено: Вт сен 25, 2018 7:31 am
Alex
Мне как бы достаточно подписаться на тему и на почту приходят уведомления о новых сообщениях.
А мне, походу, недостаточно — уведомления приходят по настроению, когда у них хорошее настроение — приходят, когда не очень — не приходят, в общем этой функцией практически невозможно пользоваться.

Re: Arduino Mega Server

Добавлено: Чт окт 18, 2018 9:43 am
Alex
Интересный вопрос по программированию: у нас есть таймер 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, не изменяя исходники среды Ардуино?