Страница 204 из 326

Re: Arduino Mega Server

Добавлено: Чт апр 06, 2017 10:34 am
serghei
OFF TOP. Это еще раз к вопросу поиска по форуму ))).

Re: Arduino Mega Server

Добавлено: Чт апр 06, 2017 11:39 am
ser009
Это к вопросу о том, что все хорошие мысли и идеи в кучу нужно сложить, не выискивать 20 страниц тому назад
Создать такую ветку ???

Re: Arduino Mega Server

Добавлено: Чт апр 06, 2017 11:46 am
serghei
Я давно уже предложил ,но не успел ))). А назвать её " Библиотека решений для АМС" и в шапку хотя бы давать ссылки на обсуждения. Даже Вы выкладываете исправления , а через месяц их не найти ни на форуме,ни в компе.(((
Правда она будет сильно пересекаться с прикручиванием железа. У себя нашел еще одну версию управлением реле с уже готовой страницы. Не помню кто и где выкладывал. Если еще позволит форум, то тут перезалью.

Re: Arduino Mega Server

Добавлено: Чт апр 06, 2017 3:35 pm
ser009
Немного разобрался с вводом значений с Web->Arduino.
Готовлю небольшой пример управления настройками аналогового сигнала с Веба
Думаю при отладке очень удобно будет пользоваться
SPOILERSPOILER_SHOW
аналог настройки.JPG
аналог настройки.JPG (45.24 КБ) 11962 просмотра

Re: Arduino Mega Server

Добавлено: Вт апр 18, 2017 5:03 pm
Filipp15
После включения аутентификации AMS не доступен из интернета, как будто перестает работать переадресация портов. Это проблема в роутере или в AMS? У кого нибудь работает аутентификация с переадресацией портов?

Re: Arduino Mega Server

Добавлено: Сб апр 22, 2017 7:21 am
Alex
Наконец-то у знатоков С и системного программирования появилась возможность блеснуть своими знаниями и перейти от декларативных заявлений к делу. :)

Суть вопроса такова: в АМС уже давно присутствует конструкция

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

// W5100
#include <Ethernet.h>
#include <EthernetUdp.h>

// W5500
//#include <Ethernet2.h>
//#include <EthernetUdp2.h> 
Что очень неудобно и желательно автоматизировать процесс переключения библиотек, например, в зависимости от значения

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

#define ETHERNET_LIBRARY 
Но не тут-то было, всеми мыслимыми и немыслимыми способами не удалось построить конструкцию из директив условной компиляции, которая переключала бы библиотеки в зависимости определения (или не определения) ETHERNET_LIBRARY.

Найдутся ли среди нас такие специалисты?

Re: Arduino Mega Server

Добавлено: Сб апр 22, 2017 7:46 am
ser009
Сделай на примере авторизации.
Заведи переменную и меняй её с веб странички, после изменения перезапускай АМС.
Значения по умолчанию хранить в EEprom или на sd (у DUE нет EEPROM)

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

// 0 - W5100
// 1 - W5500
switch (ETH) {
    label 0:
      #include <Ethernet.h>
      #include <EthernetUdp.h>
      break;
    label 1:
      #include <Ethernet2.h>
      #include <EthernetUdp2.h>
      break;
    default:
      #include <Ethernet.h>
      #include <EthernetUdp.h>
  }

Re: Arduino Mega Server

Добавлено: Сб апр 22, 2017 8:01 am
Alex
Ответ никуда не годится — если у человека не тот шилд, то он вообще никогда не получит доступа к веб-странице, потому что АМС просто не запустится.

Во-вторых у меня большие сомнения в работоспособности этой конструкции. Я бы сказал что этот код не будет работать.

И в третьих в задаче спрашивалось о переключении при помощи директив условной компиляции.

Re: Arduino Mega Server

Добавлено: Сб апр 22, 2017 8:21 am
ser009
Alex писал(а):Ответ никуда не годится — если у человека не тот шилд, то он вообще никогда не получит доступа к веб-странице, потому что АМС просто не запустится.
Значения можно хранить на SD. Можно просто поправить 0 на 1

Встречный вопрос
Что сложного закоментировать 2 строчки в коде? Тем более что все так подробно описано. Просто применяя проект на практике мало вероятно что кто-то начнет менять туда сюда шилды. Обычно поставил, настроил и забыл про него.

Re: Arduino Mega Server

Добавлено: Сб апр 22, 2017 8:32 am
alexsis_76
switch (ETH) {
label 0:
#include <Ethernet.h>
#include <EthernetUdp.h>
break;
label 1:
#include <Ethernet2.h>
#include <EthernetUdp2.h>
break;
default:
#include <Ethernet.h>
#include <EthernetUdp.h>
}
Да честно говоря удивлен,#include то директива препроцессора,а switch это исполняемая инструкция,чувствуете разницу?
Наконец-то у знатоков С и системного программирования появилась возможность блеснуть своими знаниями и перейти от декларативных заявлений к делу.
Alex вы ведь писали код у Вас там прямо напичкано директивами условной компиляции,тогда у вас все работало,а почему сейчас нет?
#ifdef SD_INFO_FEATURE
sdInfoInit();
#endif
вот пример включения целого файла через директиву
#if defined(STACK_USE_REBOOT_SERVER)

#include "TCPIP Stack/TCPIP.h"


#define REBOOT_PORT 69 // UDP TFTP port


// For improved security, you might want to limit reboot capabilities
// to only users on the same IP subnet. Define REBOOT_SAME_SUBNET_ONLY
// to enable this access restriction.
#define REBOOT_SAME_SUBNET_ONLY


extern NODE_INFO remoteNode;

/*********************************************************************
* Function: void RebootTask(void)
*
* PreCondition: Stack is initialized()
*
* Input: None
*
* Output: None
*
* Side Effects: None
*
* Overview: Checks for incomming traffic on port 69.
* Resets the PIC if a 'R' is received.
*
* Note: This module is primarily for use with the
* Ethernet bootloader. By resetting, the Ethernet
* bootloader can take control for a second and let
* a firmware upgrade take place.
********************************************************************/
void RebootTask(void)
{
static UDP_SOCKET MySocket = INVALID_UDP_SOCKET;
struct
{
BYTE vMACAddress[6];
DWORD dwIPAddress;
WORD wChecksum;
} BootloaderAddress;

if(MySocket == INVALID_UDP_SOCKET)
MySocket = UDPOpen(REBOOT_PORT, NULL, INVALID_UDP_PORT);

if(MySocket == INVALID_UDP_SOCKET)
return;

// Do nothing if no data is waiting
if(!UDPIsGetReady(MySocket))
return;

#if defined(REBOOT_SAME_SUBNET_ONLY)
// Respond only to name requests sent to us from nodes on the same subnet
if((remoteNode.IPAddr.Val & AppConfig.MyMask.Val) != (AppConfig.MyIPAddr.Val & AppConfig.MyMask.Val))
{
UDPDiscard();
return;
}
#endif

// Get our MAC address, IP address, and compute a checksum of them
memcpy((void*)&BootloaderAddress.vMACAddress[0], (void*)&AppConfig.MyMACAddr.v[0], sizeof(AppConfig.MyMACAddr));
BootloaderAddress.dwIPAddress = AppConfig.MyIPAddr.Val;
BootloaderAddress.wChecksum = CalcIPChecksum((BYTE*)&BootloaderAddress, sizeof(BootloaderAddress) - sizeof(BootloaderAddress.wChecksum));

// To enter the bootloader, we need to clear the /POR bit in RCON.
// Otherwise, the bootloader will immediately hand off execution
// to us.
#if defined(USE_LCD)
strcpypgm2ram((char*)LCDText, "Bootloader Reset");
LCDUpdate();
#endif
RCONbits.POR = 0;
#if defined(__18CXX)
{
WORD_VAL wvPROD;

wvPROD.Val = ((WORD)&BootloaderAddress);
PRODH = wvPROD.v[1];
PRODL = wvPROD.v[0];
}
#endif
Reset();
}

#endif //#if defined(STACK_USE_REBOOT_SERVER)
#define STACK_USE_REBOOT_SERVER
кстати только сейчас увидел ,а почему label,а не case
вроде switch case