Arduino Mega Server

Модератор: Alex

Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm

Re: Arduino Mega Server

Сообщение Alex »

Значения можно хранить на SD. Можно просто поправить 0 на 1
Вы не понимаете: переключение с веб-страницы вообще не имеет смысла — владелец железа практически никогда не меняет свой шилд.

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

Изменением одного значения, а не лазаньем по коду и выискивание десятков мест, где нужно что-то закомментировать вручную.
Alex вы ведь писали код у Вас там прямо напичкано директивами условной компиляции,тогда у вас все работало,а почему сейчас нет?
Хороший вопрос. Это всё действительно прекрасно работает, но отказывается работать с конструкциями типа

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

#include <Ethernet.h>   
Там, где встречается #include и угловые скобки < > директивы условной компиляции перестают работать. Можете проверить сами на дистрибутиве АМС. Поэтому и вопрос к знатокам. Почему это не работает и как заставить это работать. То, что можно заставить, у меня сомнений нет. Но как?
Аватара пользователя
ser009
Сообщения: 595
Зарегистрирован: Сб окт 13, 2012 9:55 am

Re: Arduino Mega Server

Сообщение ser009 »

а какие ошибки при компиляции?
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm

Re: Arduino Mega Server

Сообщение Alex »

Я использовал конструкции типа

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

#define ETHERNET_LIBRARY 

#if defined(ETHERNET_LIBRARY)
  // W5500
  #include <Ethernet2.h>
  #include <EthernetUdp2.h>
#else
  // W5100
  #include <Ethernet.h>
  #include <EthernetUdp.h>
#endif   
и множество других вариантов. Ветки прекрасно переключаются, но переключение не действует на

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

  #include <Ethernet2.h>
  #include <EthernetUdp2.h>   
и

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

  #include <Ethernet.h>
  #include <EthernetUdp.h>
 
они просто тупо компилируются вместе, что, естественно, вызывает ошибки.

Ещё раз: ветки переключаются, но переключение не действует на директивы подключения библиотек. Почему?
alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am

Re: Arduino Mega Server

Сообщение alexsis_76 »

вот такое попробуйте
#define eth
// W5100
#ifdef eth
#include <Ethernet.h>
#endif
// W5500\
#ifndef eth
#include <Ethernet2.h>
#endif
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm

Re: Arduino Mega Server

Сообщение Alex »

Попробовал — как я и говорил, на include <> директивы не действуют и компилируются сразу обе библиотеки.

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

Используем библиотеку Ethernet в папке: C:\Sketches\ams\Arduino\libraries\Ethernet 
Используем библиотеку Ethernet2 в папке: C:\Sketches\ams\Arduino\libraries\Ethernet2
Почему?! Этому должно быть какое-то рациональное объяснение. И должен быть какой-то путь решения этой проблемы. Буквально заблудились в трёх соснах.
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург

Re: Arduino Mega Server

Сообщение nick7zmail »

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

Re: Arduino Mega Server

Сообщение Alex »

Про генераторы прошивок это вопрос второй. Здесь вопрос принципиальный, тут получается как бы 2х2=5. И вопрос чести (особенно для «настоящих» программистов) выяснить в чём тут дело.

Или теперь у нас будет 2х2=5! :)
alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am

Re: Arduino Mega Server

Сообщение alexsis_76 »

сколько пользовался никогда проблем не было,правда использовал переменные,может надо перенести библиотеки в проект,но при указании пути у файлу орет что там ничего нет,хотя там все есть.
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm

Re: Arduino Mega Server

Сообщение Alex »

Есть ещё обходной путь, вот похожий пример:
#define TARGET avr
...
#define FNAME_CONCAT(First, Second) <First/**/Second>
#include FNAME_CONCAT(TARGET,/io.h)

В данном случае макрос в директиве include развернётся в #include <avr/io.h>.
Но у меня не получилось корректно развернуть макрос.
alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am

Re: Arduino Mega Server

Сообщение alexsis_76 »

Кажись получилось
ALEX попробуйте так
//#define eth
// W5100
#ifdef eth
// #include <Ethernet.h>
#include "C:/121/Sketches/Sketches/ams/Arduino/arduino_mega_server/libraries/libraries/Ethernet/src/Ethernet.h"
#include <EthernetUdp.h>
#endif
#ifndef eth
// #include <Ethernet.h>
#include "C:/121/Sketches/Sketches/ams/Arduino/arduino_mega_server/libraries/libraries/Ethernet2/src/Ethernet2.h"
#include <EthernetUdp.h>
#endif
для инслюде укажите полный путь начиная с корня,теперь берет библиотеки из каталога с проектом
Ответить