Страница 205 из 326
Re: Arduino Mega Server
Добавлено: Сб апр 22, 2017 8:49 am
Alex
Значения можно хранить на SD. Можно просто поправить 0 на 1
Вы не понимаете: переключение с веб-страницы вообще не имеет смысла — владелец железа практически никогда не меняет свой шилд.
Потом ваш код предполагает использование компиляции (то есть для работы он должен быть уже откомпилирован) и при этом пытается управлять подключением библиотеки, которую только предстоит откомпилировать — это просто не будет работать, для этого и нужны директивы условной компиляции.
Встречный вопрос
Что сложного закоментировать 2 строчки в коде? Тем более что все так подробно описано. Просто применяя проект на практике мало вероятно что кто-то начнет менять туда сюда шилды. Обычно поставил, настроил и забыл про него.
Смотрите шире: автоматизация подключения той или иной библиотеки позволяет изменением одного макроса изменять множество параметров проекта и автоматически создавать разные сборки.
Изменением одного значения, а не лазаньем по коду и выискивание десятков мест, где нужно что-то закомментировать вручную.
Alex вы ведь писали код у Вас там прямо напичкано директивами условной компиляции,тогда у вас все работало,а почему сейчас нет?
Хороший вопрос. Это всё действительно прекрасно работает, но отказывается работать с конструкциями типа
Там, где встречается #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
для инслюде укажите полный путь начиная с корня,теперь берет библиотеки из каталога с проектом