Не компилируется если //#ifdef
- Войдите на сайт для отправки комментариев
Пт, 27/03/2015 - 01:31
Так все компилируется:
#define DISPLAY #ifdef DISPLAY #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x20,16,2); #else Serial.begin(9600); #endif void setup(){ pinMode(13, OUTPUT); } void loop(){ }
Так не компилируется (отличие только в первой строке):
//#define DISPLAY #ifdef DISPLAY #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x20,16,2); #else Serial.begin(9600); #endif void setup(){ pinMode(13, OUTPUT); } void loop(){ }
Почему?
Serial.begin ни в сетапе, ни в лупе. низзя
Это почему это еще нельзя ? По вашему как тогда менять скорость порта в процессе работы ? Скорее наоборот. В данном случае какая то странная конструкция. Если хотим дисплей, то подключаем библиотеки, а если нет - инициализируем уже где то подключенную. Причем не в коде, а как то директивно :) По сути вне какой либо подпрограммы. То есть Serial.begin обязан быть либо в сетапе, либо в лупе, либо в любой процедуре. А в коде сверху он вне какой либо процедуры. В космосе просто :)
вы внимательно прочитайте, что я пишу, а то сначала меня опровергаете, а потом подтверждаете мои же слова
Почему?
А компилятор не сказал разве, почему он не компилирует? :)
компилятор, разумеется, сказал, только это совершенно не в кассу, поэтому и пришлось вынести на обсуждение.
sketch_mar27a:16: error: expected constructor, destructor, or type conversion before '.' token
sketch_mar27a.ino: In function 'void setup()':
sketch_mar27a:16: error: 'OUTPUT' was not declared in this scope
sketch_mar27a:16: error: 'pinMode' was not declared in this scope
Суть не в Serial.begin...
Так тоже не работает:
а!
нельзя переменные в блоках условной компиляции объявлять.
дело в
LiquidCrystal_I2C lcd(0x20,16,2);
А вот так работает:
Но я считаю что запускать дисплей в условии не правильно. Можно отладку отключать, я применяю у себя:
Для начала Serial.begin в setup().
Потом смотришь объявление контруктора для LiquidCrystal_I2C и выставляешь параметры правильно.
И где, черт возьми, текст ошибки?!
Услуги экстрасенса сильно платные на этом форуме.
В посте #5. И, черт, возьми, мне несложно продублировать:
#ifdef DEBUG я и так использую в других местах. В данном случае дисплей нужен эпизодически, именно для настройки параметров вывода. В планах было все, что с ним связано, в конечном релизе отключить одним комментарием, чтобы высвободить больше памяти.
Про преждевременный вызов setup уже понятно. Даже если убрать #else, все равно ругается, что мне странно - функции вызова и инициализации дисплея даже в примерах написаны до setup, мною лишь обернуты в условие:
Serial.begin ни в сетапе, ни в лупе. низзя
Вы сами себя внимательно почитайте. Или переведите то, что написали, для стандартно мыслящих.