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

Re: Arduino Mega Server

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

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

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

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

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

Re: Arduino Mega Server

Добавлено: Сб апр 22, 2017 9:28 am
ser009
а какие ошибки при компиляции?

Re: Arduino Mega Server

Добавлено: Сб апр 22, 2017 9:50 am
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>
 
они просто тупо компилируются вместе, что, естественно, вызывает ошибки.

Ещё раз: ветки переключаются, но переключение не действует на директивы подключения библиотек. Почему?

Re: Arduino Mega Server

Добавлено: Сб апр 22, 2017 10:05 am
alexsis_76
вот такое попробуйте
#define eth
// W5100
#ifdef eth
#include <Ethernet.h>
#endif
// W5500\
#ifndef eth
#include <Ethernet2.h>
#endif

Re: Arduino Mega Server

Добавлено: Сб апр 22, 2017 10:13 am
Alex
Попробовал — как я и говорил, на include <> директивы не действуют и компилируются сразу обе библиотеки.

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

Используем библиотеку Ethernet в папке: C:\Sketches\ams\Arduino\libraries\Ethernet 
Используем библиотеку Ethernet2 в папке: C:\Sketches\ams\Arduino\libraries\Ethernet2
Почему?! Этому должно быть какое-то рациональное объяснение. И должен быть какой-то путь решения этой проблемы. Буквально заблудились в трёх соснах.

Re: Arduino Mega Server

Добавлено: Сб апр 22, 2017 10:26 am
nick7zmail
Возможно немного не в тему, но как альтернатива обьявлению директив (в направлении "мыслить шире", и про "создавать разные сборки"), может за этим и придумали генераторы прошивок...то что не нашли как переключить директивы компиляции, и решили написать прогу, которая просто нужные директивы сама накидывает в файл, а потом уже его заливают в IDE...

Re: Arduino Mega Server

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

Или теперь у нас будет 2х2=5! :)

Re: Arduino Mega Server

Добавлено: Сб апр 22, 2017 11:18 am
alexsis_76
сколько пользовался никогда проблем не было,правда использовал переменные,может надо перенести библиотеки в проект,но при указании пути у файлу орет что там ничего нет,хотя там все есть.

Re: Arduino Mega Server

Добавлено: Сб апр 22, 2017 12:13 pm
Alex
Есть ещё обходной путь, вот похожий пример:
#define TARGET avr
...
#define FNAME_CONCAT(First, Second) <First/**/Second>
#include FNAME_CONCAT(TARGET,/io.h)

В данном случае макрос в директиве include развернётся в #include <avr/io.h>.
Но у меня не получилось корректно развернуть макрос.

Re: Arduino Mega Server

Добавлено: Сб апр 22, 2017 1:29 pm
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
для инслюде укажите полный путь начиная с корня,теперь берет библиотеки из каталога с проектом